<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Lupita Code 🌄</title>
    <description>The latest articles on Forem by Lupita Code 🌄 (@lupitacode).</description>
    <link>https://forem.com/lupitacode</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F617393%2F67c4df49-d9b4-4361-a19f-a1a31486dec7.png</url>
      <title>Forem: Lupita Code 🌄</title>
      <link>https://forem.com/lupitacode</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/lupitacode"/>
    <language>en</language>
    <item>
      <title>🌈 La propiedad border-radius para redondear esquinas en elementos CSS</title>
      <dc:creator>Lupita Code 🌄</dc:creator>
      <pubDate>Sat, 05 Oct 2024 22:37:18 +0000</pubDate>
      <link>https://forem.com/lupitacode/la-propiedad-border-radius-para-redondear-esquinas-en-elementos-css-24h3</link>
      <guid>https://forem.com/lupitacode/la-propiedad-border-radius-para-redondear-esquinas-en-elementos-css-24h3</guid>
      <description>&lt;p&gt;¡Hola gente bonita!👋&lt;/p&gt;

&lt;p&gt;Casi todos los botones, modales, cards, iconos y logotipos que ves en las interfaces tienen las esquinas redondeadas. &lt;/p&gt;

&lt;p&gt;Puede establecer la curvatura en cada una de las cuatro esquinas de un elemento con la propiedad &lt;code&gt;border-radius&lt;/code&gt; especificando el radio del circulo.&lt;/p&gt;

&lt;p&gt;Cuanto mas grande es este radio mayor efecto de redondeo conseguiremos. El redondeo puede ser un &lt;strong&gt;circulo&lt;/strong&gt; o una &lt;strong&gt;elipse&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Vamos a profundizar en la propiedad &lt;code&gt;border-radius&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Si utiliza un único valor, significa que las cuatro esquinas se redondean por ese valor. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqah75r97bn5my5coauaf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqah75r97bn5my5coauaf.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Si utiliza dos valores, se aplica el primer valor a las esquinas top-left y bottom-right y el segundo valor a las esquinas top-right y bottom-left.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F48lcr4dm1v6l1gbcalto.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F48lcr4dm1v6l1gbcalto.jpg" alt="Rounded rectangle showing the result of two values for the shorthand"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ℹ️ Si se omite el valor inferior derecho (bottom-right) es igual que el superior izquierdo (top-left) y si se omite el inferior izquierdo (bottom-left) es igual que el superior derecho (top-right), es decir, La esquina opuesta en ambos casos.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Si utiliza tres valores, se aplica el primer valor a la esquina top-left, el segundo valor a las esquinas top-right y bottom-left y el tercer valor a la esquina bottom-right.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcm1mnme1sql67bx38x51.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcm1mnme1sql67bx38x51.jpg" alt="Rounded rectangle showing the result of three values for the shorthand"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ℹ️ Como no hay un cuarto valor asignado, lo que se hace es tomar el de la esquina correspondiente. Cuando se llega a la esquina inferior izquierda (bottom-left) se toma el valor de la esquina que tiene enfrente, es decir, la esquina superior derecha (top-right).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Si utiliza los cuatro valores se aplica a cada esquina del elemento. Recuerda que empezamos por la esquina superior izquierda y vamos girando en el sentido de las agujas del reloj, hasta terminar en la esquina inferior izquierda.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2alu5heoj6ilx2zh4yxm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2alu5heoj6ilx2zh4yxm.png" alt="Rounded rectangle showing the order of values in the border-radius shorthand"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Propiedades individuales de redondeo
&lt;/h2&gt;

&lt;p&gt;También puede especificar cada una de las esquinas usando las propiedades individuales, esto es verboso pero tiene la ventaja de ser explicito para usted o cualquier futuro lector de su código.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F680wupqgpfi71g6cuqjf.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F680wupqgpfi71g6cuqjf.jpeg" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;También podemos utilizar dos valores en cada propiedad individual para crear una elipse. Por ejemplo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc16g0q7ttji8puknd44t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc16g0q7ttji8puknd44t.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Profundizaremos en esto en unos momentos...&lt;/p&gt;

&lt;h2&gt;
  
  
  Valores
&lt;/h2&gt;

&lt;p&gt;La propiedad border-radius puede aceptar cualquier unidad de longitud CSS válida. Puedes especificar el valor de &lt;code&gt;border-radius&lt;/code&gt; en porcentajes. Esto es útil para crear una forma de círculo o elipse:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.element&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;200px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa74tju3xs89an9273oni.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa74tju3xs89an9273oni.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;También podrías mezclar porcentajes con valores de longitud fija.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Cuál es la diferencia entre usar porcentajes y pixeles?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El valor del porcentaje se basa en la anchura y la altura del elemento dado, mientras que los pixeles no. Por lo tanto, si utiliza porcentajes en un rectángulo, ya no tendrá esquinas simétricas. &lt;/p&gt;

&lt;p&gt;Aquí hay un ejemplo que muestra la diferencia entre &lt;code&gt;border-radius: 50px&lt;/code&gt; y &lt;code&gt;border-radius: 50%&lt;/code&gt; aplicado a un rectángulo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flnlthtcvaneurid16ybz.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flnlthtcvaneurid16ybz.jpg" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Como funciona la propiedad &lt;code&gt;border-radius&lt;/code&gt;?
&lt;/h2&gt;

&lt;p&gt;Si dibujamos un elemento de &lt;code&gt;300px&lt;/code&gt; de alto y &lt;code&gt;300px&lt;/code&gt; de ancho y un &lt;code&gt;border-top-left-radius: 100px&lt;/code&gt;, el elemento comienza a curvarse desde la esquina superior izquierda ya que empieza desde esa esquina y avanza hasta llegar a &lt;code&gt;100px&lt;/code&gt; de lo ancho del elemento.&lt;/p&gt;

&lt;p&gt;Después hace lo mismo en el lado vertical que es la altura, es decir, comienza desde la misma esquina superior izquierda y baja &lt;code&gt;100px&lt;/code&gt;, por lo tanto, se crea esta área redondeada entre ambos lados.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk35l9f6pyqz7g6k1xz8u.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk35l9f6pyqz7g6k1xz8u.jpg" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Si dibujamos una caja, como la que vemos en la imagen, que solo tenga la parte de la esquina superior izquierda curvada, esa caja tendría &lt;code&gt;100px&lt;/code&gt; de ancho y &lt;code&gt;100px&lt;/code&gt; de alto, es decir el valor que le dimos a &lt;code&gt;border-top-left-radius&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Radios de borde superpuestos
&lt;/h2&gt;

&lt;p&gt;Jay Sitter explicó lo que ocurre cuando el valor del radio de una esquina es tan grande que se solapa con el radio de otra esquina. Como en este ejemplo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff8rs3oj04qfv7z53o7ry.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff8rs3oj04qfv7z53o7ry.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Estamos aplicando un radio de 40px en las esquinas superior izquierda e inferior izquierda, así que ¿por qué son cuadradas? Porque el valor &lt;code&gt;999em&lt;/code&gt; de las otras dos esquinas las está cubriendo. Jay profundiza en las matemáticas detrás de esto y cómo evitar que suceda, por lo que vale la pena leer su &lt;a href="https://css-tricks.com/what-happens-when-border-radii-overlap/" rel="noopener noreferrer"&gt;articulo&lt;/a&gt; para obtener más contexto.&lt;/p&gt;

&lt;h2&gt;
  
  
  Elliptical Border Radius
&lt;/h2&gt;

&lt;p&gt;La propiedad &lt;code&gt;border-radius&lt;/code&gt; también se puede utilizar para crear bordes elípticos. El radio elíptico se establece especificando dos valores para cada eje en la misma esquina, separados por espacio.&lt;/p&gt;

&lt;p&gt;El primer valor es el radio es la dirección horizontal, el segundo es en la dirección vertical.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi1qctfvshif6l46482t2.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi1qctfvshif6l46482t2.jpeg" alt="Elliptical Border Radius"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cuando se utilizan radios elípticos con valores muy grandes, la curva de una esquina puede afectar a la curva de las esquinas adyacentes, especialmente las que tienen valores de radio más pequeños.&lt;/p&gt;

&lt;p&gt;En este ejemplo, sólo cambiamos el valor de la curva de la esquina superior derecha. Observe, sin embargo, que todas las esquinas redondeadas del elemento son codependientes entre sí, incluso aquellas cuyos valores no estamos cambiando explícitamente.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr31gbcveemblqhs0nfko.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr31gbcveemblqhs0nfko.jpg" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Ocho valores separados por una barra
&lt;/h2&gt;

&lt;p&gt;Ahora vamos a utilizar el shorthand &lt;code&gt;border-radius&lt;/code&gt; para establecer todos los radios en valores diferentes para obtener esquinas irregulares&lt;/p&gt;

&lt;p&gt;Para conseguirlo, solo hay que añadir una barra (/), los valores a la izquierda de la barra representan el radio horizontal para cada esquina, mientras que los que están a la derecha, representan el radio vertical.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2kpz7shze2mcchkcmys5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2kpz7shze2mcchkcmys5.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como puedes observar damos dos vueltas alrededor de nuestro elemento en el sentido de las agujas del reloj.&lt;/p&gt;

&lt;h2&gt;
  
  
  Radios anidados
&lt;/h2&gt;

&lt;p&gt;Si tienes un elemento con bordes redondeados y esta dentro de otro que también tiene sus bordes redondeados y algo de padding, te habrás dado cuenta que, aunque ambos tengan el mismo &lt;code&gt;border-radius&lt;/code&gt;, el elemento anidado no se va alinear bien con el elemento externo.&lt;/p&gt;

&lt;p&gt;La razón es que, aunque coinciden en valor, no coinciden matemáticamente ya que la distancia que hay en las esquinas es mayor que el espacio de los lados del elemento.&lt;/p&gt;

&lt;p&gt;Así que para calcular el radio ideal de un elemento anidado, debe utilizar una fórmula sencilla: &lt;code&gt;outerRadius = innerRadius + spaceBetween (padding)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftl3by5jdl9mfxfe8k34x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftl3by5jdl9mfxfe8k34x.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;outerRadius: Radio del borde del elemento padre.&lt;/li&gt;
&lt;li&gt;innerRadius: Radio del borde del elemento hijo.&lt;/li&gt;
&lt;li&gt;spaceBetween: Espacio de &lt;code&gt;padding&lt;/code&gt; entre el elemento padre e hijo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esta fórmula asegura que el elemento anidado encaje perfectamente dentro del elemento padre, dando como resultado un aspecto más armonioso.&lt;/p&gt;

&lt;p&gt;Aquí puede ser muy útil usar las custom properties:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.parent&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
 &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--padding&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
 &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;calc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--radius&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;+&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--padding&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.nested&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--radius&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Generadores
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://10015.io/tools/css-border-radius-generator" rel="noopener noreferrer"&gt;CSS Border Radius Generator&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://9elements.github.io/fancy-border-radius/" rel="noopener noreferrer"&gt;Fancy Border Radius Generator&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://9elements.github.io/fancy-border-radius/full-control.html#10.10.10.10-90.90.90.90-." rel="noopener noreferrer"&gt;8 Point full control&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_backgrounds_and_borders/Border-radius_generator" rel="noopener noreferrer"&gt;Border-radius generator&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Referencias
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.amazon.com/CSS-Visual-Dictionary-Greg-Sidelnikov-ebook/dp/B07DQMNHF5" rel="noopener noreferrer"&gt;CSS Visual Dictionary&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://css-irl.info/logical-border-radius/" rel="noopener noreferrer"&gt;Logical Border Radius&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://9elements.com/blog/css-border-radius-can-do-that/" rel="noopener noreferrer"&gt;CSS Border-Radius Can Do That?&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://prykhodko.medium.com/css-border-radius-how-does-it-work-bfdf23792ac2" rel="noopener noreferrer"&gt;CSS border-radius. How does it work?&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://css-tricks.com/almanac/properties/b/border-radius/" rel="noopener noreferrer"&gt;border-radius&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://set.studio/relative-rounded-corners/" rel="noopener noreferrer"&gt;Relative rounded corners&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codepen.io/kevinpowell/pen/XWoePym" rel="noopener noreferrer"&gt;Border-radius two axis&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gracias por leer🦸🏻‍♀️&lt;br&gt;
Mis redes sociales donde comparto notas de código:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/lupitacode" rel="noopener noreferrer"&gt;▶️Youtube&lt;/a&gt;&lt;br&gt;
&lt;a href="https://instagram.com/lupitacode" rel="noopener noreferrer"&gt;📷Instagram&lt;/a&gt;&lt;br&gt;
&lt;a href="https://x.com/lupitacode" rel="noopener noreferrer"&gt;𝕏 (Twitter)&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.tiktok.com/@lupitacode" rel="noopener noreferrer"&gt;🎵Tik Tok&lt;/a&gt;&lt;br&gt;
&lt;a href="https://facebook.com/lupitacode" rel="noopener noreferrer"&gt;🔵Facebook&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/lupitacode" rel="noopener noreferrer"&gt;🐙GitHub&lt;/a&gt;&lt;br&gt;
&lt;a href="https://codepen.io/lupitacode/" rel="noopener noreferrer"&gt;🔲Codepen&lt;/a&gt;&lt;br&gt;
&lt;a href="https://lupitacode.medium.com/" rel="noopener noreferrer"&gt;✍️Medium&lt;/a&gt;&lt;/p&gt;

</description>
      <category>css</category>
      <category>tutorial</category>
      <category>webdev</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Unidades de Medida en CSS: Fundamentos</title>
      <dc:creator>Lupita Code 🌄</dc:creator>
      <pubDate>Wed, 08 Sep 2021 22:08:27 +0000</pubDate>
      <link>https://forem.com/lupitacode/unidades-de-medida-en-css-fundamentos-4n0g</link>
      <guid>https://forem.com/lupitacode/unidades-de-medida-en-css-fundamentos-4n0g</guid>
      <description>&lt;p&gt;¡Hola gente bonita!👋&lt;/p&gt;

&lt;p&gt;Al escribir CSS hay muchas opciones para las unidades que puedes usar. En este articulo voy a mostrar un resumen de todas las unidades de medida en CSS. &lt;/p&gt;

&lt;p&gt;Pero antes de eso, ¿sabias que en CSS también hay tipos de datos?, las unidades de medida en CSS también son un tipo de dato, ¡Vamos averiguarlo!&lt;/p&gt;

&lt;h1&gt;
  
  
  🔢 Tipos de Datos
&lt;/h1&gt;

&lt;p&gt;En CSS también existen tipos de datos. Los tipos de datos básicamente son el valor que le asignamos a cualquier propiedad. Los términos son básicamente intercambiables: cuando veas algo en CSS denominado ‘tipo de datos’, en realidad es solo una forma elegante de decir ‘valor’.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTA:&lt;/strong&gt; En las especificaciones de CSS y en la documentación de la MDN, podrás detectar los valores porque estarán escritos entre corchetes angulares, como &lt;code&gt;&amp;lt;color&amp;gt;&lt;/code&gt; o &lt;code&gt;&amp;lt;length&amp;gt;&lt;/code&gt; para diferenciarlos de las propiedades, pero esto solo es una notación que utiliza la documentación.&lt;/p&gt;

&lt;p&gt;Estos valores (data types) pueden ser de diferentes tipos, por ejemplo las unidades CSS son un tipo de dato y las palabras clave o keywords como el color, “auto”, url, etc.&lt;/p&gt;

&lt;p&gt;Algunas propiedades CSS, como por ejemplo width, margin, font-size reciben valores de longitud (px, em, rem, etc..). Este tipo de dato, como lo resalta la documentación de la MDN, denota medidas de distancia y sirven para expresar una dimensión.&lt;/p&gt;

&lt;p&gt;Si se adjunta una unidad a un número, éste se convierte en una dimensión. Por ejemplo, &lt;code&gt;1rem&lt;/code&gt; es una dimensión. En este contexto, la unidad que se adjunta a un número se denomina en las especificaciones token de dimensión. Las longitudes son dimensiones que se refieren a la distancia.&lt;/p&gt;

&lt;p&gt;Hay dos tipos de unidades de longitud: Relativas y Absolutas.&lt;/p&gt;

&lt;h1&gt;
  
  
  📏 Unidades Absolutas
&lt;/h1&gt;

&lt;p&gt;Las medidas absolutas se llaman así porque no cambian y siempre mantienen el mismo tamaño independientemente del tamaño del dispositivo. Las unidades absolutas son las siguientes:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Syntax&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;cm&lt;/td&gt;
&lt;td&gt;Centímetros&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mm&lt;/td&gt;
&lt;td&gt;Milímetros&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Q&lt;/td&gt;
&lt;td&gt;Cuartos de milímetros&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;in&lt;/td&gt;
&lt;td&gt;Pulgadas&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pc&lt;/td&gt;
&lt;td&gt;Picas&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pt&lt;/td&gt;
&lt;td&gt;Puntos&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;px&lt;/td&gt;
&lt;td&gt;Pixeles&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;⚒️ Las unidades absolutas tienen su origen en unidades físicas, como los centímetros, milímetros y las pulgadas. Es por esto que a estas unidades absolutas también se les conoce como unidades del mundo real. Ya que en el mundo real muchos de nosotros las utilizamos para medir, por ejemplo los Ingenieros, Arquitectos, los carpinteros, etc utilizan las unidades de medida.&lt;/p&gt;

&lt;p&gt;Sin embargo en el articulo de Smashing Magazine &lt;a href="https://www.smashingmagazine.com/2021/07/css-absolute-units/" rel="noopener noreferrer"&gt;“There Is No Such Thing As A CSS Absolute Unit”&lt;/a&gt; (No existe una unidad absoluta de CSS) del experto en HTML/CSS Elad Shechter, nos explica que con el paso de los años, todas las unidades absolutas en CSS han perdido su conexión con el mundo físico o el mundo real y esto es porque se ven afectadas por la densidad de las pantallas y el sistema operativo del dispositivo.&lt;/p&gt;

&lt;p&gt;Con los píxeles también pasa esto ya que la conexión entre los píxeles físicos reales (es decir, de dispositivo) y los píxeles CSS (es decir, lógicos) casi ha desaparecido, en un momento te explicare esto.&lt;/p&gt;

&lt;h2&gt;
  
  
  🤔 ¿Dónde puedo usar las unidades absolutas?
&lt;/h2&gt;

&lt;p&gt;Entonces, ¿en donde puedo utilizar las unidades absolutas? Las longitudes absolutas pueden ser realmente útiles cuando se diseña para formatos impresos, a excepción de los pixeles donde su uso es mas frecuente en pantallas. &lt;/p&gt;

&lt;p&gt;Ten en cuenta que el CSS se utiliza no sólo para el contenido digital, sino también para dar estilo al contenido impreso, Por ejemplo, si usas &lt;code&gt;cm&lt;/code&gt; para el tamaño de un elemento y luego lo imprimes, debería ser preciso si lo mides con una regla. Sin embargo en pantalla esto no es así, ya que los centímetros en pantalla no son igual a los centímetros físicos, ¿Cómo es esto posible? 😱&lt;/p&gt;

&lt;p&gt;👉 Si creas una caja con un ancho y un alto de 1 centímetro y le das un color de fondo y después mides el elemento con una cinta métrica real o una regla 📏, vas a poder comprobar que un centímetro en pantalla no es igual a uno físico. Aquí puedes ver la imagen de este ejemplo (Crédito de la imagen: Elad Shechter) &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1zoxjj5aoo8qy6833rp9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1zoxjj5aoo8qy6833rp9.jpg" alt="Alt Text" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🖨️ Pero si imprimes esta demostración en una impresora láser si vas a obtener exactamente 1 centímetro, esto significa que, para las impresoras, todavía hay, tal vez, una buena razón para usar unidades CSS como puntos, pulgadas y centímetros.&lt;/p&gt;

&lt;p&gt;✅ Sin embargo el único valor absoluto que usaras de forma frecuente es &lt;code&gt;px&lt;/code&gt; (pixeles). Los pixeles son la unidad CSS mas popular y conocida. La vamos a conocer a detalle en el siguiente articulo especialmente dedicado a esta unidad absoluta.&lt;/p&gt;

&lt;h1&gt;
  
  
  📏 Unidades Relativas
&lt;/h1&gt;

&lt;p&gt;Las medidas relativas son relativas a algo mas, pero ¿relativo a que? O ¿respecto a que?, por ejemplo, relativo al &lt;code&gt;font-size&lt;/code&gt; de un elemento padre, al ancho/altura de un contenedor padre, o al ancho/altura del viewport.&lt;/p&gt;

&lt;p&gt;✅ La ventaja de usar unidades relativas es que puedes lograr que el tamaño del texto u otros elementos escalen proporcionalmente en relacion con todo lo demás en la pagina. Las unidades relativas son las que se recomienda utilizar sobre todo para Responsive Web Design (RWD).&lt;/p&gt;

&lt;p&gt;Las unidades relativas se pueden dividir en dos categorías:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Unidades relativas al tamaño de la fuente.&lt;/li&gt;
&lt;li&gt;Unidades relativas al viewport.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Unidades relativas al tamaño de la fuente
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;rem:&lt;/strong&gt; Siempre es relativa al tamaño de fuente del elemento raíz que es &lt;code&gt;html&lt;/code&gt;. Por defecto, la etiqueta &lt;code&gt;html&lt;/code&gt; tiene un tamaño de fuente de 16px, por lo que 1rem será igual a 16px. La mayoría de los navegadores tiene un estándar en que el tamaño base de la fuente que asignan al texto que vemos en un documento HTML sea de 16px (excluyendo los encabezados y el elemento &lt;code&gt;small&lt;/code&gt;, entre otros).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;em:&lt;/strong&gt; Las unidades &lt;code&gt;em&lt;/code&gt; para la propiedad &lt;code&gt;font-size&lt;/code&gt; serán relativas al &lt;code&gt;font-size&lt;/code&gt; del elemento padre. Las unidades &lt;code&gt;em&lt;/code&gt; en otras propiedades que no sean &lt;code&gt;font-size&lt;/code&gt; serán relativas al &lt;code&gt;font-size&lt;/code&gt; del elemento actual.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ex:&lt;/strong&gt; Basada en la altura de la “x” minúscula de la fuente del elemento (depende de la tipografía utilizada). La unidad ex es la mitad del tamaño de la fuente establecida por el navegador del usuario que por lo regular es 16px = 1em, entonces la mitad de 16px es 8, por lo que 8/16 = 0.5, por lo que 1ex es igual a .5em.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;cap:&lt;/strong&gt; Basada en la altura de las letras mayúsculas de la fuente actual del elemento.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ch:&lt;/strong&gt; Basada en la anchura del glifo “0” de la letra del elemento.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ic:&lt;/strong&gt; Es una medida nueva que tiene que ver con la anchura de los glifos. Para mas información puede consultar la  especificación de la w3c.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;lh:&lt;/strong&gt; Altura de linea del elemento.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;rlh:&lt;/strong&gt; Altura de linea del elemento raíz (html).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo3h1avbum3sw47a3coch.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo3h1avbum3sw47a3coch.jpeg" alt="Alt Text" width="693" height="164"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Te recomiendo leer mi articulo mas completo sobre las unidades em y rem, donde explico cuando y como usar estas unidades y la diferencia entre ambas:&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="https://lupitacode.medium.com/em-vs-rem-cu%C3%A1l-deber%C3%ADa-usar-938376e92da0" class="ltag__link__link" rel="noopener noreferrer"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fv2%2Fresize%3Afill%3A88%3A88%2F0%2AxalCiX7VxZOmbd5Y.jpg" alt="Lupita Code 🌄"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://lupitacode.medium.com/em-vs-rem-cu%C3%A1l-deber%C3%ADa-usar-938376e92da0" class="ltag__link__link" rel="noopener noreferrer"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;EM VS REM: ¿Cuál debería usar?  | Medium&lt;/h2&gt;
      &lt;h3&gt;Lupita Code 🌄 ・ &lt;time&gt;Sep 30, 2023&lt;/time&gt; ・ 
      &lt;div class="ltag__link__servicename"&gt;
        &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fmedium-f709f79cf29704f9f4c2a83f950b2964e95007a3e311b77f686915c71574fef2.svg" alt="Medium Logo"&gt;
        lupitacode.Medium
      &lt;/div&gt;
    &lt;/h3&gt;
&lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Unidades relativas al viewport
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;vw&lt;/strong&gt; (Viewport width) Relativo al ancho del viewport los valores van de 1-100.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;vh&lt;/strong&gt; (Viewport height) Relativo a la altura del viewport los valores van de 1-100.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;vmax&lt;/strong&gt; Entre vw y vh toma el que tenga el mayor valor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;vmin&lt;/strong&gt; Entre vw y vh toma el que tenga el menor valor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTA:&lt;/strong&gt; Las unidades del viewport tendrán su propio articulo detallado.&lt;/p&gt;

&lt;h2&gt;
  
  
  Porcentajes %
&lt;/h2&gt;

&lt;p&gt;Cuando especificamos un porcentaje como data type o valor en un elemento, este se calcula en base en la medida del elemento padre, para que esto funcione, la medida en el elemento padre debe estar especificada.&lt;/p&gt;

&lt;p&gt;Te recomiendo leer mi articulo sobre los porcentajes donde explico lo siguiente:&lt;/p&gt;

&lt;p&gt;✅ width:auto vs. width:100%&lt;br&gt;
✅ height:auto vs. height:100%&lt;br&gt;
✅ html, body { height: 100%}&lt;br&gt;
✅ Porcentajes en la propiedad font-size&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="https://lupitacode.medium.com/porcentajes-css-5cbb95967989" class="ltag__link__link" rel="noopener noreferrer"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fv2%2Fresize%3Afill%3A88%3A88%2F0%2AxalCiX7VxZOmbd5Y.jpg" alt="Lupita Code 🌄"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://lupitacode.medium.com/porcentajes-css-5cbb95967989" class="ltag__link__link" rel="noopener noreferrer"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Unidades de Medida en CSS: Porcentajes | Lupita Code | Medium&lt;/h2&gt;
      &lt;h3&gt;Lupita Code 🌄 ・ &lt;time&gt;Sep 27, 2023&lt;/time&gt; ・ 
      &lt;div class="ltag__link__servicename"&gt;
        &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fmedium-f709f79cf29704f9f4c2a83f950b2964e95007a3e311b77f686915c71574fef2.svg" alt="Medium Logo"&gt;
        lupitacode.Medium
      &lt;/div&gt;
    &lt;/h3&gt;
&lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  +50 unidades de longitud...
&lt;/h2&gt;

&lt;p&gt;CSS ha tenido últimamente nuevas unidades de longitud dando un total hasta ahora de más de 50 unidades&lt;/p&gt;

&lt;p&gt;Este Codepen de Adam Argyle expone todas las unidades de longitud:&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/argyleink/embed/oNxbNzy?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  🔎 Lecturas Recomendadas
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://developer.mozilla.org/es/docs/Learn/CSS/Building_blocks/Values_and_units" rel="noopener noreferrer"&gt;Valores y Unidades CSS | MDN&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://developer.mozilla.org/es/docs/Web/CSS/length" rel="noopener noreferrer"&gt;length| MDN&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/dimension" rel="noopener noreferrer"&gt;dimension | MDN&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://web.dev/learn/css/sizing/" rel="noopener noreferrer"&gt;Sizing Units | Web.dev&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.smashingmagazine.com/2021/07/css-absolute-units/" rel="noopener noreferrer"&gt;There Is No Such Thing As A CSS Absolute Unit | Elad Shechter&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://css-tricks.com/css-length-units/#relative-units" rel="noopener noreferrer"&gt;CSS Length Units&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://whatunit.com/" rel="noopener noreferrer"&gt;What length CSS unit should you use?&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gracias por leer🦸🏻‍♀️&lt;br&gt;
Mis redes sociales donde comparto notas de código:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/lupitacode" rel="noopener noreferrer"&gt;▶️Youtube&lt;/a&gt;&lt;br&gt;
&lt;a href="https://instagram.com/lupitacode" rel="noopener noreferrer"&gt;📷Instagram&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/lupitacode" rel="noopener noreferrer"&gt;🐦Twitter&lt;/a&gt;&lt;br&gt;
&lt;a href="https://facebook.com/lupitacode" rel="noopener noreferrer"&gt;🔵Facebook&lt;/a&gt;&lt;br&gt;
&lt;a href="https://codepen.io/lupitacode/" rel="noopener noreferrer"&gt;🔲Codepen&lt;/a&gt;&lt;br&gt;
&lt;a href="https://lupitacode.medium.com/" rel="noopener noreferrer"&gt;✍️Medium&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.tiktok.com/@lupitacode" rel="noopener noreferrer"&gt;🎵Tik Tok&lt;/a&gt;&lt;/p&gt;

</description>
      <category>css</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Palabras clave en CSS: "initial","inherit","unset" y "revert"🐱‍🏍</title>
      <dc:creator>Lupita Code 🌄</dc:creator>
      <pubDate>Thu, 12 Aug 2021 00:55:23 +0000</pubDate>
      <link>https://forem.com/lupitacode/palabras-clave-en-css-initial-inherit-unset-y-revert-11ob</link>
      <guid>https://forem.com/lupitacode/palabras-clave-en-css-initial-inherit-unset-y-revert-11ob</guid>
      <description>&lt;p&gt;¡Hola gente bonita!👋&lt;/p&gt;

&lt;p&gt;CSS tiene "Global Keywords" o palabras clave por defecto. En este artículo voy a hablar de cuatro de ellas: &lt;code&gt;initial&lt;/code&gt;, &lt;code&gt;inherit&lt;/code&gt;, &lt;code&gt;unset&lt;/code&gt; y &lt;code&gt;revert&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;También se les conoce como palabras clave de restablecimiento de CSS porque nos permiten restablecer el CSS como queramos. Vamos a repasarlas:&lt;/p&gt;

&lt;h2&gt;
  
  
  initial
&lt;/h2&gt;

&lt;p&gt;Cada propiedad de CSS tiene un valor inicial. Este valor inicial no tiene relación con el tipo de elemento HTML al que se aplica.&lt;/p&gt;

&lt;p&gt;Por ejemplo, el valor por defecto de &lt;code&gt;font-weight&lt;/code&gt; es &lt;code&gt;normal&lt;/code&gt; Esto lo podemos comprobar con la documentación de la MDN en el cual se nos especifica los valores iniciales de cada propiedad:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6z57wl5ws4v1jiyvzf5i.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6z57wl5ws4v1jiyvzf5i.jpg" alt="Valor inicial de font-weight es "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Entonces al declarar &lt;code&gt;font-weight: initial&lt;/code&gt;, es lo mismo que declarar: &lt;code&gt;font-weight: normal&lt;/code&gt;. Veamos otro ejemplo:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

.foo{ 
   position: absolute; 
   top: 20px; 
   left: 20px;
}
.bar .foo{   
   position: initial;  /* = static */
   top: initial;       /* = auto */
   left: initial;      /* = auto */
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;🧠 Recuerda, la palabra clave &lt;code&gt;initial&lt;/code&gt; establece el valor de una propiedad CSS al valor inicial definido, lo que en cierto modo significa que "restablece" el valor. &lt;/p&gt;

&lt;p&gt;Curiosamente todos los elementos HTML utilizan la propiedad display con el valor &lt;code&gt;inline&lt;/code&gt;. Recuerda que que cada propiedad en CSS tiene sólo un valor por defecto y para la propiedad display, el valor inicial es siempre &lt;code&gt;inline&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnyzcy1vcpod2hx3ph7f0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnyzcy1vcpod2hx3ph7f0.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Si reseteamos la propiedad &lt;code&gt;display&lt;/code&gt; en un elemento HTML cuyo valor por defecto es &lt;code&gt;block&lt;/code&gt;, como el elemento &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;, esto nos devolverá al valor &lt;code&gt;inline&lt;/code&gt;. ¡Vamos a comprobarlo!&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

div{ 
   display: block; /* browser default styles */
}

div {
    display: initial; /* es igual a inline */
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Ahora la pregunta que debemos hacernos es: ¿Por qué el elemento HTML &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; es un elemento de bloque o se comporta con el valor display: block?&lt;br&gt;
La respuesta está en el user-agent-stylesheet (hoja de estilo) del navegador.&lt;/p&gt;

&lt;p&gt;Cuando creamos páginas web, el navegador carga su propia hoja de estilos CSS antes de que carguemos una sola línea de CSS, esto quiere decir, que cada navegador viene con cierta cantidad de CSS por defecto que llamamos user-agent-stylesheet.&lt;/p&gt;

&lt;p&gt;Entonces todos los elementos HTML que por defecto tienen un valor de block, esto es sólo porque el navegador decide añadirles la propiedad display con un valor de block. Si inspeccionamos el elemento &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; tiene el valor de block por esta razon:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpte474ifn3wwd03hskwu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpte474ifn3wwd03hskwu.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esto quiere decir que muchas etiquetas HTML tienen asignado estilos CSS del navegador aunque no lo hayas especificado.&lt;/p&gt;

&lt;p&gt;Todos los elementos tienen establecido un valor de la propiedad &lt;code&gt;display&lt;/code&gt; que puede ser &lt;code&gt;inline&lt;/code&gt; o puede ser &lt;code&gt;block&lt;/code&gt; gracias a la hoja de estilo del navegador.&lt;/p&gt;

&lt;p&gt;La única razón por la que tenemos esas diferencias entre los distintos tipos de elementos HTML (block vs inline) es porque el navegador carga su propio CSS.&lt;/p&gt;

&lt;p&gt;Para tener una idea de como es la hoja de estilo de cada navegador (Chrome, Firefox) en los recursos de este articulo dejare los enlaces para que les des un vistazo.&lt;/p&gt;

&lt;p&gt;Sin embargo, NO todas las propiedades tienen valores iniciales definidos explícitamente. Por ejemplo, el valor inicial de la propiedad &lt;code&gt;color&lt;/code&gt; es "depende del agente de usuario". Lo que significa es que el valor por defecto del color depende de cosas como la configuración de las preferencias del navegador:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fte2hh1vpz396knmo8jcn.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fte2hh1vpz396knmo8jcn.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;La mayoría de los usuarios no cambia la configuración del color del texto, pero alguien podría establecerlo a un gris o incluso un rojo. Al declarar &lt;code&gt;color: initial;&lt;/code&gt; le estás diciendo al navegador que establezca el color del elemento a cualquier color que establezca el usuario.&lt;/p&gt;
&lt;h3&gt;
  
  
  🌐 Los estilos del navegador
&lt;/h3&gt;

&lt;p&gt;Después de aplicar los estilos iniciales de todas las propiedades CSS, el navegador carga sus estilos. Estos estilos del navegador no tienen nada que ver con los valores iniciales de las propiedades CSS.&lt;/p&gt;

&lt;p&gt;Aquí hay un ejemplo de los estilos del agente de usuario aplicados a la etiqueta &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt;. Si inspeccionas el elemento con la DevTools podrás ver lo siguiente:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwel4s54y0ot4fu9xhpn8.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwel4s54y0ot4fu9xhpn8.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fíjate en la propiedad &lt;code&gt;font-weight&lt;/code&gt; aplicada al &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt;, ¿te has dado cuenta que su valor es &lt;code&gt;bold&lt;/code&gt;? Como te mencione al principio el valor inicial por defecto de la propiedad &lt;code&gt;font-weight&lt;/code&gt; es &lt;code&gt;normal&lt;/code&gt;, lo que nos quiere decir que los estilos del &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; son estilos del navegador.&lt;/p&gt;

&lt;p&gt;Tienes que recordar y comprender que: ¡Los elementos HTML no tienen valores de estilo iniciales! Los estilos básicos de un elemento HTML, como la etiqueta &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; por ejemplo, provienen de la hoja de estilos del agente de usuario del navegador, y no del valor inicial de las propiedades de CSS.&lt;/p&gt;

&lt;p&gt;Para entender la palabra clave &lt;code&gt;initial&lt;/code&gt;, tenemos que recordar un dato importante: Cada propiedad en CSS tiene un valor por defecto, que no tiene nada que ver con el valor por defecto del agente de usuario. Los estilos del agente de usuario son los estilos básicos que el navegador aplica a los elementos HTML en el navegador. Tendemos a pensar que vienen automáticamente con el HTML, pero no es así.&lt;/p&gt;
&lt;h2&gt;
  
  
  inherit
&lt;/h2&gt;

&lt;p&gt;La palabra clave &lt;code&gt;inherit&lt;/code&gt; (heredar) hace que el valor de una propiedad en un elemento sea el mismo que el valor de su elemento padre. &lt;/p&gt;

&lt;p&gt;El valor inherit obliga a que la herencia se produzca incluso en situaciones en las que normalmente no funcionaría. &lt;/p&gt;

&lt;p&gt;El proceso ocurre de la siguiente manera:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;La palabra clave &lt;code&gt;inherit&lt;/code&gt; le dice al navegador que busque el valor del elemento padre más cercano y que el elemento actual herede ese valor. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Si el padre más cercano también tiene el valor &lt;code&gt;inherit&lt;/code&gt;, el navegador continuará subiendo por el DOM hasta encontrar algún valor. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Si no hay ningún valor, el navegador utilizará su estilo de agente de usuario, y si no hay ningún estilo de agente de usuario, utilizará el estilo base inicial o el valor inicial que ya vimos arriba.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Vamos a ver el siguiente ejemplo:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&amp;lt;nav class="toolbar"&amp;gt;
  &amp;lt;a href="#"&amp;gt;One&amp;lt;/a&amp;gt;
  &amp;lt;a href="#"&amp;gt;Two&amp;lt;/a&amp;gt;
  &amp;lt;a href="#"&amp;gt;Three&amp;lt;/a&amp;gt;
&amp;lt;/nav&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

.toolbar {
  background-color: blue;
  color: white;
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;El &lt;code&gt;nav&lt;/code&gt; tendrá un fondo azul, pero los enlaces tendrán otro estilo acorde con la configuración de preferencias del navegador. &lt;/p&gt;

&lt;p&gt;Puede escribir una regla que establezca explícitamente que los enlaces sean de color blancos pero puede hacer que las cosas sean un poco más robustas usando &lt;code&gt;inherit&lt;/code&gt;. Sólo tiene que añadir la siguiente regla a la hoja de estilos:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

.toolbar {
  background-color: blue;
  color: white;
}
.toolbar a{
  color: inherit;
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Esto hará que los enlaces utilicen el valor heredado del color en lugar de los estilos por defecto del agente de usuario.&lt;/p&gt;

&lt;p&gt;Como dije al principio podemos hacer que la herencia se produzca incluso en situaciones en las que normalmente no funcionaría, por ejemplo la propiedad &lt;code&gt;padding&lt;/code&gt; por defecto, no se puede heredar pero podemos hacer que si se herede, seguiremos con el ejemplo anterior:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

.toolbar {
  padding: 20px;
}
.toolbar a{
  padding: inherit;
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;En este caso todos los enlaces heredaran el valor de la propiedad &lt;code&gt;padding&lt;/code&gt; del elemento padre, a pesar de que dicha propiedad no se herede por defecto.&lt;/p&gt;

&lt;p&gt;En muchos casos, no es necesario especificar la herencia, ya que muchas propiedades se heredan de forma natural. Sin embargo, heredar puede ser muy útil.&lt;/p&gt;

&lt;p&gt;En cualquier caso, así es como funciona la palabra clave inherit. Usarla para el font-size o el color puede ser en ocasiones una buena idea. En otros contextos - raramente.&lt;/p&gt;

&lt;p&gt;Y toma en cuenta la diferencia entre propiedades heredables y no heredables. Será importante más adelante.&lt;/p&gt;
&lt;h2&gt;
  
  
  unset
&lt;/h2&gt;

&lt;p&gt;La palabra clave &lt;code&gt;unset&lt;/code&gt; actúa como un sustituto universal tanto de &lt;code&gt;inherit&lt;/code&gt; como de &lt;code&gt;initial&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
El valor &lt;code&gt;unset&lt;/code&gt; restablecerá automáticamente el valor de una propiedad según el &lt;strong&gt;tipo de propiedad&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Recordemos que en CSS, hay dos tipos de propiedades:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Propiedades heredadas: Si la propiedad es heredada, entonces &lt;code&gt;unset&lt;/code&gt; tiene el mismo efecto que si se usara &lt;code&gt;inherit&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Propiedades no heredadas: Si la propiedad no se hereda, entonces &lt;code&gt;unset&lt;/code&gt; tiene el mismo efecto que si se usara &lt;code&gt;initial&lt;/code&gt;.&lt;br&gt;
El valor &lt;code&gt;unset&lt;/code&gt; funcionará igual que el valor inicial &lt;code&gt;initial&lt;/code&gt;, es decir, aplicará el valor por defecto de CSS.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Por ejemplo, &lt;code&gt;position: unset&lt;/code&gt; será igual a &lt;code&gt;position: initial&lt;/code&gt; porque es una propiedad no heredada.&lt;br&gt;
Pero cuando usamos el valor &lt;code&gt;unset&lt;/code&gt; en la propiedad &lt;code&gt;font-size&lt;/code&gt;, por ejemplo, &lt;code&gt;font-size: unset&lt;/code&gt;, será igual a &lt;code&gt;font-size: inherit&lt;/code&gt; porque &lt;code&gt;font-size&lt;/code&gt; es una propiedad heredada.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhnadxxu0mtubtd3vr1wo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhnadxxu0mtubtd3vr1wo.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

.element * { 
    /* inherit properties */
    font-size: unset; 
    font-weight: unset;
/* non-inherited properties */
    border-width: unset; 
    background-color: unset;
}

/* work the same way as */

.element * { 
    /* inherit properties */
    font-size: inherit; 
    font-weight: inherit;
/* non-inherited properties */
    border-width: initial; 
    background-color: initial;
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Veamos otro ejemplo:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

.some-class{ 
   color: unset; /* will be equal to 'inherit' value */ 
   display: unset; /* will be equal to 'initial' value*/
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  🤔 ¿Por qué utilizar unset si funciona exactamente igual que Inherit e Initial?
&lt;/h3&gt;

&lt;p&gt;Si unset actúa como initial y inherit, ¿por qué querríamos usar unset?&lt;/p&gt;

&lt;p&gt;Si sólo estamos restableciendo una propiedad, entonces unset es innecesario: podemos usar los valores inherit o initial en su lugar.&lt;/p&gt;

&lt;p&gt;Pero hoy en día tenemos una nueva propiedad llamada all que trae consigo una nueva capacidad: ¡restablecer todas las propiedades heredadas y las no heredadas a la vez!&lt;br&gt;
De esta nueva manera, no es necesario restablecer las propiedades una por una. Así, aplicando el valor "unset" a la propiedad "all" se restablecerán todas las propiedades heredadas a "inherit" y todas las no heredadas a "initial".&lt;/p&gt;

&lt;p&gt;¡Esta es la única razón de la existencia del nuevo valor de la palabra clave unset! De lo contrario, podríamos utilizar los valores inherit e initial en su lugar.&lt;/p&gt;

&lt;p&gt;En lugar de restablecer las propiedades una por una, por ejemplo:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

/* Bad */
.common-content *{ 
    font-size: inherit; 
    font-weight: inherit;
    border-width: initial; 
    background-color: initial;
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Podemos utilizar la nueva propiedad all con el valor unset, que afectará a todas las propiedades existentes, por ejemplo:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

/* Good */
.common-content *{ 
    all: unset;
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  revert
&lt;/h2&gt;

&lt;p&gt;Pero, ¿Qué pasa si queremos restablecer los estilos de la propiedad a su estilo original del agente de usuario y no al estilo base de la propiedad? Por ejemplo, ¿revertir la propiedad display de un elemento &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; a &lt;code&gt;block&lt;/code&gt; (su estilo de agente de usuario) y no &lt;code&gt;inline&lt;/code&gt; (su estilo base CSS)?&lt;/p&gt;

&lt;p&gt;Para ello, pronto tendremos una nueva palabra clave CSS: &lt;code&gt;revert&lt;/code&gt;. La palabra clave &lt;code&gt;revert&lt;/code&gt; es muy similar a unset, con la única diferencia de que prefiere los estilos del agente de usuario al estilo básico de la propiedad CSS. &lt;/p&gt;

&lt;p&gt;Ya hemos hablado de los estilos base de CSS y de los estilos de agente de usuario del navegador. Los estilos base de CSS son los valores por defecto de las propiedades de CSS. Son los valores naturales por defecto que vienen con las propiedades.&lt;br&gt;
Los estilos del agente de usuario del navegador son los valores establecidos por el navegador. Cuando se carga una página, el navegador tiene sus estilos para algunas propiedades CSS.&lt;/p&gt;

&lt;p&gt;Por ejemplo, la propiedad display (que ya te explique anteriormente cuando mencione el valor initial), tiene un valor base CSS, que es inline. Este es su valor natural del motor CSS. Ahora, el navegador cambia el estilo de la propiedad display a block.&lt;/p&gt;

&lt;p&gt;El estilo del navegador no es más que añadir sus propios archivos css. La palabra clave revert, invierte los valores por defecto de CSS a los estilos del agente de usuario del navegador.&lt;/p&gt;

&lt;p&gt;La palabra clave &lt;code&gt;revert&lt;/code&gt; nos permite volver al estilo por defecto del navegador, el "User-Agent-Stylesheet". Por ejemplo:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

 div{
    display: revert; /* = block */ 
 }
 h1{ 
    font-weight: revert; /* = bold */ 
    font-size: revert; /* = 2em */
 }


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;De esta manera, si queremos restablecer todos los estilos de una etiqueta HTML al estilo base del navegador, podemos hacerlo así:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

 /* Good */

 .element *{ 
    all: revert;
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  El nuevo reset del futuro
&lt;/h2&gt;

&lt;p&gt;El experto en HTML y CSS Elad Shechter nos comparte en su cuenta de Twitter “The CSS Reset of the Future”. En el cual nos muestra una nueva forma de crear un reset, utilizando la propiedad all y los valores unset y revert.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1413106994454614018-648" src="https://platform.twitter.com/embed/Tweet.html?id=1413106994454614018"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1413106994454614018-648');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1413106994454614018&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;Quizás estarás pensando que utilizar un reset es una mala practica en estos días y esto sucede porque lo confundes con Normalize y el reset de 2007 de Eric Meyer que se utilizaba años antes. Pero tienes que conocer las diferencias entre un reset CSS y normalize. En los recursos de este post te dejare un articulo de Elad Shechter para que conozcas las diferencias.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔎Recursos:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://elad.medium.com/understanding-the-initial-inherit-and-unset-css-keywords-2d70b7121695" rel="noopener noreferrer"&gt;Understanding the “Initial”, “Inherit” and “Unset” CSS Keywords | Elad Shechter&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://elad2412.github.io/the-new-css-reset/" rel="noopener noreferrer"&gt;The New CSS Reset | Elad Shechter&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://elad.medium.com/how-does-css-work-92fe7116916d" rel="noopener noreferrer"&gt;How Does CSS Work? | Elad Shechter&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://blog.logrocket.com/css-inheritance-inherit-initial-unset-and-revert/" rel="noopener noreferrer"&gt;CSS inheritance: inherit, initial, unset, and revert&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://web.dev/learn/css/inheritance/" rel="noopener noreferrer"&gt;Inheritance | Learn CSS&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://elad.medium.com/normalize-css-or-css-reset-9d75175c5d1e" rel="noopener noreferrer"&gt;Normalize CSS or CSS Reset?! | Elad Shechter &lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.quirksmode.org/blog/archives/2021/06/inherit_initial.html" rel="noopener noreferrer"&gt;Inherit, initial, unset, revert &lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.miriamsuzanne.com/2022/07/04/body-margin-8px/" rel="noopener noreferrer"&gt;BODY MARGIN 8PX &lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://cloudfour.com/thinks/resetting-inherited-css-with-revert/" rel="noopener noreferrer"&gt;Resetting Inherited CSS with “Revert”&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gracias por leer🦸🏻‍♀️&lt;br&gt;
Mis redes sociales donde comparto notas de código:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/lupitacode" rel="noopener noreferrer"&gt;▶️Youtube&lt;/a&gt;&lt;br&gt;
&lt;a href="https://instagram.com/lupitacode" rel="noopener noreferrer"&gt;📷Instagram&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/lupitacode" rel="noopener noreferrer"&gt;🐦Twitter&lt;/a&gt;&lt;br&gt;
&lt;a href="https://facebook.com/lupitacode" rel="noopener noreferrer"&gt;🔵Facebook&lt;/a&gt;&lt;br&gt;
&lt;a href="https://codepen.io/lupitacode/" rel="noopener noreferrer"&gt;🔲Codepen&lt;/a&gt;&lt;br&gt;
&lt;a href="https://lupitacode.medium.com/" rel="noopener noreferrer"&gt;✍️Medium&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.tiktok.com/@lupitacode" rel="noopener noreferrer"&gt;🎵Tik Tok&lt;/a&gt;&lt;/p&gt;

</description>
      <category>css</category>
      <category>spanish</category>
    </item>
    <item>
      <title>La Herencia en CSS</title>
      <dc:creator>Lupita Code 🌄</dc:creator>
      <pubDate>Sat, 24 Jul 2021 00:13:36 +0000</pubDate>
      <link>https://forem.com/lupitacode/la-herencia-en-css-6md</link>
      <guid>https://forem.com/lupitacode/la-herencia-en-css-6md</guid>
      <description>&lt;p&gt;¡Hola gente bonita!👋&lt;/p&gt;

&lt;p&gt;Hay una última manera en la que un elemento puede recibir estilos: la herencia. La cascada se confunde frecuentemente con el concepto de herencia. Aunque los dos temas están relacionados, debes entender cada uno por separado. Si quieres conocer sobre la cascada te invito a leer mi articulo de este tema:&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/lupitacode" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F617393%2F67c4df49-d9b4-4361-a19f-a1a31486dec7.png" alt="lupitacode"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/lupitacode/la-cascada-en-css-que-es-y-como-funciona-31cd" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;La Cascada en CSS: Qué es y cómo funciona&lt;/h2&gt;
      &lt;h3&gt;Lupita Code 🌄 ・ Jun 22 '21&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#css&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#html&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#codenewbie&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#spanish&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  👨‍👦 ¿Qué es la herencia?
&lt;/h2&gt;

&lt;p&gt;Vamos a comenzar por una analogía que me gusta usar mucho.&lt;/p&gt;

&lt;p&gt;Muchas veces los niños y niñas heredan rasgos de sus padres: el color de los ojos, el color del cabello, la estatura, etc. A veces heredamos rasgos de antepasados más lejanos, como abuelos o bisabuelos. La metáfora de las relaciones familiares también forma parte de la estructura del HTML. Y al igual que las personas, las etiquetas HTML pueden heredar propiedades CSS de sus antepasados.&lt;/p&gt;

&lt;p&gt;Los descendientes (piense en hijos y nietos) heredan propiedades de los ancestros (piense en padres y abuelos).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;La herencia es el proceso por el cual algunas propiedades CSS aplicadas a una etiqueta se pasan a las etiquetas anidadas, es decir, los elementos HTML heredan los estilos de sus padres o ancestros.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Si un elemento no tiene un valor en cascada para una determinada propiedad, puede heredar uno de un elemento antecesor. Es común aplicar la propiedad &lt;code&gt;font-family&lt;/code&gt; al elemento &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;. Todas las etiquetas descendientes de la etiqueta &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;, es decir, las que están dentro de la etiqueta &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; heredarán esta fuente y no es necesario aplicarla explícitamente a cada elemento de la página.&lt;/p&gt;

&lt;p&gt;NOTA: Cualquier etiqueta dentro de otra etiqueta es descendiente de esa etiqueta. por ejemplo, una etiqueta &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; dentro de la etiqueta &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; es descendiente de &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;, mientras que la etiqueta &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; es un ancestro de la etiqueta &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;La herencia también funciona a través de múltiples generaciones. Si una etiqueta como &lt;code&gt;&amp;lt;em&amp;gt;&lt;/code&gt; o &lt;code&gt;&amp;lt;strong&amp;gt;&lt;/code&gt; aparece dentro de una etiqueta &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;, entonces las etiquetas &lt;code&gt;&amp;lt;em&amp;gt;&lt;/code&gt; y &lt;code&gt;&amp;lt;strong&amp;gt;&lt;/code&gt; también &lt;br&gt;
heredan las propiedades de cualquier estilo aplicado a la etiqueta &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;La siguiente imagen muestra cómo la herencia fluye hacia abajo en el árbol del DOM. Las propiedades heredadas se transfieren por el árbol DOM desde los nodos padres a sus descendientes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxptrm0otvatj9idia7o6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxptrm0otvatj9idia7o6.jpg" alt="árbol del DOM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Como puedes notar en la estructura del árbol cada elemento solo tiene un padre directo.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Propiedades heredadas y propiedades no heredadas
&lt;/h2&gt;

&lt;p&gt;Hay algunas propiedades en CSS que se heredan y otras que no. Esta diferencia crea dos tipos de grupos de propiedades CSS:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Propiedades heredadas (Inherited properties)&lt;/li&gt;
&lt;li&gt;Propiedades no heredadas (Non-inherited properties)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Para saber cuales son las propiedades heredadas y no heredadas puede consultar la documentación de la MDN, en cada propiedad se le proporciona una tabla donde se le explica si es heredada o no, por ejemplo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0x5pt3dws0xwqd7x8bgi.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0x5pt3dws0xwqd7x8bgi.jpeg" alt="Propiedades heredadas y no heredadas"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Propiedades heredadas
&lt;/h2&gt;

&lt;p&gt;Las propiedades heredadas son las que pertenecen principalmente al texto:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;color&lt;/code&gt;, &lt;code&gt;font&lt;/code&gt;, &lt;code&gt;font-family&lt;/code&gt;, &lt;code&gt;font-size&lt;/code&gt;, &lt;code&gt;font-weight&lt;/code&gt;, &lt;br&gt;
&lt;code&gt;font-variant&lt;/code&gt;, &lt;code&gt;font-style&lt;/code&gt;, &lt;code&gt;line-height&lt;/code&gt;, &lt;br&gt;
&lt;code&gt;letter-spacing&lt;/code&gt;, &lt;code&gt;text-align&lt;/code&gt;, &lt;code&gt;text-indent&lt;/code&gt;, &lt;br&gt;
&lt;code&gt;text-transform&lt;/code&gt;,&lt;code&gt;white-space&lt;/code&gt;, y &lt;code&gt;word-spacing&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;También se heredan algunas otras, como las propiedades de la lista:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;list-style&lt;/code&gt;, &lt;code&gt;list-style-type&lt;/code&gt;, &lt;br&gt;
&lt;code&gt;list-style-position&lt;/code&gt;, y &lt;code&gt;list-style-image&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Las propiedades del borde de la tabla, &lt;code&gt;border-collapse&lt;/code&gt; y &lt;code&gt;border-spacing&lt;/code&gt;, también se heredan. Tenga en cuenta que éstas controlan el comportamiento de los bordes de las tablas, NO las propiedades para especificar los bordes de los elementos que no son tablas. No queremos que un &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; pasara su borde a todos los elementos descendientes ¿Verdad?.&lt;/p&gt;
&lt;h2&gt;
  
  
  Propiedades no heredadas
&lt;/h2&gt;

&lt;p&gt;La herencia no siempre se aplica, y eso NO es necesariamente algo malo. Para algunas propiedades, la herencia tendría un efecto negativo en la apariencia de una página. Los márgenes, el padding y los bordes (entre otras propiedades) no son heredados por las etiquetas y no es deseable que lo hagan. ¿Por que?&lt;/p&gt;

&lt;p&gt;Mira el siguiente ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; &amp;lt;p&amp;gt; Lorem ipsum &amp;lt;em&amp;gt; dolor &amp;lt;/em&amp;gt; sit amet. &amp;lt;/p&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;p {
 padding-left: 20px;
 border-left: solid red;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Observa que la etiqueta &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; tienen un borde a la izquierda. Sin embargo, la etiqueta &lt;code&gt;&amp;lt;em&amp;gt;&lt;/code&gt; dentro de &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; no tienen ningún borde adicional. Este comportamiento tiene sentido: se vería raro o extraño si hubiera un borde adicional y 20px de espacio a la izquierda de cada etiqueta &lt;code&gt;&amp;lt;em&amp;gt;&lt;/code&gt; dentro de un párrafo. Por este motivo es que la propiedad &lt;code&gt;border&lt;/code&gt; no se hereda.&lt;/p&gt;

&lt;h2&gt;
  
  
  🤔 ¿Por que es importante la herencia?
&lt;/h2&gt;

&lt;p&gt;Aunque esto pueda parecer confuso, la herencia es un gran ahorro de tiempo. Imagina que no se pasan las propiedades CSS a las etiquetas anidadas y que tienes un párrafo &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; que contiene otras etiquetas como una etiqueta &lt;code&gt;&amp;lt;strong&amp;gt;&lt;/code&gt;, una etiqueta &lt;code&gt;&amp;lt;em&amp;gt;&lt;/code&gt; para enfatizar el texto y una etiqueta &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; para añadir un enlace. &lt;/p&gt;

&lt;p&gt;Si creas un estilo que haga que el texto del párrafo sea blanco y de 32px, sería raro y extraño que todo el texto dentro de las etiquetas &lt;code&gt;&amp;lt;em&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;strong&amp;gt;&lt;/code&gt; y &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; tuvieran su estilo normal, tal y como se muestra en la siguiente imagen de muestra:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4rqh4rd5o5o3kf0gfzew.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4rqh4rd5o5o3kf0gfzew.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En ese caso, tendrías que crear otro estilo para dar formato a la etiqueta &lt;code&gt;&amp;lt;em&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;strong&amp;gt;&lt;/code&gt; y &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; para que coincida con la apariencia de la etiqueta &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;. Qué tedioso. ¡Por eso esta la herencia y por eso es importante!&lt;/p&gt;

&lt;h2&gt;
  
  
  La palabra clave &lt;code&gt;inherit&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;CSS tiene "Global Keywords" o palabras clave por defecto, pero en este articulo solo hablare de la palabra clave &lt;code&gt;inherit&lt;/code&gt; (heredar) porque tiene relación con la herencia.&lt;/p&gt;

&lt;p&gt;La palabra clave &lt;code&gt;inherit&lt;/code&gt; hace que el valor de una propiedad en un elemento sea el mismo que el valor de su elemento padre. En otras palabras, &lt;code&gt;inherit&lt;/code&gt; obliga a que la herencia se produzca incluso en situaciones en las que normalmente no funcionaría. &lt;/p&gt;

&lt;p&gt;El proceso ocurre de la siguiente manera:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;La palabra clave &lt;code&gt;inherit&lt;/code&gt; le dice al navegador que busque el valor del elemento padre más cercano y que el elemento actual herede ese valor. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Si el padre más cercano también tiene el valor &lt;code&gt;inherit&lt;/code&gt;, el navegador continuará subiendo por el DOM hasta encontrar algún valor. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Si no hay ningún valor, el navegador utilizará su estilo de agente de usuario, y si no hay ningún estilo de agente de usuario, utilizará el estilo base inicial o el valor inicial.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Vamos a ver el siguiente ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;nav class="toolbar"&amp;gt;
  &amp;lt;a href="#"&amp;gt;One&amp;lt;/a&amp;gt;
  &amp;lt;a href="#"&amp;gt;Two&amp;lt;/a&amp;gt;
  &amp;lt;a href="#"&amp;gt;Three&amp;lt;/a&amp;gt;
&amp;lt;/nav&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.toolbar {
  background-color: blue;
  color: white;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El &lt;code&gt;nav&lt;/code&gt; tendrá un fondo azul, pero los enlaces tendrán otro estilo acorde con la configuración de preferencias del navegador. &lt;/p&gt;

&lt;p&gt;Puede escribir una regla que establezca explícitamente que los enlaces sean de color blanco pero puede hacer que las cosas sean un poco más robustas usando &lt;code&gt;inherit&lt;/code&gt;. Sólo tiene que añadir la siguiente regla a la hoja de estilos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.toolbar {
  background-color: blue;
  color: white;
}
.toolbar a{
  color: inherit;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esto hará que los enlaces utilicen el valor heredado del color en lugar de los estilos por defecto del agente de usuario.&lt;/p&gt;

&lt;p&gt;Como dije al principio podemos hacer que la herencia se produzca incluso en situaciones en las que normalmente no funcionaría, por ejemplo la propiedad &lt;code&gt;padding&lt;/code&gt; por defecto, no se puede heredar pero podemos hacer que si se herede, seguiremos con el ejemplo anterior:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.toolbar {
  padding: 20px;
}
.toolbar a{
  padding: inherit;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En este ejemplo todos los enlaces heredaran el valor de la propiedad &lt;code&gt;padding&lt;/code&gt; del elemento padre, a pesar de que dicha propiedad no se herede por defecto.&lt;/p&gt;

&lt;p&gt;En muchos casos, no es necesario especificar la herencia, ya que muchas propiedades se heredan de forma natural. Sin embargo, heredar puede ser muy útil.&lt;/p&gt;

&lt;h2&gt;
  
  
  Heredar las fuentes para los controles de formularios: &lt;code&gt;font: inherit;&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Es probable que en varios resets de CSS encuentres la siguiente regla de estilo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;
&lt;span class="c"&gt;/* Inherit fonts for inputs and buttons */&lt;/span&gt;
&lt;span class="nt"&gt;input&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;textarea&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;select&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;inherit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Por defecto, los botones y los input no heredan los estilos tipográficos de sus padres. En su lugar, tienen sus propios estilos.&lt;/p&gt;

&lt;p&gt;Por ejemplo, &lt;code&gt;&amp;lt;textarea&amp;gt;&lt;/code&gt; utilizará la fuente monospace predeterminada del sistema. Los input utilizarán la fuente sans serif predeterminada del sistema. Y ambos elegirán un tamaño de fuente muy pequeño (13,333px en Chrome).&lt;/p&gt;

&lt;p&gt;Como podrás imaginar, es muy difícil leer un texto de 13px en un dispositivo móvil. Cuando enfoquemos un input con un tamaño de fuente pequeño, el navegador hará zoom automáticamente para que el texto sea más fácil de leer. Por lo que no es una buena experiencia de usuario.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/font#syntax" rel="noopener noreferrer"&gt;font&lt;/a&gt; es un shorthand poco utilizado que engloba varias propiedades relacionadas con la fuente, como &lt;code&gt;font-family&lt;/code&gt;, &lt;code&gt;font-size&lt;/code&gt;, &lt;code&gt;font-stretch&lt;/code&gt;, &lt;code&gt;font-style&lt;/code&gt;, &lt;code&gt;font-variant&lt;/code&gt;, &lt;code&gt;font-weight&lt;/code&gt; y &lt;code&gt;line-height&lt;/code&gt;. Al establecer la propiedad &lt;code&gt;font&lt;/code&gt; como &lt;code&gt;inherit&lt;/code&gt;, ordenamos a estos elementos que coincidan con la tipografía de su entorno.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;font: inherit&lt;/code&gt; afectará sobre todo a los elementos &lt;code&gt;&amp;lt;textarea&amp;gt;&lt;/code&gt;, pero no hay nada malo en aplicarlo también a los otros elementos de formulario porque ahorra algo de CSS más adelante en un proyecto.&lt;/p&gt;

&lt;h4&gt;
  
  
  📚 Libros de CSS consultados para este tema:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;CSS in Depth&lt;/li&gt;
&lt;li&gt;CSS The Missing Manual&lt;/li&gt;
&lt;li&gt;CSS The Definitive Guide&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Gracias por leer🦸🏻‍♀️&lt;br&gt;
Mis redes sociales donde comparto notas de código:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/lupitacode" rel="noopener noreferrer"&gt;▶️Youtube&lt;/a&gt;&lt;br&gt;
&lt;a href="https://instagram.com/lupitacode" rel="noopener noreferrer"&gt;📷Instagram&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/lupitacode" rel="noopener noreferrer"&gt;🐦Twitter&lt;/a&gt;&lt;br&gt;
&lt;a href="https://codepen.io/lupitacode/" rel="noopener noreferrer"&gt;🔲Codepen&lt;/a&gt;&lt;br&gt;
&lt;a href="https://lupitacode.medium.com/" rel="noopener noreferrer"&gt;✍️Medium&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.tiktok.com/@lupitacode" rel="noopener noreferrer"&gt;🎵Tik Tok&lt;/a&gt;&lt;br&gt;
&lt;a href="https://facebook.com/lupitacode" rel="noopener noreferrer"&gt;🔵Facebook&lt;/a&gt;&lt;/p&gt;

</description>
      <category>css</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Especificidad en CSS: Qué es y cómo funciona</title>
      <dc:creator>Lupita Code 🌄</dc:creator>
      <pubDate>Wed, 21 Jul 2021 00:06:37 +0000</pubDate>
      <link>https://forem.com/lupitacode/especificidad-en-css-que-es-y-como-funciona-52k6</link>
      <guid>https://forem.com/lupitacode/especificidad-en-css-que-es-y-como-funciona-52k6</guid>
      <description>&lt;p&gt;¡Hola gente bonita!👋&lt;/p&gt;

&lt;p&gt;En este articulo voy a explicar a detalle la especificidad, una parte clave de la cascada. La especificidad es una de las cuatro etapas distintas de la cascada, que se trató en mi articulo anterior.&lt;/p&gt;

&lt;p&gt;Para entender por qué tus estilos CSS no se están aplicando a un elemento, primero debes tener una comprensión básica de la Especificidad en CSS.&lt;/p&gt;

&lt;p&gt;Es muy fácil poner el valor &lt;code&gt;!important&lt;/code&gt; a tus estilos CSS, pero esto hace que tu CSS se descontrole rápidamente.&lt;/p&gt;

&lt;p&gt;Entendiendo cómo se aplican los estilos, puedes asegurarte de que los estilos que quieres que se apliquen se muestren.&lt;/p&gt;

&lt;p&gt;Es más fácil cambiar rápidamente un estilo cuando se sabe exactamente qué selector da estilo a ese elemento específico. Además, probablemente te encontrarás escribiendo menos código CSS en general, lo que ayudará a su mantenimiento.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Qué es la especificidad?
&lt;/h2&gt;

&lt;p&gt;La especificidad en CSS es un grupo de reglas aplicadas a los selectores CSS para determinar qué estilo se aplica a un elemento. Cuanto más específico sea un selector, mayor será su valor en puntos y más probable será que esté presente en el estilo del elemento.&lt;/p&gt;

&lt;p&gt;La documentación oficial de la MDN describe la especificidad de la siguiente manera:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;La especificidad es la manera mediante la cual los navegadores deciden qué valores de una propiedad CSS son más relevantes para un elemento y, por lo tanto, serán aplicados&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Esto significa que la especificidad de CSS es un conjunto de reglas usadas por los navegadores para determinar cuál de los estilos definidos por el desarrollador se aplicará a un elemento específico. Para que un estilo se aplique a un elemento en particular, el desarrollador tiene que cumplir con las reglas, de modo que el navegador sepa cómo aplicar el estilo.&lt;/p&gt;

&lt;p&gt;El navegador evalúa la especificidad en dos partes: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Los estilos aplicados en línea en el HTML (Inline Styles).&lt;/li&gt;
&lt;li&gt;Los estilos aplicados mediante un selector (Especificidad del selector).&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Jerarquía de la especificidad
&lt;/h2&gt;

&lt;p&gt;Piense en la especificidad como un score/rank que determina qué declaraciones de estilo se aplican finalmente a un elemento.&lt;/p&gt;

&lt;p&gt;La especificidad utiliza un sistema de ponderación o puntuación.&lt;/p&gt;

&lt;p&gt;Cada tipo de selector recibe puntos que indican su especificidad, y se suman los puntos de todos los selectores que hayas utilizado. para calcular la especificidad total del selector.&lt;/p&gt;

&lt;p&gt;Cada selector tiene su lugar en la jerarquía de especificidad. Hay cuatro categorías que definen el nivel de especificidad de un selector.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9wc5w6w10yriwydymc55.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9wc5w6w10yriwydymc55.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Puntuación de cada tipo de selector
&lt;/h2&gt;

&lt;p&gt;Antes de comenzar, debes conocer primero cuales son los tipos de selectores en CSS, estos se dividen en varias categorías. Un ejemplo son las pseudoclases que vas a poder encontrar muchas de ellas, sin embargo, te recomiendo que solo aprendas las mas importantes.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1357079798137425920-242" src="https://platform.twitter.com/embed/Tweet.html?id=1357079798137425920"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1357079798137425920-242');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1357079798137425920&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;La cantidad de especificidad de un selector se mide usando cuatro valores diferentes separados por coma que tienen diferente peso y pueden describirse como millares, centenas, decenas y unidades (cuatro dígitos individuales dispuestos en cuatro columnas):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhhf8sfgmd2w72c7yp8o3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhhf8sfgmd2w72c7yp8o3.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  *Selector Universal
&lt;/h3&gt;

&lt;p&gt;El selector con menor peso ( y menos valor ) es el selector universal, que en CSS se define de la siguiente forma:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

* {
  box-sizing: border-box;
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Este selector comúnmente se utiliza para aplicar la propiedad &lt;code&gt;box-sizing: border-box&lt;/code&gt; a todos los elementos. Si quieres saber más sobre esta propiedad, te invito a leer mi articulo completo⤵️&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/lupitacode" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F617393%2F67c4df49-d9b4-4361-a19f-a1a31486dec7.png" alt="lupitacode"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/lupitacode/que-es-el-box-sizing-en-css-2pi9" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;¿Qué es el Box Sizing en CSS? 🤔&lt;/h2&gt;
      &lt;h3&gt;Lupita Code 🌄 ・ Apr 19 '21&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#css&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#spanish&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;



&lt;p&gt;Este selector en CSS tiene un valor de 0-0-0-0, eso quiere decir que cualquier otro selector cuyo valor sea 1-0-0-0, 0-1-0-0 o incluso 0-0-0-1 tendrá mayor peso que el y lo reescribirá. Esto lo podemos comprobar con el siguiente ejemplo:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&amp;lt;p&amp;gt;Lupita Code&amp;lt;/p&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

* {
  font-size: 1rem;
}

p {
font-size: 3rem;
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;¿Qué tamaño de fuente se va aplicar al elemento &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;?&lt;/p&gt;

&lt;p&gt;El selector universal * tiene un peso de 0-0-0-0 mientras que el selector con un elemento HTML ( en este caso un &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; ) tiene un peso de 0-0-0-1, al ser un valor mayor que el anterior, su peso es mayor y CSS entiende que su especificidad también es mayor y gana sobre el anterior selector a pesar de estar declarado en primer lugar en la hoja de estilos.&lt;/p&gt;

&lt;h2&gt;
  
  
  &amp;lt;/&amp;gt; Elementos y ::pseudoelementos
&lt;/h2&gt;

&lt;p&gt;Los selectores de tipo o de etiqueta: &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;,&lt;code&gt;&amp;lt;main&amp;gt;&lt;/code&gt; etc.&lt;br&gt;
Tiene un valor de 0-0-0-1  &lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&amp;lt;header&amp;gt;
  &amp;lt;h1&amp;gt;&amp;lt;span&amp;gt;Welcome&amp;lt;/span&amp;gt; to my youtube channel&amp;lt;/h1&amp;gt;
&amp;lt;/header&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

header h1 span {
    text-transform: lowercase;
}
span {
  text-transform:uppercase;
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;El elemento &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; solamente tiene un peso de 0-0-0-1 pero también tenemos en la primera regla 3 etiquetas HTML que tienen un peso total de 0-0-0-3, ¿Por que 3? 🤔 la respuesta es que el 3 es la cantidad de elementos HTML declarados, por lo que todo el texto estará en minúsculas a pesar de que el &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; tenga mayúscula.&lt;/p&gt;

&lt;p&gt;Por lo tanto si agregas 5 Selectores de elementos anidados, el peso será de 0-0-0-5. &lt;br&gt;
Recuerda que mayor peso en la especificidad será el ganador 🏆.&lt;/p&gt;

&lt;p&gt;Lo mismo pasa con los pseudo-elementos tienen un valor de 0-0-0-1. Los pseudo-elementos más usados son ::after y ::before.  &lt;/p&gt;
&lt;h2&gt;
  
  
  .clases, atributos[...] y :pseudoclases
&lt;/h2&gt;

&lt;p&gt;El selector de clase tiene mayor peso (o especificidad) que los selectores de tipo o elementos HTML y que el selector universal, seguiremos con el ejemplo anterior pero ahora con una clase llamada &lt;code&gt;title&lt;/code&gt; en la etiqueta &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&amp;lt;header&amp;gt;
  &amp;lt;h1&amp;gt;&amp;lt;span class="title"&amp;gt;Welcome&amp;lt;/span&amp;gt; to my youtube channel&amp;lt;/h1&amp;gt;
&amp;lt;/header&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

header h1 span {
    text-transform: lowercase;
}
.title {
  text-transform:uppercase;
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Ahora el texto del elemento &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; si estará en mayúscula y todo lo demás estará en minúscula, esto sucede porque las clases tienen un peso de 0-0-1-0 mientras que el selector de 3 elementos será de 0-0-0-3.&lt;/p&gt;

&lt;p&gt;Existen otros selectores que tienen el mismo peso de 0-0-1-0 que son los selectores de atributo y las pseudo-clases. Existen muchas pseudo-clases un ejemplo son las pseudo-clases child, si no la conoces te comparto un cheatsheet que publique en mi Twitter:  &lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1324147665714774016-952" src="https://platform.twitter.com/embed/Tweet.html?id=1324147665714774016"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1324147665714774016-952');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1324147665714774016&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  Selector de id
&lt;/h2&gt;

&lt;p&gt;Este es de los selectores más específicos en este caso el ID tendrá un peso de 0-1-0-0. &lt;/p&gt;

&lt;p&gt;Esto significa que un selector de ID tiene una mayor especificidad que un selector de clase. De hecho, un único ID tiene una mayor&lt;br&gt;
especificidad que un selector con cualquier número de clases. Del mismo modo, un selector de clases tiene una mayor especificidad&lt;br&gt;
que un selector de etiquetas (también llamado selector de tipos).&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&amp;lt;header id="header" class="header"&amp;gt; Lupita Code &amp;lt;/header&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

#header {
  background-color: rebeccapurple;

.header {
   background-color: khaki;
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;El valor que se va aplicar al elemento &lt;code&gt;&amp;lt;header&amp;gt;&lt;/code&gt; es el color &lt;code&gt;rebeccapurple&lt;/code&gt; ya que el id tiene un valor de 0-1-0-0, mientras que la clase tiene un valor de 0-0-1-0. &lt;/p&gt;
&lt;h2&gt;
  
  
  Estilos en línea
&lt;/h2&gt;

&lt;p&gt;Los estilos inline añadidos a un elemento HTML siempre sobrescriben a cualquier estilo escrito en hojas de estilo externas o una etiqueta &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt;, por lo que se puede decir que tienen la mayor especificidad. Los estilos en línea no tienen selector porque se aplican directamente al elemento al que se dirigen.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&amp;lt;li&amp;gt;
  &amp;lt;a href="/specials" class="featured" 
style="background-color: orange;"&amp;gt; 
     Specials
 &amp;lt;/a&amp;gt;
&amp;lt;/li&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Los estilos en línea tienen un valor de 1-0-0-0. &lt;/p&gt;

&lt;p&gt;Para anular los estilos inline, tendrás que añadir un &lt;code&gt;!important&lt;/code&gt; a la declaración de la hoja de estilos externa. Si los estilos en línea están marcados como &lt;code&gt;!important&lt;/code&gt;, entonces nada puede anularlos. &lt;/p&gt;

&lt;p&gt;Es preferible que todos tus estilos estén en una hoja de estilos externa. Utilizar &lt;code&gt;!important&lt;/code&gt; es solo para casos desesperados y NO se recomienda usarlo ya que si comienzas a agregar &lt;code&gt;!important&lt;/code&gt; en varios lugares de tus hojas de estilos te será más complicado debuggear o reescribir algún elemento. Aunque existen ciertos &lt;a href="https://css-tricks.com/when-using-important-is-the-right-choice/" rel="noopener noreferrer"&gt;casos especiales&lt;/a&gt; en los que si puedes usarlo pero si eres principiante recomiendo NO utilizar &lt;code&gt;!important&lt;/code&gt; a menos que sepas lo que estas haciendo. &lt;/p&gt;
&lt;h2&gt;
  
  
  🙄 ¿Qué tiene que ver !important con la especificidad?
&lt;/h2&gt;

&lt;p&gt;En la tabla anterior que te presente al inicio de este articulo, mencione que &lt;code&gt;!important&lt;/code&gt; gana a todos, es decir le gana a la especificidad.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;!important&lt;/code&gt; anula todos los demás estilos, independientemente de la especificidad del selector. Esta palabra clave para el navegador es de prioridad muy alta. Aunque técnicamente &lt;code&gt;!important&lt;/code&gt; no tiene nada que ver con especificidad, interactúa directamente con esta. &lt;/p&gt;

&lt;p&gt;Es posible que te encuentres con situaciones al utilizar frameworks CSS, como Bootstrap, en las que no puedes utilizar la especificidad CSS para anular los estilos nativos. En estos casos, el uso de &lt;code&gt;!important&lt;/code&gt; no se considera una mala práctica.&lt;/p&gt;
&lt;h2&gt;
  
  
  Excepciones
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;El selector universal (*), los combinadores (+, &amp;gt;, ~, etc ) y la pseudo-clase de negación &lt;code&gt;:not()&lt;/code&gt; no tienen efecto sobre la especificidad. (Sin embargo, los selectores declarados dentro de &lt;code&gt;:not()&lt;/code&gt; si lo tienen). Por ejemplo:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

div.outer p {
  color:orange;
}
div:not(.outer) p {
  color: lime;
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&amp;lt;div class="outer"&amp;gt;
  &amp;lt;p&amp;gt;Esto está en el outer div.&amp;lt;/p&amp;gt;
  &amp;lt;div class="inner"&amp;gt;
    &amp;lt;p&amp;gt;Este texto está en el inner div.&amp;lt;/p&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpkmq0nbcsniem7bps2hb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpkmq0nbcsniem7bps2hb.jpg" alt="Pseudoclase :not()"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como puedes observar la pseudo-clase de negación &lt;code&gt;:not()&lt;/code&gt; no es considerada una pseudo-clase para el cálculo de la especificidad. Pero los selectores colocados dentro de ella en este ejemplo la clase &lt;code&gt;.outer&lt;/code&gt;, si cuentan en la especificidad.&lt;/p&gt;
&lt;h2&gt;
  
  
  Diferentes tipos de selectores, diferente especificidad
&lt;/h2&gt;

&lt;p&gt;Cuando usamos diferentes tipos de selectores combinados (por ejemplo,&lt;code&gt;body #content .data img:hover{}&lt;/code&gt;) el navegador contará el número de ids, pseudo-clases y pseudo-elementos y asignará un valor de especificidad a la regla, para compararla con las demás y decidir cuál usar. Por ejemplo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyhq31exweszee09llau7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyhq31exweszee09llau7.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  VSCODE al rescate
&lt;/h2&gt;

&lt;p&gt;Te preguntaras si tienes que hacer estos cálculos siempre para saber que tan específicos son tus selectores, por fortuna no tienes que hacer estos cálculos manualmente, gracias al editor de código vscode podemos saber la especificidad de los selectores.&lt;/p&gt;

&lt;p&gt;Lo único que tienes que hacer es posicionar el cursor sobre tus selectores en la hoja de estilos y vscode automaticamente te da la especificidad:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr9meyp8rs3o4vasha5f3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr9meyp8rs3o4vasha5f3.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Metodología BEM (Block Element Modifier)
&lt;/h2&gt;

&lt;p&gt;El CSS puede convertirse rápidamente en algo desordenado cuando no nos detenemos a pensar en una arquitectura para nuestras hojas de estilo, y en su lugar colocamos una gran cantidad de selectores sin pensar en la especificidad.&lt;/p&gt;

&lt;p&gt;Una forma de combatir el CSS desordenado, y asegurar que tus reglas de especificidad se aplican como es debido, es adoptar una metodología. BEM es una de las metodologías de CSS más utilizadas. No vamos a profundizar ahora en las metodologías o arquitecturas, pero pueden ayudarte a garantizar que tus estilos no se anulen entre sí.&lt;/p&gt;

&lt;p&gt;Hay un montón de arquitecturas y metodologías que ayudan a lidiar con la especificidad para escribir un CSS escalable y mantenible. &lt;br&gt;
Realmente no importa qué arquitectura o metodología elija tu equipo, lo importante es tener una que todos sigan para evitar problemas.&lt;/p&gt;

&lt;p&gt;Al aprovechar al máximo la especificidad de CSS, te aseguras de que tu código esté organizado y de que tus selectores no entren en conflicto unos con otros.&lt;/p&gt;

&lt;p&gt;Si quieres aprender sobre la metodología BEM en mi cuenta de &lt;a href="https://twitter.com/lupitacode" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; compartí un repositorio donde podrás encontrar una colección de recursos sobre esta metodología:&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1356061837050130436-609" src="https://platform.twitter.com/embed/Tweet.html?id=1356061837050130436"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1356061837050130436-609');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1356061837050130436&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;

&lt;p&gt;Los navegadores utilizan la especificidad para decidir que reglas CSS aplicar a los elementos.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔎 Recursos:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://specificity.keegan.st/" rel="noopener noreferrer"&gt;Specificity Calculator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jonassebastianohlsson.com/specificity-graph/" rel="noopener noreferrer"&gt;CSS Specificity Graph Generator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kittygiraudel.github.io/selectors-explained/" rel="noopener noreferrer"&gt;Selectors Explained&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/emmabostian/css-specificity-1kca"&gt;CSS Specificity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://css-tricks.com/specifics-on-css-specificity/" rel="noopener noreferrer"&gt;Specifics on CSS Specificity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.stefanjudis.com/blog/should-devtools-teach-the-css-cascade/" rel="noopener noreferrer"&gt;Should DevTools teach the CSS cascade?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://codigoconjuan.com/que-es-y-como-funciona-la-especificidad-en-css/" rel="noopener noreferrer"&gt;Qué es y como funciona la especificidad en CSS | Código con Juan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://css-weights.vercel.app/question/1" rel="noopener noreferrer"&gt;What's that weight?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.matuzo.at/blog/2022/specificity/" rel="noopener noreferrer"&gt;CSS Specificity Demo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://codepen.io/AmeliaBR/post/explaining-css-specificity-to-a-5-year-old" rel="noopener noreferrer"&gt;Explaining CSS specificity to a 5-year-old&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sarahchima.com/blog/css-specificity/" rel="noopener noreferrer"&gt;What is CSS Specificity?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📚 Libros de CSS consultados para este tema:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;CSS in Depth&lt;/li&gt;
&lt;li&gt;CSS The Missing Manual&lt;/li&gt;
&lt;li&gt;CSS The Definitive Guide&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Gracias por leer🦸🏻‍♀️&lt;br&gt;
Mis redes sociales donde comparto notas de código:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/lupitacode" rel="noopener noreferrer"&gt;▶️Youtube&lt;/a&gt;&lt;br&gt;
&lt;a href="https://instagram.com/lupitacode" rel="noopener noreferrer"&gt;📷Instagram&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/lupitacode" rel="noopener noreferrer"&gt;🐦Twitter&lt;/a&gt;&lt;br&gt;
&lt;a href="https://facebook.com/lupitacode" rel="noopener noreferrer"&gt;🔵Facebook&lt;/a&gt;&lt;br&gt;
&lt;a href="https://codepen.io/lupitacode/" rel="noopener noreferrer"&gt;🔲Codepen&lt;/a&gt;&lt;br&gt;
&lt;a href="https://lupitacode.medium.com/" rel="noopener noreferrer"&gt;✍️Medium&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.tiktok.com/@lupitacode" rel="noopener noreferrer"&gt;🎵Tik Tok&lt;/a&gt;&lt;/p&gt;

</description>
      <category>css</category>
      <category>codenewbie</category>
      <category>spanish</category>
      <category>latam</category>
    </item>
    <item>
      <title>La Cascada en CSS: Qué es y cómo funciona</title>
      <dc:creator>Lupita Code 🌄</dc:creator>
      <pubDate>Tue, 22 Jun 2021 20:13:42 +0000</pubDate>
      <link>https://forem.com/lupitacode/la-cascada-en-css-que-es-y-como-funciona-31cd</link>
      <guid>https://forem.com/lupitacode/la-cascada-en-css-que-es-y-como-funciona-31cd</guid>
      <description>&lt;p&gt;¡Hola gente bonita!👋&lt;/p&gt;

&lt;p&gt;¿Alguna vez has escrito una propiedad CSS y el valor no parece funcionar? Tal vez tuviste que recurrir al uso de &lt;code&gt;!important&lt;/code&gt; para que funcionara. O quizás hayas recurrido a escribir el CSS inline en el elemento del archivo HTML. Por lo general, el problema puede ser que has creado dos reglas que podrían aplicarse al mismo elemento.&lt;/p&gt;

&lt;p&gt;El CSS consiste en declarar reglas: Bajo varias condiciones, queremos que ocurran ciertas cosas. Si esta clase se añade a ese elemento, aplique estos estilos. Si el elemento X es hijo del elemento Y, aplica estos estilos. El navegador toma estas reglas, calcula cuáles se aplican y dónde se van aplicar, y las utiliza para representarlas en la página web.&lt;/p&gt;

&lt;p&gt;👉 Recuerda que el aspecto final de una página web es el resultado de reglas de estilo diferentes.&lt;/p&gt;

&lt;p&gt;Pero, ¿Qué es una regla en la sintaxis de CSS? 🤔 Puede que no estés familiarizado con el vocabulario en CSS, pero como voy a utilizar este término a lo largo del articulo, es mejor tener claro lo que significa: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Una regla también conocida como estilo, es una colección de declaraciones dirigidas a uno o más selectores, una hoja de estilo se compone de múltiples reglas.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Si quieres aprender sobre la terminología en CSS, he publicado un post ilustrativo en mi Instagram:&lt;/p&gt;


&lt;div class="instagram-position"&gt;
  &lt;iframe id="instagram-liquid-tag" src="https://www.instagram.com/p/CMuymmQjkX4/embed/captioned/"&gt;
  &lt;/iframe&gt;
  
&lt;/div&gt;


&lt;p&gt;El primer paso es entender cómo el navegador da importancia a sus reglas. Por ejemplo, puedes encontrarte con que una de tus reglas no hace lo que esperabas porque otra regla entra en conflicto con ella. Predecir cómo se comportan las reglas requiere comprender la cascada.&lt;/p&gt;

&lt;p&gt;Cuando dos o más reglas se dirigen al mismo elemento, las reglas pueden proporcionar declaraciones contradictorias. En el siguiente ejemplo se muestra tres conjuntos de reglas, cada uno de los cuales especifica un estilo de fuente diferente para el título de la página. El título NO puede tener tres fuentes diferentes a la vez. Entonces, ¿Cómo sabe CSS que estilo aplicar? 🤔 o ¿Cuál tiene prioridad sobre los demás? Aquí es donde utilizamos la cascada.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;h1 class="title" id="page-title"&amp;gt;Lupita Code&amp;lt;/h1&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;h1 {
    font-family: serif;
}

#page-title {
    font-family: sans-serif;
}

.title {
    font-family: monospace;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Los tres conjuntos de reglas intentan establecer una familia de fuentes diferente para este encabezado &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt;. ¿Cuál de ellas ganará? 🤔. Para determinar la respuesta, el navegador (para saber que estilos tiene prioridad sobre los demás) sigue una serie de reglas o pasos (en orden) que son: Origen de la hoja de estilo, especificidad de los selectores y orden en que se declaran los estilos. Estos conceptos lo vamos a explicar más adelante.&lt;/p&gt;

&lt;p&gt;En este caso, las reglas dictan que la segunda declaración, que tiene un selector ID gana; el título tendrá una fuente &lt;code&gt;sans-serif&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fis2hkov84bbwonnv4pbk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fis2hkov84bbwonnv4pbk.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cuando se observan ejemplos pequeños, este proceso suele ser sencillo. Pero a medida que tu hoja de estilos crece, o el número de páginas a las que les aplicas aumenta, tu código puede volverse complejo con sorprendente rapidez.&lt;/p&gt;

&lt;h2&gt;
  
  
  🤔 ¿Qué es la cascada?
&lt;/h2&gt;

&lt;p&gt;La cascada es el algoritmo por el cual el navegador decide qué estilos CSS aplicar a un elemento - a mucha gente le gusta pensar en esto como el estilo que "gana".&lt;br&gt;
Especifica cómo el navegador debe manejar múltiples estilos que se aplican a la misma etiqueta HTML y qué hacer cuando las propiedades CSS entran en conflicto. La cascada es una parte fundamental del funcionamiento del lenguaje.&lt;/p&gt;

&lt;p&gt;Los conflictos de estilo se producen en dos casos: por herencia y cuando uno o más estilos se aplican al mismo elemento.&lt;/p&gt;

&lt;p&gt;Cabe mencionar que las iniciales de CSS significan &lt;strong&gt;C&lt;/strong&gt;ascading &lt;strong&gt;S&lt;/strong&gt;tyle &lt;strong&gt;S&lt;/strong&gt;heets (Hojas de Estilo en Cascada), y es muy importante entender la palabra cascada ya que como podrás darte cuenta forma parte del propio nombre.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;En cascada se refiere a la forma en que CSS aplica un estilo encima de otro.&lt;/li&gt;
&lt;li&gt;Las hojas de estilo controlan la apariencia de los documentos web.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Podemos decir entonces que &lt;strong&gt;la cascada es el algoritmo para resolver conflictos cuando se aplican varias reglas CSS a un elemento HTML&lt;/strong&gt;. La forma en que se comporta la cascada es la clave para comprender el CSS.&lt;/p&gt;

&lt;p&gt;La cascada puede ser una herramienta poderosa, pero su uso incorrecto puede conducir a hojas de estilo frágiles que dan pesadillas a los desarrolladores/as de front-end cada vez que tienen que hacer un cambio. Mientras nos sumergimos en la cascada, veremos algunas formas de evitar que la cascada se nos vaya de las manos.&lt;/p&gt;
&lt;h2&gt;
  
  
  🔼 Las 4 etapas de la cascada
&lt;/h2&gt;

&lt;p&gt;Entender el algoritmo de cascada ayuda a comprender cómo el navegador resuelve conflictos de estilos. &lt;br&gt;
Cuando las declaraciones entran en conflicto, la cascada considera cuatro cosas para resolver la diferencia:&lt;/p&gt;

&lt;p&gt;➊ &lt;strong&gt;Posición y orden de aparición:&lt;/strong&gt; El orden en que aparecen tus reglas CSS en la hoja de estilos.&lt;br&gt;
➋ &lt;strong&gt;Especificidad de los selectores:&lt;/strong&gt; Qué selectores tienen prioridad sobre otros.&lt;br&gt;
➌ &lt;strong&gt;Origen de la hoja de estilo:&lt;/strong&gt; El orden de aparición del CSS y su procedencia, ya sea un estilo del navegador, el CSS de una extensión del navegador o el CSS de tu autoría.&lt;br&gt;
➍ &lt;strong&gt;Importancia:&lt;/strong&gt; Algunas reglas CSS tienen más peso que otras, especialmente con el tipo de regla &lt;code&gt;!important&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Las reglas de la cascada se consideran en este orden. Aunque hay varios autores de diversos libros de CSS que solo consideran tres etapas de manera general:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Origen de la hoja de estilo.&lt;/li&gt;
&lt;li&gt;Especificidad de los selectores.&lt;/li&gt;
&lt;li&gt;Orden en que se declaran los estilos en la hoja de estilos.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;El siguiente diagrama de flujo muestra cómo son aplicadas estas reglas.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo6ktxgccj3t4oyh4xa4p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo6ktxgccj3t4oyh4xa4p.png" alt="Diagrama de flujo de la cascada en CSS"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Estas reglas permiten que los navegadores se comporten de forma predecible al resolver cualquier ambigüedad en el CSS. Vamos a repasarlas una por una.&lt;/p&gt;
&lt;h2&gt;
  
  
  🔢 Posición y orden de aparición:
&lt;/h2&gt;

&lt;p&gt;El orden en el que aparecen tus reglas CSS y cómo aparecen es tomado en consideración por la cascada mientras ésta calcula la resolución de conflictos.&lt;/p&gt;
&lt;h3&gt;
  
  
  Ejemplo 1 - Orden de las reglas
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;button {
  color: red;
}

button {
  color: blue;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;En este ejemplo hay dos reglas que tienen selectores de idéntica especificidad, por lo que gana la última en ser declarada, es decir, aquí prevalece siempre la última regla definida, la cuál sobreescribe las propiedades anteriores.&lt;/p&gt;

&lt;p&gt;Ahora te propongo un reto, dada las siguientes clases, ¿De qué color serían estos divs?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.red {
color: red;
}

.blue {
color: blue;
}
-------
&amp;lt;div class=”red blue”&amp;gt; Lupita Code &amp;lt;/div&amp;gt;
&amp;lt;div class=”blue red”&amp;gt; Lupita Code &amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si has contestado "ambos divs tienen color blue", felicidades, es la opción correcta. Pero no te sientas mal si no has acertado...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;El verdadero truco de la pregunta es que los navegadores no miran el orden en que se declaran las clases en el HTML, sino en el CSS.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;👉 Recuerda que cuando dos selectores tienen la misma especificidad, gana la declaración que aparece en último lugar.&lt;/p&gt;

&lt;p&gt;Sin embargo hay algunos casos que no esta muy claro que estilo debería sobreescribir a los anteriores, ahí es cuando aplicamos el concepto de cascada, que es la que se encarga de determinar el que tiene mayor prioridad.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ejemplo 2 - Orden de las hojas de estilo
&lt;/h3&gt;

&lt;p&gt;Hay cuatro formas de incluir CSS en un documento HTML que van de mayor a menor prioridad:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;En línea dentro de la etiqueta HTML usando el atributo &lt;code&gt;style;&lt;/code&gt;: El CSS en línea es el que tiene mayor precedencia, por lo que siempre será el que tenga prioridad sobre otras reglas CSS, lo que puede ganarle a este estilo en línea es el &lt;code&gt;!important&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;En el &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; a través de la la etiqueta &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt;: el CSS incrustado/interno será el siguiente a tener en cuenta en orden de prioridad.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Asociando una hoja de estilo externa a nuestro documento HTML usando la etiqueta &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; añadida en el &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;:  CSS externos son la tercera opción de prioridad al momento de tomar en cuenta las reglas CSS.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;En el &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; usando &lt;code&gt;@import&lt;/code&gt; dentro de la etiqueta &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt;, ejemplo: &lt;code&gt;&amp;lt;style&amp;gt; @import url('style.css') &amp;lt;/style&amp;gt;&lt;/code&gt; (poco usable).&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Nota:&lt;/strong&gt; A pesar de que hay muchas maneras de incluir CSS en nuestro documento HTML, la forma más usada es asociar una hoja de estilo externa.&lt;/p&gt;

&lt;p&gt;Como puedes notar los estilos pueden venir de varias partes en una página HTML. Si tienes un &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; que incluye CSS en la parte superior de tu página HTML, y luego otro &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; que incluye CSS en la parte inferior de tu página: el &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; inferior tendrá la mayor especificidad. Lo mismo ocurre con los elementos &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt; incrustados. Se vuelven más específicos cuanto más abajo en la página estén.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="en"&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;link rel="stylesheet" href="styles.css" /&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;button&amp;gt;I am a button&amp;lt;/button&amp;gt;
    &amp;lt;style&amp;gt;
      button {
        background: pink;
      }
    &amp;lt;/style&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/*styles.css*/

button {
  background: yellow;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La etiqueta &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt; incrustada está más abajo en la página que la etiqueta &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt;, así que aunque la especificidad del botón es la misma, la posición de la regla de estilo la hace ganar. Por lo tanto, El botón tendrá un background de color rosa &lt;code&gt;pink&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Dado que CSS tiene en cuenta el orden de las hojas en la cascada, el orden en el que se cargan las hojas de estilo es realmente importante. &lt;/p&gt;

&lt;p&gt;Si tienes dos hojas de estilo enlazadas en el &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; de tu documento HTML, la segunda hoja de estilo anulará las reglas de la primera. Esta es también la razón por la que si estás usando un reset de CSS o un framework, querrás cargarlo antes de tus estilos personalizados.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ejemplo 3 - La posición de las declaraciones
&lt;/h3&gt;

&lt;p&gt;La posición también se aplica en el orden de su regla CSS. En el siguiente ejemplo, el elemento tendrá un fondo púrpura porque &lt;code&gt;background: purple&lt;/code&gt; fue declarado en último lugar. Debido a que el &lt;code&gt;background: green&lt;/code&gt; fue declarado antes que el &lt;code&gt;background: purple&lt;/code&gt;, ahora es ignorado por el navegador.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.my-element {
  background: green;
  background: purple;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Poder especificar dos valores para la misma propiedad puede ser una forma sencilla de crear fallbacks para los navegadores que no soportan un valor concreto. &lt;/p&gt;

&lt;p&gt;En el siguiente ejemplo, la propiedad &lt;code&gt;font-size&lt;/code&gt; se declara dos veces. Si la función &lt;code&gt;clamp()&lt;/code&gt; está soportado en el navegador, entonces la declaración anterior de &lt;code&gt;font-size&lt;/code&gt; será descartada. Si &lt;code&gt;clamp()&lt;/code&gt; no está soportado por el navegador, la declaración inicial será respetada, y el tamaño de la fuente será &lt;code&gt;1.5rem&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.my-element {
  font-size: 1.5rem;
  font-size: clamp(1.5rem, calc(1rem + 3vw), 2rem);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;📝 &lt;strong&gt;NOTA:&lt;/strong&gt; Este enfoque de declarar la misma propiedad dos veces funciona porque los navegadores ignoran los valores que no entienden. A diferencia de los lenguajes de programación, CSS no lanzará un error o romperá su programa cuando detecte una línea que no puede analizar - el valor que no puede analizar es inválido y por lo tanto es ignorado. El navegador continúa entonces procesando el resto del CSS sin romper lo que ya entiende.&lt;/p&gt;

&lt;h2&gt;
  
  
  📑 Especificidad de los selectores
&lt;/h2&gt;

&lt;p&gt;El segundo peso en la cascada es la especificidad del selector. En este nivel, el navegador se fija en los selectores utilizados en las reglas CSS.&lt;/p&gt;

&lt;p&gt;La especificidad utiliza un sistema de ponderación o puntuación para determinar qué selector es el más específico, es decir, se asigna prioridad a los distintos tipos de selectores CSS. Al evaluar la especificidad, se tiene en cuenta el número de selectores y su prioridad. &lt;br&gt;
Los diferentes tipos de selectores CSS tienen diferente peso. En orden de mayor a menor prioridad:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Inline styles.&lt;/li&gt;
&lt;li&gt;ID selectors (&lt;code&gt;#something&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Classes (&lt;code&gt;.something&lt;/code&gt;) / pseudo-selectors (&lt;code&gt;:hover&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Type selectors (&lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt;) &amp;amp; pseudo-elements (&lt;code&gt;::before&lt;/code&gt;).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Los combinadores (+, &amp;gt; y ~), el selector universal (*) y la pseudoclase &lt;code&gt;:not()&lt;/code&gt; no tienen ningún efecto sobre la especificidad.&lt;/p&gt;

&lt;p&gt;En el siguiente ejemplo, la clase &lt;code&gt;title&lt;/code&gt; del elemento &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; hará que esa regla sea más específica y por lo tanto se considera más importante para ser aplicada. Esto significa que el &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; tendrá el color &lt;code&gt;red&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;h1 class="title"&amp;gt;Heading&amp;lt;/h1&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.title {
  color: red;
}

h1 {
  color: blue;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A pesar de que el selector &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; se encuentra más abajo, podrías pensar que va a sobrescribir a los estilos de la clase, pero no es así, ya que la especificidad considera más importante la clase.&lt;/p&gt;

&lt;p&gt;Como podrás comprobar en mi siguiente artículo, cada tipo de selector recibe puntos que indican su especificidad, y se suman los puntos de todos los selectores que hayas utilizado. Esto significa que si tienes una lista de selectores como: &lt;code&gt;a.my-class.another-class[href]:hover&lt;/code&gt; obtienes algo bastante difícil de sobrescribir con otro CSS. &lt;/p&gt;

&lt;p&gt;Por esta razón, y para ayudar a que tu CSS sea más reutilizable, es una buena idea mantener tus selectores tan simples como sea posible.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔎 Origen de la hoja de estilo
&lt;/h2&gt;

&lt;p&gt;El CSS que escribes no es el único CSS que se aplica a una página web. La cascada tiene en cuenta el origen del CSS, es decir de donde provienen los estilos. Este origen incluye la hoja de estilos interna del navegador, los estilos añadidos por las extensiones del navegador o el sistema operativo, y el CSS de tu autoría (CSS de autor).&lt;/p&gt;

&lt;p&gt;Los estilos del agente de usuario (los estilos por defecto del navegador) tienen menor prioridad, por lo que tus estilos los anulan.&lt;/p&gt;

&lt;p&gt;El orden de especificidad de estos orígenes, de menos específico a más específico, es el siguiente&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Estilos base del agente de usuario:&lt;/strong&gt; Son los estilos que su navegador aplica a los elementos HTML por defecto.&lt;/p&gt;

&lt;p&gt;Los estilos del agente de usuario varían ligeramente de un navegador a otro, pero en general hacen las mismas cosas: a los títulos (&lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; a &lt;code&gt;&amp;lt;h6&amp;gt;&lt;/code&gt;) y a los párrafos (&lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;) se les da un margen superior e inferior, a las listas (&lt;code&gt;&amp;lt;ol&amp;gt;&lt;/code&gt; y &lt;code&gt;&amp;lt;ul&amp;gt;&lt;/code&gt;) se les da un padding a la izquierda, y se establecen los colores de los enlaces y los tamaños de letra por defecto.&lt;/p&gt;

&lt;p&gt;Si has trabajado con CSS durante mucho tiempo, probablemente estés acostumbrado a anular los estilos del agente de usuario. Cuando lo haces, utilizas la parte de origen de la cascada. Tus estilos siempre anularán los estilos del agente de usuario porque los orígenes son diferentes.&lt;/p&gt;

&lt;p&gt;Para evitar inconsistencias entre navegadores se suele utilizar algunas hojas de estilo llamadas "reset" una muy popular se llama &lt;a href="https://necolas.github.io/normalize.css/" rel="noopener noreferrer"&gt;Normalize&lt;/a&gt; aunque también puedes hacer tu propio "reset". Estos estilos establecen una base para las propiedades que se tratan de forma diferente en los distintos navegadores.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Estilos propios del usuario:&lt;/strong&gt; Pueden venir del sistema operativo, como un tamaño de fuente estándar, o una preferencia. También pueden venir de las extensiones del navegador, como una extensión del navegador que permite al usuario escribir su propio CSS personalizado para una página web.&lt;/p&gt;

&lt;p&gt;Un ejemplo, es la maravillosa extensión para Chrome llamada &lt;a href="https://chrome.google.com/webstore/detail/visbug/cdockenadnadldjbbgcallicgledbeoc" rel="noopener noreferrer"&gt;VisBug&lt;/a&gt; que permite editar visualmente elementos de cualquier página web, como cambiar los colores, el texto etc.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5l1jrld1vkhob76jm3h9.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5l1jrld1vkhob76jm3h9.gif" alt="Extensión VisBug"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. CSS de autor:&lt;/strong&gt; La hoja de estilos creada por el autor de la página, es decir, El CSS que escribe el desarrollador o desarrolladora.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. CSS de autor con &lt;code&gt;!important&lt;/code&gt;:&lt;/strong&gt; Cualquier &lt;code&gt;!important&lt;/code&gt; que el desarrollador añada a sus declaraciones.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Estilos propios del usuario con &lt;code&gt;!important&lt;/code&gt;:&lt;/strong&gt; Cualquier &lt;code&gt;!important&lt;/code&gt; que venga del sistema operativo, o del CSS de la extensión del navegador.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Estilos base del agente de usuario con &lt;code&gt;!important&lt;/code&gt;:&lt;/strong&gt; Cualquier &lt;code&gt;!important&lt;/code&gt; que esté definido en el CSS por defecto del navegador.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nota:&lt;/strong&gt; En caso de que la misma propiedad del CSS de usuario y la propiedad del CSS de autor tuvieran &lt;code&gt;!important&lt;/code&gt;, tendra prioridad la del CSS de usuario sobre la del CSS de autor.&lt;/p&gt;

&lt;p&gt;En la siguiente imagen compartida por el sitio &lt;a href="https://web.dev/learn/css/the-cascade/" rel="noopener noreferrer"&gt;Learn CSS&lt;/a&gt; se muestran este orden que va de menor a mayor importancia:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fky46edtb0f2dhqtwvmr3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fky46edtb0f2dhqtwvmr3.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hay otros autores de diversos libros de CSS que solo consideran de manera general tres fuentes responsables de los estilos que ves en una página web y que forman la cascada, las cuales ya vimos anteriormente:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;La hoja de estilos creada por el &lt;em&gt;autor de la página&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Los estilos por defecto del propio &lt;em&gt;navegador&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Los estilos especificados por el &lt;em&gt;usuario&lt;/em&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Considere las siguientes reglas de estilo que estan en distintas hojas de estilo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;h1&amp;gt;Lorem ipsum&amp;lt;/h1&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Estilos del navegador:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;h1 { margin-block-start: 0.83em; }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Bootstrap:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;h1 { margin-block-start: 20px; }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Hoja de estilos del autor:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;h1 { margin-block-start: 2ch; }

@media (max-width: 480px) {
  h1 { margin-block-start: 1ch; }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Estilo personalizado del usuario:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;h1 { margin-block-start: 2rem !important; }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El margen final que tendrá el &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; es de &lt;code&gt;2rem&lt;/code&gt; esto es porque el estilo personalizado del usuario es más especifico ya que contiene la declaración &lt;code&gt;!important&lt;/code&gt; y va a anular cualquier otro estilo.&lt;/p&gt;

&lt;p&gt;El concepto de origen de estilo entrará en juego cuando lleguemos a las transiciones y a las animaciones porque introducen más orígenes en esta lista. &lt;/p&gt;

&lt;h2&gt;
  
  
  ☝️ Importancia
&lt;/h2&gt;

&lt;p&gt;No todas las reglas CSS se calculan de la misma manera ni se les da la misma especificidad.&lt;/p&gt;

&lt;p&gt;El orden de importancia, de menor a mayor, es el siguiente:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Tipo de regla común, que tiene las propiedades &lt;code&gt;font-size&lt;/code&gt;, &lt;code&gt;background&lt;/code&gt; o &lt;code&gt;color&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;La regla que contiene la propiedad &lt;code&gt;animation&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;La regla que contiene &lt;code&gt;!important&lt;/code&gt; (siguiendo el mismo orden que el origen de la hoja de estilos).&lt;/li&gt;
&lt;li&gt;La regla que contiene la propiedad &lt;code&gt;transition&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;El tipo de regla que tiene las propiedades de &lt;code&gt;animation&lt;/code&gt; y &lt;code&gt;transition&lt;/code&gt; tienen mayor importancia que las reglas comunes.&lt;/p&gt;

&lt;p&gt;En el caso de las transiciones, la importancia es mayor que la regla que tiene la palabra clave &lt;code&gt;!important&lt;/code&gt;. Esto se debe a que cuando una animación o transición se activa, su comportamiento esperado es cambiar el estado visual.&lt;/p&gt;

&lt;h2&gt;
  
  
  2 Reglas de Oro
&lt;/h2&gt;

&lt;p&gt;Hay dos reglas generales para trabajar con la cascada que pueden ser útiles:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;No uses IDs en tu selector. Incluso un ID aumenta mucho la especificidad, esto lo vamos a tratar con más detalle en el siguiente articulo.&lt;/li&gt;
&lt;li&gt;Evita el uso de &lt;code&gt;!important&lt;/code&gt;. Esto es aún más difícil de anular que un ID. Es útil saber que es lo que hace &lt;code&gt;!important&lt;/code&gt;. Sin embargo, te recomiendo que no lo utilices.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;En los últimos años han surgido una serie de metodologías de CSS para ayudar a controlar la especificidad del selector, una de las más populares es la metodología &lt;a href="http://getbem.com/" rel="noopener noreferrer"&gt;BEM&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  📋 Conclusión:
&lt;/h2&gt;

&lt;p&gt;☑️ Los navegadores utilizan un algoritmo conocido como Cascada (la C de CSS) para decidir qué reglas se aplican a cada elemento cuando encuentran declaraciones conflictivas (es decir, más de una regla que asigna valores diferentes a la propiedad de un elemento). &lt;/p&gt;

&lt;p&gt;☑️ La cascada significa que los estilos que vienen después sobrescriben a los que estaban antes, es común que la especificidad rompa la cascada.&lt;/p&gt;

&lt;p&gt;☑️ La cascada puede se usada para resolver conflictos cuando se aplican varios estilos a un elemento. Este es uno de sus principales objetivos, la resolución de conflictos.&lt;/p&gt;

&lt;p&gt;☑️ La cascada, la especificidad y la herencia controlan qué estilo CSS se aplica a un elemento.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔎 Recursos
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.w3.org/TR/css-cascade-4/#cascading" rel="noopener noreferrer"&gt;CSS Cascade Level 4 Spec | W3C&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/es/docs/Learn/CSS/Building_blocks/Cascade_and_inheritance" rel="noopener noreferrer"&gt;Cascada y herencia | MDN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://web.dev/learn/css/the-cascade/" rel="noopener noreferrer"&gt;Learn CSS | web dev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://css-tricks.com/the-c-in-css-the-cascade/" rel="noopener noreferrer"&gt;The “C” in CSS: The Cascade | CSS Tricks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wattenberger.com/blog/css-cascade" rel="noopener noreferrer"&gt;The CSS Cascade | Amelia Wattenberger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.bram.us/2022/06/28/the-css-cascade-a-deep-dive-2022-06-09-css-day/" rel="noopener noreferrer"&gt;The CSS Cascade: A Deep Dive (2022.06.09 @ CSS Day) | Bramus&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  📚 Libros de CSS consultados para este tema:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;CSS in Depth&lt;/li&gt;
&lt;li&gt;CSS The Missing Manual&lt;/li&gt;
&lt;li&gt;CSS The Definitive Guide&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gracias por leer🦸🏻‍♀️&lt;br&gt;
Mis redes sociales donde comparto notas de código:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/lupitacode" rel="noopener noreferrer"&gt;▶️Youtube&lt;/a&gt;&lt;br&gt;
&lt;a href="https://instagram.com/lupitacode" rel="noopener noreferrer"&gt;📷Instagram&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/lupitacode" rel="noopener noreferrer"&gt;🐦Twitter&lt;/a&gt;&lt;br&gt;
&lt;a href="https://facebook.com/lupitacode" rel="noopener noreferrer"&gt;🔵Facebook&lt;/a&gt;&lt;br&gt;
&lt;a href="https://codepen.io/lupitacode/" rel="noopener noreferrer"&gt;🔲Codepen&lt;/a&gt;&lt;br&gt;
&lt;a href="https://lupitacode.medium.com/" rel="noopener noreferrer"&gt;✍️Medium&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.tiktok.com/@lupitacode" rel="noopener noreferrer"&gt;🎵Tik Tok&lt;/a&gt;&lt;/p&gt;

</description>
      <category>css</category>
      <category>html</category>
      <category>codenewbie</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Entendiendo el Colapso de Márgenes (Margin Collapsing) 😓</title>
      <dc:creator>Lupita Code 🌄</dc:creator>
      <pubDate>Tue, 15 Jun 2021 21:51:23 +0000</pubDate>
      <link>https://forem.com/lupitacode/entendiendo-el-colapso-de-margenes-margin-collapsing-4oj6</link>
      <guid>https://forem.com/lupitacode/entendiendo-el-colapso-de-margenes-margin-collapsing-4oj6</guid>
      <description>&lt;p&gt;¡Hola gente bonita!👋&lt;/p&gt;

&lt;p&gt;Hay una situación en la que el margen entre un elemento y el de un elemento vecino se fusionarán (o colapsarán) en un espacio unificado. Los márgenes colapsables pueden ser una molestia si no se entiende bien cuándo se producen. El primer paso para tratar con ellos o evitarlos es entender exactamente con qué caso de márgenes colapsables estamos tratando.&lt;/p&gt;

&lt;p&gt;Antes de entender como funciona el colapso de márgenes quiero asegurarme de que todos entendemos cual es el margen en nuestro modelo de caja (box-model).&lt;/p&gt;

&lt;h2&gt;
  
  
  📦 Modelo de caja - Margin
&lt;/h2&gt;

&lt;p&gt;El margen es un espacio vacío que podemos usar para crear espacio entre una caja y otra en nuestro diseño.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5h8byogi4mzsiuxxe7jw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5h8byogi4mzsiuxxe7jw.png" alt="box model"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Si quieres conocer a detalle sobre el modelo de caja, escribi un &lt;a href="https://dev.to/lupitacode/que-es-el-box-model-4mnj"&gt;articulo completo&lt;/a&gt; sobre este tema. &lt;/p&gt;

&lt;h2&gt;
  
  
  📄 user-agent stylesheet
&lt;/h2&gt;

&lt;p&gt;Los navegadores vienen con una sorprendente cantidad de CSS por defecto, que llamamos user-agent stylesheets (hojas de estilo del agente de usuario). Estos estilos son la razón por la que, sin ningún tipo de CSS por nuestra parte, un &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; es más grande que un &lt;code&gt;&amp;lt;h2&amp;gt;&lt;/code&gt;, y por la que el &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; tiene un margen que muchas veces hay que eliminar.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ph767z937bzzuloshb6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ph767z937bzzuloshb6.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Estos estilos son importantes, pero también conducen a uno de los mayores problemas que los desarrolladores se encuentra con los márgenes. Los márgenes no son por defecto 0 en todos los elementos HTML, y esto puede causar todo tipo de problemas extraños que exploraremos en breve.&lt;/p&gt;

&lt;p&gt;Las listas, los párrafos y los encabezados tienen márgenes (entre otros elementos). Aunque a veces sólo son un pequeño inconveniente, el margen por defecto de los párrafos y los encabezados parece ser el que causa más problemas desde el principio.&lt;/p&gt;

&lt;p&gt;Por defecto, los márgenes izquierdo y derecho de un elemento de texto se establecen en 0, pero la mayoria de los elementos vienen con un margen superior (margin-top) y un margen inferior (margin-bottom).&lt;/p&gt;

&lt;p&gt;Esto significa que existe un espacio extra entre los elementos de nuestra página aunque no hayamos establecido explícitamente un margen.&lt;/p&gt;

&lt;h2&gt;
  
  
  ↕️ ¿Qué es un margen colapsado?
&lt;/h2&gt;

&lt;p&gt;Ahora bien, cuando dos elementos de bloque HTML tienen márgenes verticales que se tocan entre sí, estos dos márgenes colapsan en uno o se fusionan entre sí, y aquí dominará el más grande.&lt;/p&gt;

&lt;p&gt;La documentación de la W3C define el colapso de márgenes de la siguiente manera:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"En CSS, los márgenes adyacentes de dos o más bloques (que podrían o no ser hermanos) pueden combinarse para formar un único margen. Cuando los márgenes se combinan de esta manera decimos que colapsan, y el margen combinado resultante se denomina margen colapsado." &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Por lo tanto, los "márgenes adyacentes" son márgenes que están uno al lado del otro, y pueden combinarse para formar un único margen. Pero, ¿esto significa que todos los márgenes adyacentes pueden colapsar? ¡La respuesta es no! sólo es para márgenes verticales (superior e inferior).&lt;/p&gt;

&lt;p&gt;El colapso de margen ocurre en cuatro casos básicos:&lt;/p&gt;

&lt;p&gt;☝️ Hermanos adyacentes.&lt;br&gt;
✌️ Un contenedor padre y su primer elemento hijo.&lt;br&gt;
👌 Un contenedor padre y su último elemento hijo.&lt;br&gt;
✊ Bloques vacíos.&lt;/p&gt;
&lt;h2&gt;
  
  
  ⊟ Caso 1 (Hermanos adyacentes)
&lt;/h2&gt;

&lt;p&gt;Este ejemplo visual es la mejor manera de entenderlo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;div class="box-1"&amp;gt;Esta caja tiene&amp;lt;span&amp;gt;margin-bottom:40px;&amp;lt;/span&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;div class="box-2"&amp;gt;Esta caja tiene &amp;lt;span&amp;gt;margin-top:40px;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.box-1 {
    margin-bottom: 40px; ⬅
    padding: 20px;
    border: solid 5px red;
}
.box-2 {
    margin-top: 40px; ⬅
    padding: 20px;
    border: solid 5px blue;
}

span {
    font-weight: bold;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo426ek9d5ch5arnvl6bc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo426ek9d5ch5arnvl6bc.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cuando los desarrolladores hace algo así, espera que el margen de la primera caja y la segunda sea de 80px (40px + 40px), pero en realidad es de 40px. Los dos márgenes se tocan entre sí, por lo que se combinan o se colapsan el uno con el otro.&lt;/p&gt;

&lt;p&gt;El margen inferior del elemento se colapsa con el margen superior del siguiente elemento.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fspn2hwssarl051h53x2c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fspn2hwssarl051h53x2c.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahora para empujar aún más, vamos a dar a nuestra primera caja un margen inferior (margin-bottom) de 100px:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.box-1 {
    margin-bottom: 100px;
}
.box-2 {
    margin-top: 40px;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwhn9aum2xgm3vihtvize.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwhn9aum2xgm3vihtvize.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como podemos observan en la imagen el margen más grande siempre gana, es decir, como la primera caja tiene un margen de 100px y la otra caja 40px el que termina ganando es el que tenga un valor superior, podemos decir que hay 100px de margen entre la primera y la segunda caja. &lt;/p&gt;

&lt;p&gt;Recuerda que en estos ejemplos los márgenes no se suman. &lt;/p&gt;

&lt;p&gt;El colapso de márgenes solo afecta a los elementos de bloque &lt;code&gt;display: block&lt;/code&gt;, no afecta a otros valores de la propiedad display, por ejemplo a &lt;code&gt;display: flex&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  ➕➖ Colapso de márgenes positivos y negativos
&lt;/h3&gt;

&lt;p&gt;Como se ha descrito, si los dos márgenes adyacentes son positivos, el margen resultante es el mayor de los dos. Por el contrario, si los dos márgenes son negativos, el margen resultante será el margen más pequeño (el más negativo). Si un margen es positivo y el otro es negativo, el margen resultante es la diferencia entre el positivo y el negativo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Dos márgenes positivos: margen resultante igual al margen mayor. Por ejemplo, si los márgenes son 50px y 25px, el margen resultante será 50px.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cuando todos los márgenes son negativos, el tamaño del margen colapsado es el negativo más grande de los dos en lugar del que está más cerca de ser positivo. Por ejemplo, si los márgenes son -50px y -25px, el margen resultante será -50px. Esto se aplica tanto a los elementos adyacentes como a los elementos anidados.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Un margen positivo y otro negativo: el margen resultante es la diferencia entre ambos. Por ejemplo, si los márgenes son 50px y -25px, el margen resultante será de 25px (50 – 25). El tamaño del margen colapsado es la suma del margen positivo más grande y el margen negativo más pequeño (el más negativo).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  👨‍👦 Caso 2 - Un contenedor padre y su primer elemento.
&lt;/h2&gt;

&lt;p&gt;En elementos anidados dentro de otros, el primer elemento descendiente colapsa su margen superior con el margen superior del elemento padre. Las reglas son las mismas que antes. Por ejemplo, si los dos márgenes superiores son positivos, el margen superior resultante será el de mayor valor.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ejemplo 1
&lt;/h3&gt;

&lt;p&gt;Estamos colocando nuestro primer elemento &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; dentro de su contenedor padre.&lt;/p&gt;

&lt;p&gt;El margen hijo está siendo "absorbido" por el margen padre. Los dos se combinan y están sujetos a las mismas reglas de colapso de márgenes que hemos visto hasta ahora (por ejemplo, el más grande gana).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; &amp;lt;div class="parent"&amp;gt;
    &amp;lt;div class="child"&amp;gt;&amp;lt;/div&amp;gt;
 &amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;body {
    margin: 0;
    font-family: arial;
}

.parent {
    margin-top: 50px;
    height: 250px;
    background: grey;
}

.child {
    margin-top: 40px;
    width: 200px;
    height: 200px;
    background: blue;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fytmjc7hsi4ud9glsj5nk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fytmjc7hsi4ud9glsj5nk.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como puedes observar en la imagen los márgenes seguirán colapsados&lt;br&gt;
¿Cómo puede ser esto? Pues resulta que muchos de nosotros tenemos una idea equivocada sobre el funcionamiento de los márgenes.&lt;/p&gt;

&lt;p&gt;El margen sirve para aumentar la distancia entre hermanos. No está pensado para aumentar la distancia entre un hijo y el cuadro delimitador de su padre; para eso está el padding.&lt;/p&gt;

&lt;p&gt;Si añadimos un borde alrededor del elemento padre, los márgenes ya no se colapsan esto sucederia porque el margen del padre ya no estaria en contacto directo con el margen del hijo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Excepciones:&lt;/strong&gt; como se mencionó antes, el colapso ocurre cuando los márgenes verticales aparecen contiguos y se «tocan». El colapso entre un contenedor y su primer elemento NO ocurre si hay algo que separe los dos márgenes; por ejemplo, si el elemento contenedor presenta contenido inline antes del primer elemento hijo, por ejemplo algo de texto, un borde o un padding.&lt;/p&gt;

&lt;p&gt;Puedes pensar en el padding/border como una especie de muro; si se sitúa entre dos márgenes, éstos no pueden colapsar, porque hay un muro en el camino, incluso 1px de padding interferirá con el colapso de los márgenes.&lt;/p&gt;
&lt;h3&gt;
  
  
  Ejemplo 2
&lt;/h3&gt;

&lt;p&gt;En este ejemplo vamos a tener un &lt;code&gt;header&lt;/code&gt; y dentro de el un encabezado &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;header class="header"&amp;gt;
   &amp;lt;h1 class="title"&amp;gt;Lupita code&amp;lt;/h1&amp;gt;
&amp;lt;/header&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;body {
    margin: 0;
    font-family: arial;
    background-color: #ccc;
}

.header {
    height: 50px;
    background-color: steelblue;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F62lx772642wqs7aujqhh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F62lx772642wqs7aujqhh.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como podemos observar en la imagen hay un espacio entre la parte superior del viewport y el &lt;code&gt;header&lt;/code&gt;, ese espacio extra no corresponde al &lt;code&gt;body&lt;/code&gt; ya que si te fijas en el código CSS, el &lt;code&gt;body&lt;/code&gt; tiene un margen con valor de 0. ¿Adivinas de dónde viene? &lt;/p&gt;

&lt;p&gt;Ese margen tampoco es del &lt;code&gt;header&lt;/code&gt; lo que nos lleva a concluir que ese margen le corresponde al encabezado &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt;, y si revisas la herramienta de desarrollo te puedes dar cuenta que el encabezado ya viene con un margen vertical de la hoja de estilo del navegador.&lt;/p&gt;

&lt;p&gt;¿Recuerdas cuando mencioné sobre las hojas de estilo del navegador?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ph767z937bzzuloshb6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ph767z937bzzuloshb6.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;La solución es colocar un &lt;code&gt;margin: 0&lt;/code&gt; al &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; y así ya no se tiene esa separación. El resultado es el siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.title {
    margin: 0;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0vvlopfd2gvbayj84i35.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0vvlopfd2gvbayj84i35.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahora quiero agregar nuevamente un &lt;code&gt;margin-top&lt;/code&gt; de 10px al &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.title {
    margin: 0;
    margin-top: 20px;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk0if3i1a62csqcq41mm1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk0if3i1a62csqcq41mm1.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como puedes observar el &lt;code&gt;header&lt;/code&gt; se movió, y se supone que solo le indicamos que se moviera el &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt;. Para que esto no ocurra, tenemos varias soluciones:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Añadir la declaración &lt;code&gt;overflow: hidden&lt;/code&gt; al &lt;code&gt;header&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Añadir un &lt;code&gt;padding-top&lt;/code&gt; al &lt;code&gt;header&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Añadir un &lt;code&gt;border-top&lt;/code&gt; al header.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Si añadimos padding, border o espacio a los elementos de los ejemplos anteriores, no se aplicará el colapso. En otras palabras, una forma de deshacerse del comportamiento del colapso de márgenes consiste en añadir algún tipo de separación (borde, padding o espacio libre) entre los márgenes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Caso 3 - Un contenedor padre y su último elemento.
&lt;/h2&gt;

&lt;p&gt;De forma análoga a lo que ocurre en el caso anterior con los márgenes superiores, los márgenes inferiores del contenedor y de su último elemento también colapsan en uno solo. Y también como en el caso anterior, el colapso de márgenes no se produce si el borde o el padding del contenedor es mayor a cero.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;div class="parent"&amp;gt;
   &amp;lt;div class="child"&amp;gt;Here is a paragraph&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class="div"&amp;gt;Outside the parent&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;body {
    margin: 0;
    font-family: arial;
}

.parent {
    margin-bottom: 30px;
    background: #49b293;
    height: auto;
}
.child {
    margin-bottom: 50px;
    background: blue;
    height: 100px;
    width: 200px;
}

.div {
    background-color: red;
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh2y30aa5kcmbfntbwljc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh2y30aa5kcmbfntbwljc.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Caso 4 - Bloques vacíos
&lt;/h2&gt;

&lt;p&gt;Los márgenes verticales de un bloque vacío (sin height ni padding ni contenido) también colapsan entre sí. Por ejemplo, si tenemos un bloque vacío con un margen top de 40px y un margen bottom de 20px, el elemento ocupará una zona de 40px de altura al colapsar sus propios márgenes verticales:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;div class="box"&amp;gt;Lorem, ipsum.&amp;lt;/div&amp;gt;
&amp;lt;div class="empty"&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div class="box"&amp;gt;Lorem, ipsum.&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;body {
    margin: 0;
    font-family: arial;
}

.box {
    margin: 0;
    height: 40px;
    padding: 10px;
    border: 2px solid;
    background: khaki;
}
.empty {
    margin-top: 40px;
    margin-bottom: 20px;
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9q0pjqki9yk40ouimycc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9q0pjqki9yk40ouimycc.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Excepciones
&lt;/h2&gt;

&lt;p&gt;Como en todo, hay algunas excepciones a tener en cuenta cuando los márgenes no se colapsan.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Flexbox, Grid y otros elementos que no son de nivel de bloque.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;El colapso de márgenes no se aplican a los flex items, grid items, a los elementos de posición absoluta ni a otros elementos que no sean de nivel de bloque.&lt;/p&gt;

&lt;h2&gt;
  
  
  📋 Conclusión
&lt;/h2&gt;

&lt;p&gt;☑️ Un margen colapsado es lo que ocurre cuando se combinan dos elementos a nivel de bloque con márgenes verticales coincidentes. Cuando esto sucede, el mayor de los dos márgenes se asume como el único margen colapsado.&lt;br&gt;
☑️ No se aplica a márgenes horizontales.&lt;br&gt;
☑️ Sólo ocurre con los elementos a nivel de bloque es decir, &lt;code&gt;display: block&lt;/code&gt; - esto no incluye los elementos inline-block.&lt;br&gt;
☑️ Hay 4 casos en los que se genera un colapso de márgenes. &lt;br&gt;
☑️ La especificación CSS es enorme. No intentes saberlo todo. Aprende los conceptos de alto nivel y las reglas comunes, busca cosas cuando las necesites y tómatelo con calma.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔎Recursos:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://developer.mozilla.org/es/docs/Web/CSS/CSS_Box_Model/Mastering_margin_collapsing" rel="noopener noreferrer"&gt;Entendiendo el colapso de margen | MDN&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://webdesign.tutsplus.com/es/tutorials/css-basics-understanding-collapsing-margins--cms-34272" rel="noopener noreferrer"&gt;Fundamentos de CSS: Comprensión del colapso de márgenes&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.joshwcomeau.com/css/rules-of-margin-collapse/" rel="noopener noreferrer"&gt;The Rules of Margin Collapse | Josh Comeau&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://bitsofco.de/collapsible-margins/" rel="noopener noreferrer"&gt;What's the Deal with Collapsible Margins?&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://medium.com/@joseph0crick/margin-collapse-in-css-what-why-and-how-328c10e37ca0" rel="noopener noreferrer"&gt;Margin Collapse in CSS: What, Why, and How&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://cybmeta.com/colapso-de-margenes-en-css" rel="noopener noreferrer"&gt;El caso del colapso de márgenes en CSS&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.quirksmode.org/blog/archives/2020/02/negative_margin.html" rel="noopener noreferrer"&gt;Negative margins in CSS&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gracias por leer🦸🏻‍♀️&lt;br&gt;
Mis redes sociales donde comparto notas de código:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/lupitacode" rel="noopener noreferrer"&gt;▶️Youtube&lt;/a&gt;&lt;br&gt;
&lt;a href="https://instagram.com/lupitacode" rel="noopener noreferrer"&gt;📷Instagram&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/lupitacode" rel="noopener noreferrer"&gt;🐦Twitter&lt;/a&gt;&lt;br&gt;
&lt;a href="https://facebook.com/lupitacode" rel="noopener noreferrer"&gt;🔵Facebook&lt;/a&gt;&lt;br&gt;
&lt;a href="https://codepen.io/lupitacode/" rel="noopener noreferrer"&gt;🔲Codepen&lt;/a&gt;&lt;br&gt;
&lt;a href="https://lupitacode.medium.com/" rel="noopener noreferrer"&gt;✍️Medium&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.tiktok.com/@lupitacode" rel="noopener noreferrer"&gt;🎵Tik Tok&lt;/a&gt;&lt;/p&gt;

</description>
      <category>css</category>
      <category>spanish</category>
      <category>latam</category>
    </item>
    <item>
      <title>¿Que es el Box Model?🤔</title>
      <dc:creator>Lupita Code 🌄</dc:creator>
      <pubDate>Mon, 07 Jun 2021 01:44:40 +0000</pubDate>
      <link>https://forem.com/lupitacode/que-es-el-box-model-4mnj</link>
      <guid>https://forem.com/lupitacode/que-es-el-box-model-4mnj</guid>
      <description>&lt;p&gt;¡Hola gente bonita!👋&lt;/p&gt;

&lt;p&gt;El nombre 'box-model' (modelo de caja) se llama así porque, en los navegadores, todo se construye a partir de cajas.&lt;/p&gt;

&lt;p&gt;Entonces, lo primero que debemos de entender, es que cada elemento que definimos en un documento HTML se mostrará en el navegador como una caja rectangular esta es la forma en que se representan todos los elementos, no existen elementos triangulares, redondos, poligonales etc. Todos los elementos en HTML por defecto son rectangulares ya que internamente el navegador dibuja un rectángulo. &lt;/p&gt;

&lt;p&gt;⚠️ &lt;strong&gt;Las únicas excepciones son las listas y las tablas, que generan más de una caja, y los elementos con &lt;code&gt;display: none&lt;/code&gt; o &lt;code&gt;display: contents&lt;/code&gt;, que no crean ninguna caja.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Aunque usted visualice en un sitio web algún elemento diseñado en CSS que utiliza &lt;code&gt;border-radius&lt;/code&gt; para parecer un círculo, ese elemento seguirá siendo rectangular:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz2el3y203tpq4688c50j.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz2el3y203tpq4688c50j.jpg" alt="Image description" width="433" height="259"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esto es porque como he dicho anteriormente, el navegador renderiza cada elemento de la página web como un elemento rectangular y con CSS nosotros definimos las propiedades como el tamaño, el color, los estilos, el margen y mucho más de estos elementos rectangulares.&lt;/p&gt;

&lt;p&gt;Esto puedes comprobarlo con ayuda de la propiedad &lt;code&gt;outline&lt;/code&gt;, podemos ver todos los elementos de la pagina de inicio de Google de forma rectangular y esto lo puedes hacer con cualquier otra página web.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;outline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="no"&gt;red&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhyykfbzrr25abrxbmmio.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhyykfbzrr25abrxbmmio.png" alt="Página de inicio de Google." width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El navegador Microsoft Edge tiene una herramienta llamada 3D view que muestra todas las cajas contenedoras de forma visual en 3D:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyr3aqheuwodxix5qq32f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyr3aqheuwodxix5qq32f.png" alt="3D view Microsoft Edge" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cada elemento HTML en una página web es una caja, pero hay dos tipos básicos de cajas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Block boxes.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Inline boxes.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Estos dos tipos de cajas, existieron desde el principio de la web:&lt;/p&gt;
&lt;h3&gt;
  
  
  📦 Cajas de bloque (Block boxes)
&lt;/h3&gt;

&lt;p&gt;Las cajas de bloque, por defecto, ocupan todo el espacio a lo ancho del contenedor.&lt;br&gt;
El elemento HTML común para una caja de bloque es el elemento&lt;br&gt;
&lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  📦 Cajas en línea (Inline boxes)
&lt;/h3&gt;

&lt;p&gt;Las cajas en línea, por defecto, toman el espacio según el contenido envuelto. El elemento HTML más común para una caja en línea es el elemento &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;El comportamiento de todas las cajas proviene de la propiedad display de CSS. Si quieres aprender más acerca de esta propiedad te invito a leer mi &lt;a href="https://codigofacilito.com/articulos/la-propiedad-display-en-css" rel="noopener noreferrer"&gt;articulo&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  📦 Las áreas del modelo de caja
&lt;/h2&gt;

&lt;p&gt;Cada elemento HTML es una caja que tiene 4 lados y se compone de cuatro áreas:&lt;/p&gt;
&lt;h4&gt;
  
  
  Internos:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;content&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;padding&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;border&lt;/code&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  Externos
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;margin&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Estas áreas se apilan para formar el modelo de caja o box model.&lt;br&gt;
Cada elemento HTML es una caja que podemos controlar en el espacio exterior con la propiedad margin, después, podemos darle un borde y con la propiedad padding, también podemos proporcionar los espacios interiores entre el contenido y el borde dentro de la caja.&lt;/p&gt;
&lt;h2&gt;
  
  
  🛠️ Herramienta de Desarrollo (DevTools)
&lt;/h2&gt;

&lt;p&gt;Si vas a inspeccionar cada elemento HTML, En la herramienta de desarrollador de cada navegador hay una pestaña llamada "Estilos" y lo que hace es mostrar el modelo de caja.&lt;/p&gt;

&lt;p&gt;ℹ️ Los colores pueden ser distintos dependiendo del navegador. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;El content o contenido es representado por el color azul.&lt;/li&gt;
&lt;li&gt;El padding es representado por el color verde claro.&lt;/li&gt;
&lt;li&gt;El border es representado por un color amarillo.&lt;/li&gt;
&lt;li&gt;El margen es representado por un color naranja.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5h8byogi4mzsiuxxe7jw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5h8byogi4mzsiuxxe7jw.png" alt="box model" width="468" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Si te posicionas en cada elemento HTML de la página web y lo seleccionas, estos elementos se pintaran de los colores que he mencionado y esto nos ayuda a detectar cuanto de padding o margin tiene cada elemento.  &lt;/p&gt;
&lt;h2&gt;
  
  
  🎦 Content
&lt;/h2&gt;

&lt;p&gt;El contenido de la caja, donde aparecen texto, imágenes, etc.&lt;/p&gt;

&lt;p&gt;El área del content (como su nombre lo dice) contiene el “contenido” central a mostrar, es decir, un texto, una imagen, un video, etc. El contenido siempre es lo que queremos mostrarle al usuario. Esta área en muchas ocasiones tiene un color o imagen de fondo para hacerla más atractiva.&lt;/p&gt;

&lt;p&gt;Como podemos observar en la imagen, el contenido es el área central de todo el elemento, de tal forma, que el siguiente elemento que lo rodea es el padding. El tamaño de esta área se puede modificar con las propiedades &lt;code&gt;height&lt;/code&gt; , &lt;code&gt;width&lt;/code&gt; , &lt;code&gt;max-height&lt;/code&gt; , &lt;code&gt;max-width&lt;/code&gt; , &lt;code&gt;min-height&lt;/code&gt; , &lt;code&gt;min-width&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy0bhb4lmev3j36qodjhq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy0bhb4lmev3j36qodjhq.png" alt="Alt Text" width="331" height="330"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cuando se establece una anchura o una altura en un elemento, esto sólo se aplica al área de contenido (content) de la caja, no a la caja completa. El padding y border se añaden a la anchura y la altura para obtener el tamaño total de la caja, si quieres profundizar mas en este tema, te invito a leer mi articulo de Box Sizing:&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/lupitacode" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F617393%2F67c4df49-d9b4-4361-a19f-a1a31486dec7.png" alt="lupitacode"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/lupitacode/que-es-el-box-sizing-en-css-2pi9" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;¿Qué es el Box Sizing en CSS? 🤔&lt;/h2&gt;
      &lt;h3&gt;Lupita Code 🌄 ・ Apr 19 '21&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#css&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#spanish&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;



&lt;h2&gt;
  
  
  🔲 Padding
&lt;/h2&gt;

&lt;p&gt;Es el área alrededor del contenido. El &lt;code&gt;padding&lt;/code&gt; es transparente.&lt;/p&gt;

&lt;p&gt;El padding es una separación o espacio interior que existe entre el contenido y el borde de la caja, el cual se utiliza para dar una apariencia estética más atractiva y que el contenido no este pegado al borde.&lt;/p&gt;

&lt;p&gt;Cabe mencionar que el padding sigue siendo parte de la caja visible, por lo que, si tenemos una imagen o color de fondo, este se extenderá a través del padding. &lt;/p&gt;

&lt;p&gt;Puedes usar el mismo valor en toda la caja usando su shorthand, por ejemplo, &lt;code&gt;padding: 20px&lt;/code&gt; o puedes darle &lt;code&gt;padding&lt;/code&gt; sólo a un lado de la caja, por ejemplo, &lt;code&gt;padding-right: 10px&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Es importante mencionar que NO se permiten valores negativos.&lt;/p&gt;

&lt;p&gt;El shorthand &lt;code&gt;padding&lt;/code&gt; permite dar un valor diferente a cada lado, sin necesidad de escribirlos por separado. Por ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;padding-top&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;    &lt;span class="err"&gt;10&lt;/span&gt;&lt;span class="nt"&gt;px&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; 
&lt;span class="nt"&gt;padding-right&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;  &lt;span class="err"&gt;20&lt;/span&gt;&lt;span class="nt"&gt;px&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; 
&lt;span class="nt"&gt;padding-bottom&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="err"&gt;25&lt;/span&gt;&lt;span class="nt"&gt;px&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; 
&lt;span class="nt"&gt;padding-left&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;   &lt;span class="err"&gt;5&lt;/span&gt;&lt;span class="nt"&gt;px&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;  
&lt;span class="c"&gt;/* Los 4 valores son igual a esto: */&lt;/span&gt;
&lt;span class="nt"&gt;padding&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="err"&gt;10&lt;/span&gt;&lt;span class="nt"&gt;px&lt;/span&gt; &lt;span class="err"&gt;20&lt;/span&gt;&lt;span class="nt"&gt;px&lt;/span&gt; &lt;span class="err"&gt;25&lt;/span&gt;&lt;span class="nt"&gt;px&lt;/span&gt; &lt;span class="err"&gt;5&lt;/span&gt;&lt;span class="nt"&gt;px&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="nt"&gt;padding&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="err"&gt;10&lt;/span&gt;&lt;span class="nt"&gt;px&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;           &lt;span class="c"&gt;/* Aplica a los cuatro lados */&lt;/span&gt;
&lt;span class="nt"&gt;padding&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="err"&gt;10&lt;/span&gt;&lt;span class="nt"&gt;px&lt;/span&gt; &lt;span class="err"&gt;20&lt;/span&gt;&lt;span class="nt"&gt;px&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;      &lt;span class="c"&gt;/* vertical | horizontal */&lt;/span&gt;
&lt;span class="nt"&gt;padding&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="err"&gt;10&lt;/span&gt;&lt;span class="nt"&gt;px&lt;/span&gt; &lt;span class="err"&gt;20&lt;/span&gt;&lt;span class="nt"&gt;px&lt;/span&gt; &lt;span class="err"&gt;30&lt;/span&gt;&lt;span class="nt"&gt;px&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="c"&gt;/* top | horizontal | bottom */&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;🕒 Un truco para recordar los valores de la propiedad padding (top, right, bottom, left) es pensar en el sentido de las manecillas del reloj, empezando desde las 12hrs:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frzncs2ziipydvlnq9jbi.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frzncs2ziipydvlnq9jbi.jpg" alt="Image description" width="433" height="259"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  ⬜ Border
&lt;/h2&gt;

&lt;p&gt;El borde es la línea que rodea la caja, es como la frontera que rodea al elemento, esta se utiliza para darle una apariencia estética a la caja, pues nos permite dibujar una línea de algún color, la línea puede tener los siguientes estilos:&lt;/p&gt;


&lt;div class="instagram-position"&gt;
  &lt;iframe id="instagram-liquid-tag" src="https://www.instagram.com/p/DAL9HubvoaS/embed/captioned/"&gt;
  &lt;/iframe&gt;
  
&lt;/div&gt;



&lt;p&gt;Las tres propiedades básicas para crear bordes son:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;border-style&lt;/code&gt;: sus valores son: [ none | hidden | solid | dotted | dashed | double | groove | ridge |
inset | outset ]&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;border-width&lt;/code&gt;: indica al navegador el tamaño del borde, normalmente, se utiliza el valor en píxeles para esta propiedad, por ejemplo, &lt;code&gt;border-width: 5px&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;border-color&lt;/code&gt;: por defecto, el valor utiliza el currentColor del texto. Sin embargo, preferimos definirlo aunque no sea necesario. Por ejemplo, &lt;code&gt;border-color: red&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La mayoría de los desarrolladores web no utilizan estas tres propiedades por separado. En su lugar, existe el shorthand: &lt;code&gt;border&lt;/code&gt;. Con este shorthand podemos escribir sólo &lt;code&gt;border: solid 5px red&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;También podemos controlar y dar un estilo diferente a cada parte de los bordes, por ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;border-width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="err"&gt;5&lt;/span&gt;&lt;span class="nt"&gt;px&lt;/span&gt; &lt;span class="err"&gt;10&lt;/span&gt;&lt;span class="nt"&gt;px&lt;/span&gt; &lt;span class="err"&gt;15&lt;/span&gt;&lt;span class="nt"&gt;px&lt;/span&gt; &lt;span class="err"&gt;20&lt;/span&gt;&lt;span class="nt"&gt;px&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; 
&lt;span class="nt"&gt;border-style&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;solid&lt;/span&gt; &lt;span class="nt"&gt;dashed&lt;/span&gt; &lt;span class="nt"&gt;dotted&lt;/span&gt; &lt;span class="nt"&gt;double&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; 
&lt;span class="nt"&gt;border-color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;red&lt;/span&gt; &lt;span class="nt"&gt;green&lt;/span&gt; &lt;span class="nt"&gt;blue&lt;/span&gt; &lt;span class="nt"&gt;brown&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy2mvxf809ztexwwnmrm2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy2mvxf809ztexwwnmrm2.png" alt="Alt Text" width="499" height="158"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  🔳 Margin
&lt;/h2&gt;

&lt;p&gt;Es la separación entre una caja y las cajas adyacentes.&lt;/p&gt;

&lt;p&gt;El margen es la última área del Box Model y se puede ver como una separación invisible o transparente que ayuda a separar un elemento de otro.  Cuando definimos un color o imagen de fondo, este no se propaga a esta sección.&lt;/p&gt;

&lt;p&gt;Los márgenes siempre quedan fuera del modelo de caja, por lo que pueden utilizarse para crear espacio entre los elementos.&lt;/p&gt;

&lt;p&gt;Recuerda que los valores pueden ser positivos o negativos.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;margin-top&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;    &lt;span class="err"&gt;10&lt;/span&gt;&lt;span class="nt"&gt;px&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; 
&lt;span class="nt"&gt;margin-right&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;  &lt;span class="err"&gt;20&lt;/span&gt;&lt;span class="nt"&gt;px&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; 
&lt;span class="nt"&gt;margin-bottom&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="err"&gt;25&lt;/span&gt;&lt;span class="nt"&gt;px&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; 
&lt;span class="nt"&gt;margin-left&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;   &lt;span class="err"&gt;5&lt;/span&gt;&lt;span class="nt"&gt;px&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;  
&lt;span class="c"&gt;/* Los 4 valores son igual a esto: */&lt;/span&gt;
&lt;span class="nt"&gt;margin&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="err"&gt;10&lt;/span&gt;&lt;span class="nt"&gt;px&lt;/span&gt; &lt;span class="err"&gt;20&lt;/span&gt;&lt;span class="nt"&gt;px&lt;/span&gt; &lt;span class="err"&gt;25&lt;/span&gt;&lt;span class="nt"&gt;px&lt;/span&gt; &lt;span class="err"&gt;5&lt;/span&gt;&lt;span class="nt"&gt;px&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="nt"&gt;margin&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="err"&gt;10&lt;/span&gt;&lt;span class="nt"&gt;px&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;           &lt;span class="c"&gt;/* Aplica a los cuatro lados */&lt;/span&gt;
&lt;span class="nt"&gt;margin&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="err"&gt;10&lt;/span&gt;&lt;span class="nt"&gt;px&lt;/span&gt; &lt;span class="err"&gt;20&lt;/span&gt;&lt;span class="nt"&gt;px&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;      &lt;span class="c"&gt;/* vertical | horizontal */&lt;/span&gt;
&lt;span class="nt"&gt;margin&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="err"&gt;10&lt;/span&gt;&lt;span class="nt"&gt;px&lt;/span&gt; &lt;span class="err"&gt;20&lt;/span&gt;&lt;span class="nt"&gt;px&lt;/span&gt; &lt;span class="err"&gt;30&lt;/span&gt;&lt;span class="nt"&gt;px&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="c"&gt;/* top | horizontal | bottom */&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Es importante mencionar que varios elementos HTML tiene un margen que son asignados por la hojas de estilo del navegador. &lt;/p&gt;
&lt;h2&gt;
  
  
  Margin vs Padding
&lt;/h2&gt;

&lt;p&gt;Aunque estas dos propiedades son similares, a veces se utilizan erróneamente de forma intercambiable, aunque son muy diferentes. Entender sus diferencias puede ser beneficioso para los desarrolladores web.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcm8npdmxa0r15d74klzl.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcm8npdmxa0r15d74klzl.jpeg" alt="Diferencias entre la propiedad margin y padding" width="800" height="290"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El padding y el margin son dos elementos importantes en el diseño web que añaden espacio extra en diferentes lugares. Pero, ¿Dónde y cuándo se debe utilizar uno en vez del otro?&lt;/p&gt;

&lt;p&gt;Para el &lt;code&gt;padding&lt;/code&gt;, puedes utilizarlo en las siguientes situaciones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cuando no quieras que el contenido toque los bordes del contenedor.&lt;/li&gt;
&lt;li&gt;Cuando quiera aumentar el tamaño de un bloque de contenido sin que el propio contenido sea más grande.&lt;/li&gt;
&lt;li&gt;Cuando se necesita espacio entre un elemento interior y la caja padre.&lt;/li&gt;
&lt;li&gt;Cuando quieras que el background del elemento se muestre en el espacio generado. por ejemplo, si tienes dos divs, quieres que ambos divs (con diferente color de fondo) esten juntos, pero no quieres que sus textos se toquen.&lt;/li&gt;
&lt;li&gt;Cuando quieras aumentar el tamaño del elemento. Ejemplo: si quieres aumentar el tamaño de un botón.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para el &lt;code&gt;margin&lt;/code&gt;, puedes utilizarlo en las siguientes situaciones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cuando necesite espacio alrededor de los elementos, como separar una imagen y la descripción de la misma.&lt;/li&gt;
&lt;li&gt;Utilizarías el margen para establecer la distancia entre elementos cercanos.&lt;/li&gt;
&lt;li&gt;Cuando quiera centrar un elemento horizontalmente.&lt;/li&gt;
&lt;li&gt;Cuando quieras mover un elemento hacia arriba, hacia abajo o de lado a lado.&lt;/li&gt;
&lt;li&gt;Cuando quieras sobreponer elementos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Nota Adicional:&lt;/strong&gt; Muchos de nosotros tenemos una idea equivocada sobre el funcionamiento de los márgenes.&lt;/p&gt;

&lt;p&gt;Si deseas agregar espacio al exterior de un elemento, usas la propiedad margin. El margen es como agregar un cojín alrededor del elemento.&lt;/p&gt;

&lt;p&gt;El margen sirve para aumentar la distancia entre hermanos. No esta pensado para aumentar la distancia entre un elemento hijo y su contenedor padre, para eso esta el &lt;code&gt;padding&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;El margen siempre tratara de aumentar la distancia entre hermanos, incluso si eso significa pasar el margen al elemento padre.&lt;/p&gt;

&lt;p&gt;Hay una situación en la que el margen entre un elemento y el de un elemento vecino se fusionarán (o colapsarán) en un espacio unificado. Los márgenes colapsables pueden ser una molestia si no se entiende bien cuándo se producen, te recomiendo leer mi siguiente articulo:&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/lupitacode" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F617393%2F67c4df49-d9b4-4361-a19f-a1a31486dec7.png" alt="lupitacode"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/lupitacode/entendiendo-el-colapso-de-margenes-margin-collapsing-4oj6" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Entendiendo el Colapso de Márgenes (Margin Collapsing) 😓&lt;/h2&gt;
      &lt;h3&gt;Lupita Code 🌄 ・ Jun 15 '21&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#css&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#spanish&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#latam&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;



&lt;h2&gt;
  
  
  ⬜ Outline
&lt;/h2&gt;

&lt;p&gt;La propiedad &lt;code&gt;outline&lt;/code&gt; (contorno) es la línea que rodea a la caja entre el &lt;code&gt;border&lt;/code&gt; y el &lt;code&gt;margin&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa0gbfl3s2nwcl7joob6d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa0gbfl3s2nwcl7joob6d.png" alt="An illustration of the CSS box model, with the relevant parts described following this image" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se utiliza como su nombre lo dice para dibujar un contorno alrededor de un elemento. Un contorno es una línea que se dibuja fuera de los bordes de un elemento, comúnmente se suele confundir la propiedad outline con border, la diferencia entre ambos es que la &lt;strong&gt;propiedad outline no afecta a las dimensiones del elemento ya que NO forma parte del modelo de caja.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;La propiedad outline NO solo se usa como decoración grafica, su uso principal es por motivos de &lt;strong&gt;ACCESIBILIDAD&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;La propiedad outline se usa principalmente en elementos interactivos como enlaces, botones e inputs&lt;/strong&gt; que tengan la pseudoclase &lt;code&gt;:focus&lt;/code&gt;.  o bien en el elemento &lt;code&gt;&amp;lt;form&amp;gt;&lt;/code&gt; que tenga la pseudoclase &lt;a href="https://css-tricks.com/almanac/selectors/f/focus-within/" rel="noopener noreferrer"&gt;&lt;code&gt;:focus-within&lt;/code&gt;&lt;/a&gt;. Aqui una lista mas completa de donde usar outline:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Links&lt;/li&gt;
&lt;li&gt;Buttons&lt;/li&gt;
&lt;li&gt;Form Fields / Controls (text fields, select boxes, radio buttons, etc.)&lt;/li&gt;
&lt;li&gt;Menu items&lt;/li&gt;
&lt;li&gt;Things triggered by hover, like tooltips&lt;/li&gt;
&lt;li&gt;Widgets, like a calendar picker&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La pseudoclase &lt;code&gt;:focus&lt;/code&gt; hace que estos elementos se activen cuando el usuario hace click sobre ellos o cuando presiona la tecla "TAB" del teclado y  se coloreen con una ligera aura que los rodea. Esto da la posibilidad al usuario de conocer en todo momento el elemento que recibe el foco y de pasar por los diversos elementos sin usar el mouse. &lt;/p&gt;

&lt;p&gt;Quizás pensaras que todos usamos el mouse para navegador por los sitios web, pero hay muchos usuarios que usan el teclado como su principal medio de usar la web, por ejemplo: usuarios que usan lectores de pantalla, usuarios con movilidad reducida, usuarios avanzados (desarrollador). Por esta razón no debes eliminar la propiedad outline de la pseudoclase &lt;code&gt;:focus&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;outline&lt;/code&gt; es una shorthand para las siguientes propiedades:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;outline-width&lt;/code&gt; acepta los mismos valores que &lt;code&gt;border-width&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;outline-style&lt;/code&gt; acepta los mismos valores que &lt;code&gt;border-style&lt;/code&gt;, excepto &lt;code&gt;hidden&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;outline-color&lt;/code&gt; acepta todos los colores y las diversas formas de declararlos. También la palabra clave &lt;code&gt;invert&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;outline también cuenta con una propiedad asociada llamada  &lt;code&gt;outline-offset&lt;/code&gt; que es usada para aumentar o disminuir el espacio que hay entre el outline y el border del elemento. &lt;/p&gt;

&lt;p&gt;🆕 Update de la propiedad outline&lt;/p&gt;

&lt;p&gt;Ahora la propiedad outline se adapta automáticamente al radio del elemento. Anteriormente se dibujaba por defecto un contorno cuadrado. Funciona en las ultimas versiones de los principales navegadores excepto en Safari.&lt;/p&gt;


&lt;div class="instagram-position"&gt;
  &lt;iframe id="instagram-liquid-tag" src="https://www.instagram.com/p/CVeIF3rAhRG/embed/captioned/"&gt;
  &lt;/iframe&gt;
  
&lt;/div&gt;


&lt;p&gt;Al principio de este articulo te mostré el siguiente snippet de codigo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;outline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="no"&gt;red&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este es un pequeño hack que se usa para debuggear en CSS, no se usa la propiedad &lt;code&gt;border&lt;/code&gt; ya que este afectaría a las dimensiones de los elementos.&lt;/p&gt;

&lt;h2&gt;
  
  
  👫 Aportaciones de la comunidad
&lt;/h2&gt;

&lt;p&gt;Kelly Vaughn publicó en su cuenta de twitter una foto donde explica el modelo de caja de una forma divertida 😂.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1159263383058862081-98" src="https://platform.twitter.com/embed/Tweet.html?id=1159263383058862081"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1159263383058862081-98');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1159263383058862081&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;Este hermoso demo interactivo para enseñar el modelo de caja en CSS por Caroline Artz es increíble, esta desarrollado en Angular:&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/carolineartz/embed/ogVXZj?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
.&lt;/p&gt;

&lt;p&gt;Adam Argyle tambien comparte un demo del modelo de caja en 3D:&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/argyleink/embed/BaLedvd?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  📋 Conclusión:
&lt;/h2&gt;

&lt;p&gt;☑️ Cada elemento HTML en una pagina web es una caja rectangular.&lt;br&gt;
☑️ El contenido de la caja es donde aparecen texto, imágenes, etc.&lt;br&gt;
☑️ El padding es el área alrededor del contenido.&lt;br&gt;
☑️ El borde es una línea que rodea el padding y el content.&lt;br&gt;
☑️ El margin es la separación entre una caja y las cajas adyacentes.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔎Recursos:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://web.dev/learn/css/box-model/" rel="noopener noreferrer"&gt;Box Model | Web dev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/cssclass-com/understanding-the-css-box-model-97e4228670d6" rel="noopener noreferrer"&gt;Understanding the CSS Box-Model | Elad Shechter
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.oscarblancarteblog.com/2017/10/27/introduccion-al-box-model-css/" rel="noopener noreferrer"&gt;Introducción al Box Model de CSS | Oscar Blancarte&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cssbattle.dev/blog/learn-box-model" rel="noopener noreferrer"&gt;Learn CSS intuitively - Box Model | Kushagra Gour&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/es/docs/Tools/3D_View" rel="noopener noreferrer"&gt;3D view | Firefox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.logrocket.com/css-margin-vs-padding/" rel="noopener noreferrer"&gt;CSS margin vs. padding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ishadeed.com/article/spacing-in-css/" rel="noopener noreferrer"&gt;Spacing in CSS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://moderncss.dev/the-3-css-methods-for-adding-element-borders/" rel="noopener noreferrer"&gt;The 3 CSS Methods for Adding Element Borders&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://moderncss.dev/modern-css-upgrades-to-improve-accessibility/#focus-visibility" rel="noopener noreferrer"&gt;Modern CSS Upgrades To Improve Accessibility&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://moderncss.dev/custom-css-styles-for-form-inputs-and-textareas/" rel="noopener noreferrer"&gt;Custom CSS Styles for Form Inputs and Textareas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://moderncss.dev/css-button-styling-guide/" rel="noopener noreferrer"&gt;CSS Button Styling Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gracias por leer🦸🏻‍♀️&lt;br&gt;
Mis redes sociales donde comparto notas de código:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/lupitacode" rel="noopener noreferrer"&gt;▶️Youtube&lt;/a&gt;&lt;br&gt;
&lt;a href="https://instagram.com/lupitacode" rel="noopener noreferrer"&gt;📷Instagram&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/lupitacode" rel="noopener noreferrer"&gt;🐦Twitter&lt;/a&gt;&lt;br&gt;
&lt;a href="https://facebook.com/lupitacode" rel="noopener noreferrer"&gt;🔵Facebook&lt;/a&gt;&lt;br&gt;
&lt;a href="https://codepen.io/lupitacode/" rel="noopener noreferrer"&gt;🔲Codepen&lt;/a&gt;&lt;br&gt;
&lt;a href="https://lupitacode.medium.com/" rel="noopener noreferrer"&gt;✍️Medium&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.tiktok.com/@lupitacode" rel="noopener noreferrer"&gt;🎵Tik Tok&lt;/a&gt;&lt;/p&gt;

</description>
      <category>css</category>
      <category>spanish</category>
      <category>latam</category>
    </item>
    <item>
      <title>La propiedad display en CSS</title>
      <dc:creator>Lupita Code 🌄</dc:creator>
      <pubDate>Tue, 01 Jun 2021 00:56:13 +0000</pubDate>
      <link>https://forem.com/lupitacode/la-propiedad-display-en-css-1b6a</link>
      <guid>https://forem.com/lupitacode/la-propiedad-display-en-css-1b6a</guid>
      <description>&lt;p&gt;¡Hola gente bonita!👋&lt;/p&gt;

&lt;p&gt;En este articulo voy a explicar sobre la propiedad &lt;code&gt;display&lt;/code&gt; y los diferentes valores que esta contiene, antes de empezar es necesario comprender algunos conceptos, como el modelo de caja (box-model) o incluso el &lt;a href="https://dev.to/lupitacode/que-es-el-box-sizing-en-css-2pi9"&gt;box-sizing&lt;/a&gt; ya que considero que estos temas (tal como en la serie Dark 📺) están conectados 😂. Vamos a empezar a repasar algunas cosas importantes.&lt;/p&gt;

&lt;p&gt;Es importante que entiendas que cada elemento HTML en una pagina web es una caja rectangular, esta es la forma en que se representan todos los elementos, no existen elementos triangulares, redondos, poligonales etc. Todos los elementos en HTML por defecto son rectangulares ya que internamente el navegador dibuja un rectángulo.&lt;/p&gt;

&lt;p&gt;Aunque usted visualice en un sitio web algún elemento redondo diseñado en CSS, ese elemento seguirá siendo rectangular y esto es porque como he dicho anteriormente cada elemento del diseño web es una caja, el navegador renderiza cada elemento de la página web como un elemento rectangular y con CSS nosotros definimos las propiedades como el tamaño, el color, los estilos, el margen y mucho más de estos elementos rectangulares.&lt;/p&gt;

&lt;p&gt;Esto puedes comprobarlo con el siguiente ejemplo, con ayuda de la propiedad &lt;code&gt;outline&lt;/code&gt;, podemos ver todos los elementos de la pagina de inicio de Google de forma rectangular y esto lo puedes hacer con cualquier otro sitio web.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

* {
    outline: 1px solid red;
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhyykfbzrr25abrxbmmio.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhyykfbzrr25abrxbmmio.png" alt="Página de inicio de Google."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Entonces cada elemento HTML esta formado por 4 áreas: &lt;code&gt;content&lt;/code&gt;, &lt;code&gt;padding&lt;/code&gt;, &lt;code&gt;border&lt;/code&gt; y &lt;code&gt;margin&lt;/code&gt;. Estas áreas se apilan para formar el modelo de caja (box model).&lt;/p&gt;

&lt;p&gt;Como ya lo mencionamos anteriormente cada elemento HTML es una caja, pero hay dos tipos básicos de cajas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Block boxes.&lt;/li&gt;
&lt;li&gt;Inline boxes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Estos dos tipos de cajas, existieron desde el principio de la web:&lt;/p&gt;

&lt;h3&gt;
  
  
  📦 Cajas de bloque (Block boxes)
&lt;/h3&gt;

&lt;p&gt;Las cajas de bloque, por defecto, ocupan todo el espacio a lo ancho del contenedor.&lt;br&gt;
El elemento HTML común para una caja de bloque es el elemento&lt;br&gt;
&lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  📦 Cajas en línea (Inline boxes)
&lt;/h3&gt;

&lt;p&gt;Las cajas en línea, por defecto, toman el espacio según el contenido envuelto. El elemento HTML más común para una caja en línea es el elemento &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  La propiedad Display
&lt;/h2&gt;

&lt;p&gt;El comportamiento de todas las cajas proviene de la propiedad display de CSS. &lt;/p&gt;

&lt;p&gt;La documentación de la MDN define la propiedad display de la siguiente manera:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;La propiedad CSS display especifica si un elemento es tratado como &lt;code&gt;block&lt;/code&gt; o &lt;code&gt;inline&lt;/code&gt; y el diseño usado por sus hijos, como flow layout, grid (Cuadricula) o flex (Flexible). &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Los valores básicos de la propiedad display son el valor &lt;code&gt;inline&lt;/code&gt; y el valor &lt;code&gt;block&lt;/code&gt;.&lt;br&gt;
Entonces el elemento HTML &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt;, por defecto, utiliza el valor de &lt;code&gt;inline&lt;/code&gt;  mientras que el elemento HTML &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;, por defecto, utiliza el valor de block.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

div{ 
   display: block; /* browser default styles */
}
span{ 
   display: inline; /* browser default styles */
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Y ahora, si quieres, puedes cambiar el comportamiento de cada elemento HTML. Por ejemplo, puede convertirlo en un comportamiento opuesto:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

div{ 
   display: inline; 
}

span{ 
   display: block; 
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Entonces podemos decir que de forma natural existen elementos HTML en línea y elementos de bloque, esto es cierto, pero curiosamente todos los elementos HTML utilizan la propiedad display con el valor &lt;code&gt;inline&lt;/code&gt;, Te estarás preguntando ¿cómo sé esto? la respuesta es que cada propiedad en CSS tiene sólo un valor por defecto y para la propiedad &lt;code&gt;display&lt;/code&gt;, el valor inicial es siempre &lt;code&gt;inline&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;¿No me crees? La misma documentación oficial de la MDN lo dice:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnyzcy1vcpod2hx3ph7f0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnyzcy1vcpod2hx3ph7f0.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahora la pregunta que debemos hacernos es: ¿Por qué el elemento HTML &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; es un elemento de bloque o se comporta con el valor display: block?&lt;br&gt;
La respuesta está en el user-agent-stylesheet (hoja de estilo) del navegador.&lt;/p&gt;

&lt;p&gt;Cuando creamos páginas web, el navegador carga su propia hoja de estilos CSS antes de que carguemos una sola línea de CSS, esto quiere decir, que cada navegador viene con cierta cantidad de CSS por defecto que llamamos user-agent-stylesheet.&lt;/p&gt;

&lt;p&gt;Entonces todos los elementos HTML que por defecto tienen un valor de block, esto es sólo porque el navegador decide añadirles la propiedad display con un valor de block. Si inspeccionamos el elemento &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; tiene el valor de block por esta razon:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpte474ifn3wwd03hskwu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpte474ifn3wwd03hskwu.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esto quiere decir que muchas etiquetas HTML tienen asignado estilos CSS del navegador aunque no lo hayas especificado, todos los elementos tienen establecido un valor de la propiedad &lt;code&gt;display&lt;/code&gt; que puede ser &lt;code&gt;inline&lt;/code&gt; o puede ser &lt;code&gt;block&lt;/code&gt; gracias a la hoja de estilo del navegador.&lt;/p&gt;

&lt;p&gt;Esta tambien es la razón por la que sin ningún tipo de CSS de nuestra parte, el elemento &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; es mas grande que un &lt;code&gt;&amp;lt;h2&amp;gt;&lt;/code&gt; y el &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; tenga un margen que a veces es necesario eliminar.&lt;/p&gt;

&lt;p&gt;Es importante recordar que estos estilos no son los estilos por defecto de CSS, si reestablecemos el elemento &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; a su valor inicial pasara a ser &lt;code&gt;inline&lt;/code&gt;. ¡Vamos a comprobarlo!&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

div {
    display: initial; /* es igual a inline */
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;La única razón por la que tenemos esas diferencias entre los distintos tipos de elementos HTML (block vs inline) es porque el navegador carga su propio CSS.&lt;/p&gt;

&lt;p&gt;Para tener una idea de como es la hoja de estilo de cada navegador (Chrome, Firefox) en los recursos de este articulo dejare los enlaces para que les des un vistazo.&lt;/p&gt;

&lt;p&gt;En el concepto de la propiedad display también nos menciona que esta propiedad establece los tipos de &lt;strong&gt;visualización interna y externa de un elemento&lt;/strong&gt;. La de tipo externa establece la participación de un elemento en el flujo normal; la tipo interna establece el layout (Diseño) de los hijos.&lt;/p&gt;
&lt;h4&gt;
  
  
  Flujo Normal (normal flow)
&lt;/h4&gt;

&lt;p&gt;El flujo normal en HTML es el orden natural en el que los elementos aparecen en pantalla, es decir, los elementos aparecerán colocados tal como estén ordenados en el código HTML solo si no se aplica ningún CSS que cambie la forma en la que se comportan.&lt;/p&gt;

&lt;p&gt;Como ya hemos mencionado anteriormente estos elementos en HTML por defecto son elementos "en línea" o elementos "en bloque".&lt;/p&gt;

&lt;p&gt;Conociendo esto, la documentación de la MDN define el flujo normal de la siguiente manera:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;El flujo normal, o flow Layout, es la forma en que los elementos de bloque y en línea se muestran en una página antes de que se realicen cambios en su diseño.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  ¿Cómo se comportan los elementos Block e Inline cuando forman parte del flujo normal?
&lt;/h3&gt;

&lt;p&gt;En el flujo normal, los elementos en línea se muestran en la dirección en línea, es decir, se muestran uno tras otro, comenzando por la izquierda. Los elementos en bloque se muestran uno detrás de otro, es decir, comienzan en la parte superior y se mueven hacia abajo en la página.&lt;/p&gt;

&lt;p&gt;📖 Esto lo podemos comprender cuando leemos un libro, siempre vamos a leer de arriba hacia abajo y de izquierda a derecha.&lt;/p&gt;

&lt;p&gt;La propiedad display aparte de tener los valores anteriores también tiene un valor llamado: &lt;code&gt;inline-block&lt;/code&gt; que junto con los demás nos sirve para definir la colocación de elementos individuales, también tiene otros valores importantes como: &lt;code&gt;none&lt;/code&gt;, &lt;code&gt;flex&lt;/code&gt; y &lt;code&gt;grid&lt;/code&gt;. &lt;/p&gt;
&lt;h2&gt;
  
  
  🍫 display: inline
&lt;/h2&gt;

&lt;p&gt;Los elementos en línea no admiten dimensiones (width, height) pero si admiten margin, padding y border, solo ocupan lo que tengan en su contenido, es decir, aunque quieras declarar un ancho y alto a un elemento de línea no podrá tener efecto ya que estos elementos no aceptan dimensiones, así también lo explica la documentación de la MDN:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Los elementos en línea tienen su altura y anchura determinados por su contenido. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Si hay varios elementos en línea estarán colocados de izquierda a derecha (uno al lado de otro).&lt;/p&gt;

&lt;p&gt;Por ejemplo, el elemento HTML &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; es un elemento de línea por defecto y no importa cuántas etiquetas &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; haya, siempre aparecerán en línea o, en otras palabras, una inmediatamente después de la otra, produciendo una cadena continua de texto.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

 &amp;lt;span class="inline"&amp;gt;Soy un elemento de linea&amp;lt;/span&amp;gt;
 &amp;lt;span class="inline"&amp;gt;Soy otro elemento de linea&amp;lt;/span&amp;gt;
 &amp;lt;span class="inline"&amp;gt;Soy otro elemento más de linea&amp;lt;/span&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

.inline {
    background-color: khaki;
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg1xr8rpxh6rxk8eb8898.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg1xr8rpxh6rxk8eb8898.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Si quieres cambiar el tamaño, tienes que tener en cuenta que no podrás hacerlo porque recuerda que los elementos de línea no admiten dimensiones, esto lo puedes cambiar por &lt;code&gt;display: block&lt;/code&gt; o &lt;code&gt;display: inline-block&lt;/code&gt; de esta forma ya podrás cambiar el tamaño de tus elementos.&lt;/p&gt;
&lt;h3&gt;
  
  
  🤔 ¿Cuáles son los elementos de línea?
&lt;/h3&gt;

&lt;p&gt;La siguiente es una lista de los elementos en línea de HTML, podemos ver algunos de estos elementos en los cuales colocamos contenido en forma de texto:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;b&lt;/code&gt;, &lt;code&gt;big&lt;/code&gt;, &lt;code&gt;i&lt;/code&gt;, &lt;code&gt;small&lt;/code&gt;, &lt;code&gt;tt&lt;/code&gt;, &lt;br&gt;
&lt;code&gt;abbr&lt;/code&gt;, &lt;code&gt;acronym&lt;/code&gt;, &lt;code&gt;cite&lt;/code&gt;, &lt;code&gt;code&lt;/code&gt;, &lt;code&gt;dfn&lt;/code&gt;, &lt;code&gt;em&lt;/code&gt;, &lt;code&gt;kbd&lt;/code&gt;, &lt;code&gt;strong&lt;/code&gt;, &lt;code&gt;samp&lt;/code&gt;, &lt;code&gt;time&lt;/code&gt;, &lt;code&gt;var&lt;/code&gt;, &lt;br&gt;
&lt;code&gt;a&lt;/code&gt;, &lt;code&gt;bdo&lt;/code&gt;, &lt;code&gt;br&lt;/code&gt;, &lt;strong&gt;&lt;code&gt;img&lt;/code&gt;&lt;/strong&gt;, &lt;code&gt;map&lt;/code&gt;, &lt;code&gt;object&lt;/code&gt;, &lt;code&gt;q&lt;/code&gt;, &lt;code&gt;script&lt;/code&gt;, &lt;code&gt;span&lt;/code&gt;, &lt;code&gt;sub&lt;/code&gt;, &lt;code&gt;sup&lt;/code&gt;, &lt;br&gt;
&lt;code&gt;button&lt;/code&gt;, &lt;code&gt;input&lt;/code&gt;, &lt;code&gt;label&lt;/code&gt;, &lt;code&gt;select&lt;/code&gt;, &lt;code&gt;textarea&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;😰 ¿Debo aprender de memoria todos los elementos de línea? La respuesta es que no es necesario, simplemente con la practica lograras identificar que elementos son de línea o de bloque. Recuerda que la practica hace al maestro. 🤓 &lt;/p&gt;
&lt;h2&gt;
  
  
  📄 display: block
&lt;/h2&gt;

&lt;p&gt;Un elemento de bloque es un elemento que ocupa el ancho máximo disponible. Tal y como dice la documentación de la MDN:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;De manera predeterminada, el contenido de un elemento de nivel de bloque es el 100% del ancho de su elemento padre y su altura viene determinada por su contenido.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Esto nos quiere decir que los elementos de tipo bloque abarcan el 100% del espacio que tengan disponible, es decir, se estiran por todo el ancho de la página.&lt;/p&gt;

&lt;p&gt;Cabe mencionar que estos elementos si admiten dimensiones pero no pueden tener otro elemento a su lado ya que abarcan todo el espacio que tengan disponible por lo tanto estarán colocados de arriba hacia abajo, aunque este comportamiento por defecto puede ser modificado colocando &lt;code&gt;display: inline-block&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Cuando hay varios elementos, estos están separados por sus márgenes, como vemos en la siguiente imagen, esto tiene que ver con un tema fundamental llamado: Colapso de márgenes.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

 &amp;lt;p class="block"&amp;gt;Soy un elemento de bloque&amp;lt;/p&amp;gt;
 &amp;lt;p class="block"&amp;gt;Soy otro elemento de bloque&amp;lt;/p&amp;gt;
 &amp;lt;p class="block"&amp;gt;Soy otro elemento más de bloque&amp;lt;/p&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

.block {
    background-color: khaki;
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqhhg516qhqvtnkitr90c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqhhg516qhqvtnkitr90c.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En general, los elementos en bloque también pueden contener elementos en línea y otros elementos en bloque, así que los elementos en bloque crean estructuras "más grandes" que los elementos en línea.&lt;/p&gt;
&lt;h3&gt;
  
  
  🤔 ¿Cuáles son los elementos de bloque?
&lt;/h3&gt;

&lt;p&gt;La siguiente es una lista de los elementos en bloque, alguno de ellos los podemos ver como contenedores:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;address&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;article&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;aside&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;audio&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;blockquote&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;dd&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;dl&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;fieldset&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;figcaption&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;figure&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;footer&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;form&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;header&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;hgroup&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;hr&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;main&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;nav&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;noscript&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;ol&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;output&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;pre&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;section&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;table&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;tfoot&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;ul&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;video&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt;...&lt;code&gt;&amp;lt;h6&amp;gt;&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;Recuerda que no es necesario que memorices cada uno de estos elementos, ya que con la practica lograras identificarlos fácilmente.&lt;/p&gt;
&lt;h2&gt;
  
  
  ⏸️ display: inline-block
&lt;/h2&gt;

&lt;p&gt;Es una combinación entre los dos tipos de elementos mencionados anteriormente (block e inline), los elementos con el valor &lt;code&gt;inline-block&lt;/code&gt; admiten dimensiones pero todavía son elementos de línea, es decir estarán colocados uno al lado de otro.&lt;/p&gt;
&lt;h3&gt;
  
  
  El elemento &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Un dato curioso es que el elemento &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#styling_with_css" rel="noopener noreferrer"&gt;es un elemento &lt;strong&gt;inline&lt;/strong&gt;&lt;/a&gt;, esto quiere decir que incluso puedes colocar una imagen en medio de un párrafo. &lt;/p&gt;

&lt;p&gt;Sin embargo, una imagen es como cualquier otro elemento de bloque porque puede tener: &lt;code&gt;border&lt;/code&gt;, &lt;code&gt;margin&lt;/code&gt;, &lt;code&gt;padding&lt;/code&gt; y también puedes modificar su altura y anchura.&lt;/p&gt;

&lt;p&gt;🤯 Para ser precisos una imagen es en realidad un elemento de línea y de bloque al mismo tiempo, en otras palabras: &lt;code&gt;display: inline-block&lt;/code&gt;. ¡Vamos a comprobarlo!&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;

&lt;span class="nc"&gt;.image&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;300px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;300px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;30px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="no"&gt;red&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* HTML */&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="nt"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"image"&lt;/span&gt; &lt;span class="nt"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"https://picsum.photos/200/200"&lt;/span&gt;&lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqpddhnrg3l97psdi2mcp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqpddhnrg3l97psdi2mcp.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como las imágenes son elementos inline, esto produce un espacio debajo debido a su &lt;code&gt;line-height&lt;/code&gt;. Si alguna vez has tenido un misterioso espacio de &lt;code&gt;4px&lt;/code&gt; que no era &lt;code&gt;border&lt;/code&gt;, &lt;code&gt;margin&lt;/code&gt;o &lt;code&gt;padding&lt;/code&gt;, probablemente era el llamado "“inline magic space”" que los navegadores añaden al &lt;code&gt;line-height&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Se puede solucionar de dos formas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Añadiendo &lt;code&gt;line-height:0&lt;/code&gt;  al contenedor de la imagen. &lt;/li&gt;
&lt;li&gt;Asignando &lt;code&gt;display:block&lt;/code&gt; a la imagen directamente (&lt;code&gt;img { display: block;}&lt;/code&gt;). ✅
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Así evitamos toda una serie de problemas.&lt;/p&gt;
&lt;h2&gt;
  
  
  👻 display: none
&lt;/h2&gt;

&lt;p&gt;Lo que hace el valor &lt;code&gt;none&lt;/code&gt; de la propiedad &lt;code&gt;display&lt;/code&gt; es que oculta un elemento, por lo que no ocupara ningún espacio. El elemento estará oculto y la pagina será desplegada como si el elemento no estuviera allí.&lt;/p&gt;

&lt;p&gt;Este valor se utiliza constantemente cuando en los dispositivos móviles no queremos que haya elementos que tengan que mostrarse al usuario por el espacio que ocupan, pero que en pantallas grandes si tengan que aparecer.&lt;/p&gt;

&lt;p&gt;Hay que tener cuidado con este valor, porque sabemos que si oculta el elemento pero se sigue renderizando, por ejemplo, si en una pagina web al &lt;code&gt;body&lt;/code&gt; le colocáramos la declaración: &lt;code&gt;display: none&lt;/code&gt; no se mostraría nada pero los recursos se seguirían cargando, por lo tanto hay que utilizarlo con cuidado.&lt;/p&gt;
&lt;h2&gt;
  
  
  ↕️↔️ display: flex y display: grid
&lt;/h2&gt;

&lt;p&gt;Los últimos valores mas importantes de la propiedad display es &lt;code&gt;grid&lt;/code&gt; y &lt;code&gt;flex&lt;/code&gt;. No voy a profundizar en estos temas porque considero que merecen un articulo propio e incluso un tutorial completo, bien explicado y con muchos ejercicios ya que son temas extensos.&lt;/p&gt;

&lt;p&gt;De manera general podemos decir que el valor &lt;code&gt;flex&lt;/code&gt; se usa para maquetar componentes como por ejemplo, un menú de navegación y &lt;code&gt;grid&lt;/code&gt; se usa para maquetar el layout. Se que estoy generalizando y esto, no es 100% así, porque pueden haber componentes complejos en los que es necesario usar &lt;code&gt;grid&lt;/code&gt; y algunos layouts son simples y otros no, todo depende de lo que estés diseñando.&lt;/p&gt;

&lt;p&gt;De todas maneras comparto una infografía de un gran desarrollador llamado Addy Osmani (Ingeniero en Google Chrome) que se basó en el articulo de Ahmad Shadeed para realizar esta comparación.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1272423597550657537-396" src="https://platform.twitter.com/embed/Tweet.html?id=1272423597550657537"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1272423597550657537-396');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1272423597550657537&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;No te preocupes, realizare todo un articulo para ver en profundidad flexbox y grid, pero por ahora es necesario que comprendas como funciona la propiedad display.&lt;/p&gt;

&lt;p&gt;Antes de correr, aprende a caminar 🚶‍♀️...🏃‍♀️&lt;/p&gt;

&lt;h2&gt;
  
  
  📋 Conclusión
&lt;/h2&gt;

&lt;p&gt;☑️ Todas las etiquetas HTML tienen configuraciones de estilo CSS por defecto, incluso si ninguna es proporcionada por usted.&lt;br&gt;
☑️ Los elementos en HTML usualmente son elementos "en línea" o elementos "en bloque". Pero este comportamiento por defecto puede ser modificado.&lt;br&gt;
☑️ Los elementos en línea no admiten dimensiones (width, height) aunque si admiten margin, padding y border.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔎Recursos:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/display" rel="noopener noreferrer"&gt;Display | MDN&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/es/docs/Learn/CSS/CSS_layout/Normal_Flow" rel="noopener noreferrer"&gt;Flujo normal | MDN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/es/docs/Web/HTML/Inline_elements" rel="noopener noreferrer"&gt;Elementos en línea | MDN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/es/docs/Web/HTML/Block-level_elements" rel="noopener noreferrer"&gt;Elementos en bloque | MDN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/cssclass-com/understanding-the-css-box-model-97e4228670d6" rel="noopener noreferrer"&gt;Understanding the CSS Box-Model | Elad Shechter
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://searchfox.org/mozilla-central/source/layout/style/res/html.css" rel="noopener noreferrer"&gt;Firefox | Stylesheet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://chromium.googlesource.com/chromium/blink/+/refs/heads/main/Source/core/css/html.css" rel="noopener noreferrer"&gt;Chromium | Stylesheet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://trac.webkit.org/browser/webkit/trunk/Source/WebCore/css/html.css?rev=276657" rel="noopener noreferrer"&gt;WebKit de Chrome | stylesheet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gracias por leer🦸🏻‍♀️&lt;br&gt;
Mis redes sociales donde comparto notas de código:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/lupitacode" rel="noopener noreferrer"&gt;▶️Youtube&lt;/a&gt;&lt;br&gt;
&lt;a href="https://instagram.com/lupitacode" rel="noopener noreferrer"&gt;📷Instagram&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/lupitacode" rel="noopener noreferrer"&gt;🐦Twitter&lt;/a&gt;&lt;br&gt;
&lt;a href="https://facebook.com/lupitacode" rel="noopener noreferrer"&gt;🔵Facebook&lt;/a&gt;&lt;br&gt;
&lt;a href="https://codepen.io/lupitacode/" rel="noopener noreferrer"&gt;🔲Codepen&lt;/a&gt;&lt;br&gt;
&lt;a href="https://lupitacode.medium.com/" rel="noopener noreferrer"&gt;✍️Medium&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.tiktok.com/@lupitacode" rel="noopener noreferrer"&gt;🎵Tik Tok&lt;/a&gt;&lt;/p&gt;

</description>
      <category>css</category>
      <category>tutorial</category>
      <category>spanish</category>
      <category>latam</category>
    </item>
    <item>
      <title>Guía completa y práctica sobre posicionamiento CSS: z-index y stacking context</title>
      <dc:creator>Lupita Code 🌄</dc:creator>
      <pubDate>Wed, 26 May 2021 21:08:08 +0000</pubDate>
      <link>https://forem.com/lupitacode/guia-completa-y-practica-sobre-posicionamiento-css-z-index-y-stacking-context-57ig</link>
      <guid>https://forem.com/lupitacode/guia-completa-y-practica-sobre-posicionamiento-css-z-index-y-stacking-context-57ig</guid>
      <description>&lt;p&gt;¡Hola gente bonita!👋&lt;/p&gt;

&lt;p&gt;Este es el ultimo articulo de la guía completa de posicionamiento en CSS, en el cual voy a explicar la propiedad &lt;code&gt;z-index&lt;/code&gt;. Esta propiedad nos permite definir la posición en el eje z de los elementos posicionados. &lt;/p&gt;

&lt;h2&gt;
  
  
  🧐 ¿Cómo funciona z-index?
&lt;/h2&gt;

&lt;p&gt;Cuando los elementos se colocan fuera del flujo normal, pueden superponerse sobre otros elementos. La propiedad &lt;code&gt;z-index&lt;/code&gt; especifica el orden de apilamiento (Stacking Context) en el eje z, es decir, cual elemento debe ser colocado enfrente o detrás de otros.&lt;/p&gt;

&lt;p&gt;La propiedad &lt;code&gt;z-index&lt;/code&gt; acepta un valor numérico que puede ser un número positivo o negativo, no se usa unidades tales como pixeles o porcentajes. Esta propiedad toma un valor numérico entre 0 y ±2147483647 en la mayoría de los navegadores comunes.&lt;/p&gt;

&lt;p&gt;El valor por defecto de &lt;code&gt;z-index&lt;/code&gt; es &lt;code&gt;auto&lt;/code&gt;. El navegador irá ordenando los elementos en el orden que aparezcan en el documento HTML, el primer elemento quedara debajo y los siguientes elementos se irán apilando encima, pero con la propiedad &lt;code&gt;z-index&lt;/code&gt; podemos modificar este orden, esto lo puedes comprobar con los siguientes ejemplos:&lt;/p&gt;

&lt;h3&gt;
  
  
  Ejemplo 1️⃣
&lt;/h3&gt;

&lt;p&gt;En el siguiente ejemplo tenemos 3 cajas que están dentro de un contenedor, no estarán posicionadas y tampoco tendrán un &lt;code&gt;z-index&lt;/code&gt; declarado, solo tendrán un &lt;code&gt;margin-top&lt;/code&gt;.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&amp;lt;div class="demo"&amp;gt;
  &amp;lt;div class="box-1"&amp;gt;1&amp;lt;/div&amp;gt;
  &amp;lt;div class="box-2"&amp;gt;2&amp;lt;/div&amp;gt;
  &amp;lt;div class="box-3"&amp;gt;3&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

.demo {
    width: 300px;
    height: 300px;
    padding: 2rem;
    border: 2px dashed black;
}

[class^="box-"] {
    width: 100px;
    height: 100px;
    padding: 30px 10px;
    font-size: 2rem;
    font-weight: bold;
    text-align: center;
}

.demo &amp;gt; * + * {
    margin-top: -50px; ⬅️
    opacity: 0.8;
    box-shadow: 0 -1px 10px rgba(0, 0, 0, 60%);
}

.box-1 {
    background-color: pink;
    border: 2px solid hotpink;
}

.box-2 {
    background-color: tomato;
    border: 2px solid orangered;
}

.box-3 {
    background-color: wheat;
    border: 2px solid gold;
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxmbkul5r52ulcnfdk8st.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxmbkul5r52ulcnfdk8st.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Recordemos que a ninguna caja se le ha especificado la propiedad z-index y tampoco están posicionadas, podemos ver en la imagen que las cajas se han apilado, entonces ¿Cómo decide el navegador cual colocar encima del otro? la respuesta es que si no hay un z-index el navegador usa el orden en el que aparecen en el documento HTML. El que aparece después siempre va "encima" de los otros elementos.&lt;/p&gt;

&lt;p&gt;Si revisamos el código HTML, primero tenemos la caja con el numero uno por eso esta detrás de la caja dos y al final esta la caja tres por eso esta encima de todas las cajas.&lt;/p&gt;

&lt;p&gt;En resumen la caja amarilla se coloco encima de la caja roja, porque dicha caja se coloco después en el documento HTML, aunque la propiedad z-index puede cambiar este orden.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ejemplo 2️⃣
&lt;/h3&gt;

&lt;p&gt;Antes de explicar como funciona la propiedad z-index, vamos a ver otro ejemplo solo con dos cajas, si a la primera caja la posicionamos con el valor de &lt;code&gt;relative&lt;/code&gt; y la movemos con la propiedad &lt;code&gt;top: 50px&lt;/code&gt;, esta caja se coloca encima de la caja dos y esto es porque en el documento HTML la caja uno esta primero.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

.demo &amp;gt; * + * {
    /* eliminamos el margin-top */
    box-shadow: 0 -1px 10px rgba(0, 0, 0, 60%);
}

.box-1 {
    position: relative; ⬅️
    top: 50px; ⬅️
    background-color: pink;
    border: 2px solid hotpink;
}

.box-2 {
    background-color: tomato;
    border: 2px solid orangered;
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqah6a0ach98gkiirzzvp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqah6a0ach98gkiirzzvp.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Como puedes ver la segunda caja no esta posicionada por lo tanto la caja uno se coloca encima. Pero, ¿Qué pasaría si a la caja dos también le agregamos el posicionamiento &lt;code&gt;relative&lt;/code&gt;?, vamos a explicarlo con el siguiente ejemplo:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

.box-1 {
    position: relative; ⬅️
    top: 50px; ⬅️
    background-color: pink;
    border: 2px solid hotpink;
}

.box-2 {
    position: relative; ⬅️
    background-color: tomato;
    border: 2px solid orangered;
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiambacbhztrjbe1gv6kr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiambacbhztrjbe1gv6kr.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A la segunda caja solo se le agregó el valor &lt;code&gt;relative&lt;/code&gt; y se coloco encima de la primera caja, ¿Por qué sucede esto? la respuesta es que, si ambos elementos están posicionados sin tener un z-index declarado lo que prevalece es el orden en el que aparecen en el documento HTML.&lt;/p&gt;

&lt;p&gt;Aunque no especifiques un z-index los elementos van aparecer según su orden en el flujo normal.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ejemplo 3️⃣
&lt;/h3&gt;

&lt;p&gt;Vamos a continuar con los ejemplos anteriores ahora vamos a tener tres cajas, que estarán posicionadas, para no estar colocando a cada elemento la propiedad &lt;code&gt;position&lt;/code&gt; vamos hacer uso del selector de atributo.&lt;/p&gt;

&lt;p&gt;⚠️ Recuerda que si estableces un valor especifico para z-index en un elemento y si no esta funcionando es porque necesitas establecer un tipo de posicionamiento diferente de &lt;code&gt;static&lt;/code&gt;. Este es el error mas común donde los desarrolladores luchan con z-index.&lt;/p&gt;

&lt;p&gt;🔎 Sin embargo, si estas usando flexbox o grid, si puedes modificar el z-index de los elementos flex o grid sin añadir &lt;code&gt;position: relative&lt;/code&gt;.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

[class^="box-"] {
    position: relative; ⬅️
}
.box-1 {
    top: 50px;  ⬅️
    left: 50px; ⬅️
    background-color: pink;
    border: 2px solid hotpink;
}

.box-2 {
    top: 10px;   ⬅️
    left: 100px; ⬅️
    background-color: tomato;
    border: 2px solid orangered;
}

.box-3 {
    left: 150px; ⬅️
    top: -50px;  ⬅️
    background-color: wheat;
    border: 2px solid gold;
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9rk1yqug8dp0yz0x75fc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9rk1yqug8dp0yz0x75fc.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;La propiedad z-index puede cambiar este orden, si asignamos solamente a la caja dos un &lt;code&gt;z-index&lt;/code&gt; con valor 1 la caja dos se coloca encima de las demás.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

.box-2 {
    top: 10px;
    left: 100px;
    z-index: 1; ⬅️
    background-color: tomato;
    border: 2px solid orangered;
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fupch8m4rzw3e9fx63q8s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fupch8m4rzw3e9fx63q8s.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pero, ¿Qué pasa si a la caja tres también le coloco un z-index con valor 1? la respuesta es que vamos a volver al mismo estado que teníamos anteriormente:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

.box-2 {
    z-index: 1; ⬅️
}

.box-3 {
    z-index: 1; ⬅️
}



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9rk1yqug8dp0yz0x75fc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9rk1yqug8dp0yz0x75fc.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Recordemos que la primera caja no tiene declarado un valor para  z-index, pero en el siguiente ejemplo a cada una de las cajas le vamos a dar un valor diferente.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ejemplo 4️⃣
&lt;/h3&gt;

&lt;p&gt;En el siguiente ejemplo las cajas uno y tres estarán encima de la caja numero dos, las tres cajas tienen valores consecutivos en z-index, es decir la primera caja tiene un valor de &lt;code&gt;3&lt;/code&gt;, la segunda caja tiene un valor de &lt;code&gt;1&lt;/code&gt; y la tercer caja tiene un valor de &lt;code&gt;2&lt;/code&gt;.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

.box-1 {
    z-index: 3; ⬅️
}

.box-2 {
    z-index: 1; ⬅️
}

.box-3 {
    z-index: 2; ⬅️
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feipm14zv9g393eb6owbv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feipm14zv9g393eb6owbv.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🧠 Recuerda que si el elemento tiene un valor mayor en z-index se colocara encima de los otros elementos que tengan un valor menor.&lt;/p&gt;

&lt;h2&gt;
  
  
  ➖ z-index negativo
&lt;/h2&gt;

&lt;p&gt;Para colocar un elemento detrás de otro, tienes que añadir un valor negativo en z-index, aunque hay algunos casos particulares como los que se muestran en los siguientes ejemplos, antes de eso vamos a responder una pregunta interesante.&lt;/p&gt;

&lt;h3&gt;
  
  
  🤔 ¿Por que no es recomendado usar valores consecutivos en la propiedad z-Index?
&lt;/h3&gt;

&lt;p&gt;Siguiendo con el ejemplo anterior de la imagen, ahora te propongo un reto. ¿Qué pasaría si ahora quiero que la caja dos este encima de la caja tres, pero que este debajo de la caja uno? &lt;/p&gt;

&lt;p&gt;Tu solución podría ser colocar un valor superior a la caja dos, lo que implica eliminar el valor anterior que tenias en dicha caja: &lt;code&gt;z-index : 1&lt;/code&gt; y ahora reemplazarlo por un valor mayor, digamos que colocas: &lt;code&gt;z-index: 3&lt;/code&gt; ahora la caja dos se coloca encima de la caja tres y es correcto pero recuerda que también hay que colocar la caja dos debajo de la caja uno, pero ese valor que colocaste en la caja dos ya lo tiene la caja uno, entonces tienes que estar cambiando los valores. &lt;br&gt;
Entonces después de estar comprobando, La posible solución a la que quizás llegaste fue esta:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

.box-1 {  
    z-index: 3;
}

.box-2 {   
    z-index: 2;  
}

.box-3 {   
    z-index: 1;
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Si bien es correcto no es la manera mas optima, y esto sucede porque hemos colocado valores consecutivos: 1,2,3 en las cajas, y al momento de querer cambiar el orden de las cajas vas a tener que cambiar los valores y si quieres agregar una caja extra que también tenga un z-index declarado se puede volver complicado.&lt;/p&gt;

&lt;p&gt;Cuando tengas varios elementos la mejor practica es tener un rango numérico amplio, puede ser: 10, 20, 30 para darle espacio a nuevos elementos cuando quieras agregar un z-index a cada uno de ellos.&lt;/p&gt;

&lt;p&gt;En este ejemplo agregue un rango de valores a cada una de las cajas, si hay otro elemento extra que quiera incluir, por ejemplo una cuarta caja y si agrego un z-index puedo colocar el valor de &lt;code&gt;11&lt;/code&gt; ya que ese valor no estará ocupado por ningún otro elemento, así que es una buena practica hacerlo de esta manera.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

.box-1 {  
    z-index: 20;
}

.box-2 {   
    z-index: 15;  
}

.box-3 {   
    z-index: 10;
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;El resultado es el siguiente:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5psazltlroo9sqmwk5kv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5psazltlroo9sqmwk5kv.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  👨‍👦 Relación padre-hijo
&lt;/h2&gt;

&lt;p&gt;En el siguiente ejemplo vamos a tener dos elementos, el primero es un elemento contenedor, este va a tener un elemento adentro, es decir, una relación padre-hijo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ejemplo 5️⃣
&lt;/h3&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&amp;lt;div class="container"&amp;gt;
  &amp;lt;div class="item"&amp;gt;&amp;lt;/div&amp;gt;
 &amp;lt;/div&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

.container {
    position: relative;
    width: 200px;
    height: 200px;
    padding: 2rem;
    background-color: lightblue;
}

.item {
    position: relative;
    top: -70px;
    left: 100px;
    width: 100px;
    height: 100px;
    background-color: tomato;
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnix1q2qsul4w1qemntj0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnix1q2qsul4w1qemntj0.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahora queremos que el contenedor padre (color lightblue) se coloque encima del contendor hijo (color tomato), parece fácil y quizás tu primera solución seria solo agregar un valor al z-index del contenedor y listo pero no es tan simple como parece ya que esto no funcionara. ¡Pongámoslo a prueba!&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

.container {
    position: relative;
    z-index: 20;
}
.item {
    position: relative;
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnix1q2qsul4w1qemntj0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnix1q2qsul4w1qemntj0.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como puedes observar no ha pasado nada, el contenedor no se coloco encima del elemento hijo, quizás tu segunda solución sea colocar en el elemento hijo un valor negativo tal vez un -30 y si puede que esto funcione. ¡Pongámoslo a prueba!&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

.container {
    position: relative;
    z-index: 20;
}
.item {
    position: relative;
    z-index: -30;
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnix1q2qsul4w1qemntj0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnix1q2qsul4w1qemntj0.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como puedes observar tampoco ha funcionado, no se ha comportado de la manera que quieres, ¡incluso si estableces z-index a 999999! o agregas la declaración &lt;code&gt;!important&lt;/code&gt;, pero ¿Por que sucede? Esto se debe a que el contenedor padre sigue teniendo un z-index declarado, si no lo tuviera, si funcionaria. Vamos a comprobarlo:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

.container {
    /* Eliminamos el z-index */
    position: relative;
}
.item {
    position: relative;
    z-index: -30;
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdg8udgawsakrhzdad9mg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdg8udgawsakrhzdad9mg.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Entonces podemos decir que si el elemento padre tiene un &lt;code&gt;z-index&lt;/code&gt; declarado, el elemento hijo no se podrá colocar encima de el, a menos que el contenedor padre no tenga la propiedad &lt;code&gt;z-index&lt;/code&gt; y el elemento hijo lo tenga con valor negativo&lt;/p&gt;

&lt;h2&gt;
  
  
  :: Pseudoelementos
&lt;/h2&gt;

&lt;p&gt;En nuestro siguiente ejemplo vamos a utilizar el pseudoelemento &lt;code&gt;::before&lt;/code&gt;. El comportamiento es similar a lo que sucede en el ejemplo anterior, también puedes usar &lt;code&gt;::after&lt;/code&gt; para hacer este ejercicio.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

 &amp;lt;div class="box"&amp;gt;&amp;lt;/div&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

.box {
    position: relative;
    width: 200px;
    height: 200px;
    background-color: tomato;
}

.box::before {
    content: "";
    width: 150px;
    height: 150px;
    position: absolute;
    top: 130px;
    left: 130px;
    background-color: rebeccapurple;
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzy3eso4kigm4qjp6vq57.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzy3eso4kigm4qjp6vq57.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Es importante comprender que los pseudoelementos son como hijos del elemento del cual son generados.&lt;br&gt;
Si queremos que el pseudoelemento &lt;code&gt;::before&lt;/code&gt; se coloque detrás de la caja &lt;code&gt;box&lt;/code&gt; entonces la única manera es declarar un z-index en el pseudoelemento cuyo valor sea negativo, y que el elemento que los origina no tenga un z-index declarado. Es lo mismo que sucede en el ejemplo anterior cuando la relacion es padre-hijo.&lt;/p&gt;

&lt;p&gt;Recuerda que los pseudoelementos &lt;code&gt;::before&lt;/code&gt;  y &lt;code&gt;::after&lt;/code&gt; cuando tienen un posicionamiento absoluto, en automatico van aparecer encima del elemento al cual pertenecen o del cual se originan.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

.box {
    position: relative;
    width: 200px;
    height: 200px;
    background-color: tomato;
}

.box::before {
   z-index: -100;
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flfpeypxc7fmqwa2o5wlg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flfpeypxc7fmqwa2o5wlg.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  📋 Conclusión
&lt;/h2&gt;

&lt;p&gt;☑️ La propiedad &lt;code&gt;z-index&lt;/code&gt; permite modificar el orden de las capas.&lt;br&gt;
☑️ Aunque no especifiques un valor en z-index los elementos van aparecer según su orden en el flujo normal.&lt;br&gt;
☑️ Para poder utilizar la propiedad &lt;code&gt;z-index&lt;/code&gt; primero debes posicionar los elementos.&lt;br&gt;
☑️ La propiedad &lt;code&gt;z-index&lt;/code&gt; admite valores numéricos positivos/negativos en un rango de 0 y ±2147483647.&lt;br&gt;
☑️ Es recomendable no usar valores consecutivos como: 1,2,3,4,5..., se considera un buena practica separar los valores de la propiedad z-index por rangos numéricos amplios.&lt;br&gt;
☑️ En algunos casos puede que no sea necesario el uso de &lt;code&gt;z-index&lt;/code&gt;.&lt;br&gt;
☑️ Si hay un elemento padre con un &lt;code&gt;z-index&lt;/code&gt; declarado, el elemento hijo no se podrá colocar encima de el, a menos que el contenedor padre no tenga la propiedad &lt;code&gt;z-index&lt;/code&gt; y el elemento hijo lo tenga con valor negativo, este problema también sucede con los pseudoelementos.&lt;br&gt;
☑️ Si estas usando flexbox o Grid, si puedes modificar el z-index de los elementos flex o grid sin añadir &lt;code&gt;position: relative&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔎Recursos:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://web.dev/learn/css/z-index/" rel="noopener noreferrer"&gt;z-index | web dev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ishadeed.com/article/understanding-z-index/" rel="noopener noreferrer"&gt;Understanding z-index in CSS | Ahmad Shadeed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.joshwcomeau.com/css/stacking-contexts/" rel="noopener noreferrer"&gt;What the heck, z-index?? | Josh Comeau&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coder-coder.com/z-index-isnt-working/" rel="noopener noreferrer"&gt;4 reasons your z-index isn’t working (and how to fix it)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.smashingmagazine.com/2021/02/css-z-index-large-projects/" rel="noopener noreferrer"&gt;Managing CSS Z-Index In Large Projects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thirumanikandan.com/posts/learn-z-index-using-a-visualization-tool" rel="noopener noreferrer"&gt;Learn Z-Index Using a Visualization Tool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://abandonedwig.info/blog/2020/07/03/css-painting-order.html" rel="noopener noreferrer"&gt;CSS Painting Order&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gracias por leer🦸🏻‍♀️&lt;br&gt;
Mis redes sociales donde comparto notas de código:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/lupitacode" rel="noopener noreferrer"&gt;▶️Youtube&lt;/a&gt;&lt;br&gt;
&lt;a href="https://instagram.com/lupitacode" rel="noopener noreferrer"&gt;📷Instagram&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/lupitacode" rel="noopener noreferrer"&gt;🐦Twitter&lt;/a&gt;&lt;br&gt;
&lt;a href="https://facebook.com/lupitacode" rel="noopener noreferrer"&gt;🔵Facebook&lt;/a&gt;&lt;br&gt;
&lt;a href="https://codepen.io/lupitacode/" rel="noopener noreferrer"&gt;🔲Codepen&lt;/a&gt;&lt;br&gt;
&lt;a href="https://lupitacode.medium.com/" rel="noopener noreferrer"&gt;✍️Medium&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.tiktok.com/@lupitacode" rel="noopener noreferrer"&gt;🎵Tik Tok&lt;/a&gt;&lt;/p&gt;

</description>
      <category>css</category>
      <category>html</category>
      <category>spanish</category>
      <category>latam</category>
    </item>
    <item>
      <title>Guía completa y práctica sobre posicionamiento CSS: position sticky</title>
      <dc:creator>Lupita Code 🌄</dc:creator>
      <pubDate>Mon, 17 May 2021 20:06:38 +0000</pubDate>
      <link>https://forem.com/lupitacode/guia-completa-y-practica-sobre-posicionamiento-css-position-sticky-1c8n</link>
      <guid>https://forem.com/lupitacode/guia-completa-y-practica-sobre-posicionamiento-css-position-sticky-1c8n</guid>
      <description>&lt;p&gt;¡Hola gente bonita!👋&lt;/p&gt;

&lt;p&gt;En el articulo anterior explique el posicionamiento fijo, en esta ocasión voy a explicar el posicionamiento &lt;code&gt;sticky&lt;/code&gt; o también llamado (en español) pegajoso.&lt;/p&gt;

&lt;p&gt;El posicionamiento &lt;code&gt;sticky&lt;/code&gt; es relativamente mas nuevo que los otros tipos de posicionamiento y tal como dice la documentación de la MDN:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;El posicionamiento sticky puede considerarse un híbrido de los posicionamientos relativo y fijo. Un elemento con posicionamiento sticky es tratado como un elemento posicionado relativamente hasta que cruza un umbral especificado, en cuyo punto se trata como fijo hasta que alcanza el límite de su padre. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Son muy similares, pero hay algunas diferencias importantes.&lt;br&gt;
Este tipo de posicionamiento se utiliza cuando queremos que un elemento se posicione en un lugar especifico y que cuando lleguemos a ese elemento al hacer scroll, se quede de forma fija.&lt;/p&gt;

&lt;h2&gt;
  
  
  ↕️↔️ top, right, bottom, left
&lt;/h2&gt;

&lt;p&gt;Las coordenadas no se usan para mover el elemento (como en los otros tipos de posicionamiento), si no que se usan para indicar en que punto el elemento tendrá un comportamiento diferente, antes de llegar a ese punto el elemento se va a comportar de manera natural.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ejemplo 1️⃣
&lt;/h3&gt;

&lt;p&gt;El ejemplo mas común es tener un slider o imagen en la parte superior y un menú de navegación debajo. Cuando hagamos scroll y lleguemos al menú, este se quedara fijo en la pagina. &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&amp;lt;div class="slider"&amp;gt;SCROLL TO THE BOTTOM&amp;lt;/div&amp;gt;
   &amp;lt;nav class="nav"&amp;gt;
       &amp;lt;ul&amp;gt;
          &amp;lt;li&amp;gt;Home&amp;lt;/li&amp;gt;
          &amp;lt;li&amp;gt;Blog&amp;lt;/li&amp;gt;
          &amp;lt;li&amp;gt;Contact&amp;lt;/li&amp;gt;
        &amp;lt;/ul&amp;gt;
    &amp;lt;/nav&amp;gt;
&amp;lt;div class="container"&amp;gt;
     &amp;lt;article&amp;gt;
        &amp;lt;h2 class="title"&amp;gt;Lorem ipsum dolor sit amet.&amp;lt;/h2&amp;gt;
           &amp;lt;p&amp;gt; lorem.. &amp;lt;/p&amp;gt;
      &amp;lt;/article&amp;gt;
 &amp;lt;/div&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

.slider {
    height: 300px;
    font-size: 4rem;
    font-weight: bold;
    text-align: center;
    display: flex;
    justify-content: center;
    align-items: center;
    background-color: yellow;
}

.nav {
    position: sticky; ⬅️
    top: 0; ⬅️
    height: 50px;
    padding: 0.5em;
    background-color: #ccc;
}

.nav ul {
    margin-top: 0;
    margin-bottom: 0;
    padding-left: 0;
    list-style-type: none;
    display: flex;
    justify-content: space-around;
}
.nav ul li {
    line-height: 2;
}

.container {
    width: 70%;
    max-width: 600px;
    margin: 0 auto;
}

article {
    padding: 2em;
    line-height: 1.6;
}



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb19r5swgxr3etprwm5sv.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb19r5swgxr3etprwm5sv.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como puedes observar, en el código CSS agregué la declaración &lt;code&gt;top: 0&lt;/code&gt; esto significa que cuando el menú de navegación &lt;code&gt;&amp;lt;nav&amp;gt;&amp;lt;/nav&amp;gt;&lt;/code&gt; tenga 0px se mantendrá fijo al límite superior de la ventana del navegador, similar a la posición &lt;code&gt;fixed&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;Sin embargo, el elemento es desplazado con relación a su ancestro más cercano o su bloque contenedor. Por ejemplo, si el menú de navegación &lt;code&gt;&amp;lt;nav&amp;gt;&amp;lt;/nav&amp;gt;&lt;/code&gt; se encuentra dentro de un contenedor padre (usaremos de ejemplo la etiqueta &lt;code&gt;&amp;lt;header&amp;gt;&amp;lt;/header&amp;gt;&lt;/code&gt;) no tendrá ningún efecto a menos que se especifique la altura al elemento padre.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

   &amp;lt;div class="slider"&amp;gt;SCROLL TO THE BOTTOM&amp;lt;/div&amp;gt;
        &amp;lt;header class="header"&amp;gt;
            &amp;lt;nav class="nav"&amp;gt;
                &amp;lt;ul&amp;gt;
                    &amp;lt;li&amp;gt;Home&amp;lt;/li&amp;gt;
                    &amp;lt;li&amp;gt;Blog&amp;lt;/li&amp;gt;
                    &amp;lt;li&amp;gt;Contact&amp;lt;/li&amp;gt;
                &amp;lt;/ul&amp;gt;
            &amp;lt;/nav&amp;gt;
        &amp;lt;/header&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

 .header {
    height: 500px; ⬅️
    background-color: #ccc;
}

.nav {
    position: sticky; ⬅️
    top: 0; ⬅️
    height: 50px;
    padding: 0.5em;
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftmow3spdmqo6bf2vpi4e.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftmow3spdmqo6bf2vpi4e.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como podemos observar el menu va a estar colocado en la parte superior del viewport mientras hagamos scroll y una vez terminemos de recorrer los 200px de altura del header, el menú de navegación deja de estar fijo. Esta es la diferencia con el posicionamiento &lt;code&gt;fixed&lt;/code&gt;. Con posicionamiento sticky lo que esta tomando como referencia es el alto del contenedor padre (header), si no declaramos un alto al header no va a funcionar.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ejemplo 2️⃣
&lt;/h3&gt;

&lt;p&gt;Otro uso común del posicionamiento sticky es para los encabezados en una lista alfabética. En este ejemplo el encabezado "B" aparecerá justo por debajo de los ítems que comienzan con "A". El encabezado "B" se mantendrá fijado al límite superior del viewport hasta que todos los ítems "B" se hayan desplazado fuera de la pantalla, en cuyo punto será cubierto por el encabezado "C", y así sucesivamente.  &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&amp;lt;h1 class="title"&amp;gt;Lengujes de programación&amp;lt;/h1&amp;gt;
        &amp;lt;dl class="list"&amp;gt;
            &amp;lt;div class="list-group"&amp;gt;
                &amp;lt;dt class="list-header"&amp;gt;A&amp;lt;/dt&amp;gt;
                &amp;lt;dd&amp;gt;Ada&amp;lt;/dd&amp;gt;
                &amp;lt;dd&amp;gt;ActionScript&amp;lt;/dd&amp;gt;
                &amp;lt;dd&amp;gt;ALGOL 68&amp;lt;/dd&amp;gt;
                &amp;lt;dd&amp;gt;ASP.NET&amp;lt;/dd&amp;gt;
                &amp;lt;dd&amp;gt;Assembly language&amp;lt;/dd&amp;gt;
            &amp;lt;/div&amp;gt;
            &amp;lt;div class="list-group"&amp;gt;
                &amp;lt;dt class="list-header"&amp;gt;B&amp;lt;/dt&amp;gt;
                &amp;lt;dd&amp;gt;Bash&amp;lt;/dd&amp;gt;
                &amp;lt;dd&amp;gt;BASIC&amp;lt;/dd&amp;gt;
                &amp;lt;dd&amp;gt;Batch (Windows/Dos)&amp;lt;/dd&amp;gt;
                &amp;lt;dd&amp;gt;Babbage&amp;lt;/dd&amp;gt;
                &amp;lt;dd&amp;gt;BuildProfessional&amp;lt;/dd&amp;gt;
            &amp;lt;/div&amp;gt;
            &amp;lt;div class="list-group"&amp;gt;
                &amp;lt;dt class="list-header"&amp;gt;C&amp;lt;/dt&amp;gt;
                &amp;lt;dd&amp;gt;C#&amp;lt;/dd&amp;gt;
                &amp;lt;dd&amp;gt;Clojure&amp;lt;/dd&amp;gt;
            &amp;lt;/div&amp;gt;
        &amp;lt;/dl&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

html {
    height: 300%;
}
.title {
    text-align: center;
}

.list {
    padding: 20px;
}

.list-group {
    padding: 0 20px;
}

.list-header {
    position: sticky; ⬅️
    top: 0; ⬅️
    padding: 10px;
    font-weight: 10px;
    background-color: #333;
    color: #00ff6c;
}

dd {
    font: bold 20px/45px Helvetica, Arial, sans-serif;
    margin: 0;
    padding: 0 0 0 12px;
    white-space: nowrap;
}

dd + dd {
    border-top: 1px solid #ccc;
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs6tg5v2tlloml83ktl1x.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs6tg5v2tlloml83ktl1x.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El elemento &lt;code&gt;&amp;lt;dt class="list-header"&amp;gt;&amp;lt;/dt&amp;gt;&lt;/code&gt; se va a quedar fijo en la parte superior siempre que el alto de su contenedor &lt;code&gt;&amp;lt;div class="list-group"&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt; tenga contenido.&lt;/p&gt;

&lt;p&gt;Si quieres ver mas ejemplos, puedes consultar el articulo de CSS-Tricks: &lt;a href="https://css-tricks.com/creating-sliding-effects-using-sticky-positioning/" rel="noopener noreferrer"&gt;Creating sliding effects using sticky positioning.&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  📋 Conclusión
&lt;/h2&gt;

&lt;p&gt;☑️ Al posicionar el elemento como &lt;code&gt;sticky&lt;/code&gt; se habilitan las propiedades top, right, bottom y left, pero no se usan para mover el elemento, si no para indicar en que punto el elemento estara fijo.&lt;br&gt;
☑️ El elemento es posicionado de acuerdo al flujo normal del documento.&lt;br&gt;
☑️ Las dimensiones del elemento se adaptan al contenido, excepto que se haya definido su tamaño con width o height.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔎Recursos:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/es/docs/Web/CSS/position" rel="noopener noreferrer"&gt;Position | MDN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://css-tricks.com/creating-sliding-effects-using-sticky-positioning/" rel="noopener noreferrer"&gt;CSS-Tricks | Article&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gracias por leer🦸🏻‍♀️&lt;br&gt;
Mis redes sociales donde comparto notas de código:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/lupitacode" rel="noopener noreferrer"&gt;▶️Youtube&lt;/a&gt;&lt;br&gt;
&lt;a href="https://instagram.com/lupitacode" rel="noopener noreferrer"&gt;📷Instagram&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/lupitacode" rel="noopener noreferrer"&gt;🐦Twitter&lt;/a&gt;&lt;br&gt;
&lt;a href="https://facebook.com/lupitacode" rel="noopener noreferrer"&gt;🔵Facebook&lt;/a&gt;&lt;br&gt;
&lt;a href="https://codepen.io/lupitacode/" rel="noopener noreferrer"&gt;🔲Codepen&lt;/a&gt;&lt;br&gt;
&lt;a href="https://lupitacode.medium.com/" rel="noopener noreferrer"&gt;✍️Medium&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.tiktok.com/@lupitacode" rel="noopener noreferrer"&gt;🎵Tik Tok&lt;/a&gt;&lt;/p&gt;

</description>
      <category>css</category>
      <category>html</category>
      <category>spanish</category>
      <category>latam</category>
    </item>
    <item>
      <title>Guía completa y práctica sobre posicionamiento CSS: Position fixed</title>
      <dc:creator>Lupita Code 🌄</dc:creator>
      <pubDate>Mon, 17 May 2021 20:06:00 +0000</pubDate>
      <link>https://forem.com/lupitacode/guia-completa-y-practica-sobre-posicionamiento-css-position-fixed-4k3m</link>
      <guid>https://forem.com/lupitacode/guia-completa-y-practica-sobre-posicionamiento-css-position-fixed-4k3m</guid>
      <description>&lt;p&gt;¡Hola gente bonita!👋&lt;/p&gt;

&lt;p&gt;En el articulo anterior explique el posicionamiento absoluto, en esta ocasión voy a explicar el posicionamiento fijo o &lt;code&gt;position: fixed&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Este tipo de posicionamiento es muy usado cuando diseñamos un sidebar, navbar, una ventana de dialogo, un overlay o cuando queremos hacer que un botón este fijo en la pagina web y que cuando el usuario haga click sobre el, lo regrese a la parte superior.&lt;/p&gt;

&lt;p&gt;El posicionamiento &lt;code&gt;fixed&lt;/code&gt; hace que un elemento se coloque respecto al viewport, Le dices dónde posicionarse al elemento, y se queda ahí mientras el usuario hace scroll. El elemento no conserva su espacio en el flujo, todo el espacio que tuviera reservado ese elemento desaparece.&lt;/p&gt;

&lt;h2&gt;
  
  
  ↕️↔️ top, right, bottom, left
&lt;/h2&gt;

&lt;p&gt;Las coordenadas &lt;code&gt;top&lt;/code&gt;, &lt;code&gt;right&lt;/code&gt;, &lt;code&gt;bottom&lt;/code&gt; y &lt;code&gt;left&lt;/code&gt; siempre son relativas a la ventana del navegador.&lt;/p&gt;

&lt;p&gt;Al principio, cuando solo añades el valor &lt;code&gt;fixed&lt;/code&gt;, el elemento se quedara en la posición inicial, pero cuando le agregas las coordenadas el elemento se coloca respecto a la ventana del navegador.&lt;/p&gt;

&lt;p&gt;Como puedes darte cuenta las características mencionadas sobre el posicionamiento fijo son casi las mismas que la del posicionamiento absoluto con la excepción de que con el valor &lt;code&gt;fixed&lt;/code&gt;, el elemento se queda en el lugar que le has indicado, esto quiere decir que cuando el usuario hace scroll en el sitio web el elemento se queda fijo o "pegado" de ahí el nombre.&lt;/p&gt;

&lt;p&gt;Al posicionamiento fijo no le importa si hay un contenedor cercano que esta posicionado, porque el elemento jamás se colocara respecto a el, sino solo a la ventana del navegador.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ejemplo 1️⃣
&lt;/h3&gt;

&lt;p&gt;El ejemplo mas común es hacer un menú horizontal fijo.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&amp;lt;header class="header"&amp;gt;
    &amp;lt;img class="logo-img" src="https://unsplash.it/40" alt="" /&amp;gt;
         &amp;lt;nav class="nav"&amp;gt;
            &amp;lt;ul class="menu"&amp;gt;
                &amp;lt;li&amp;gt;&amp;lt;a href="#"&amp;gt;Home&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
                &amp;lt;li&amp;gt;&amp;lt;a href="#"&amp;gt;About&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
                &amp;lt;li&amp;gt;&amp;lt;a href="#"&amp;gt;Blog&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
            &amp;lt;/ul&amp;gt;
         &amp;lt;/nav&amp;gt;
 &amp;lt;/header&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


header {
    position: fixed;
    top: 0;
    width: 100%;
    height: 5rem;
    padding: 0 3em;
    display: flex;
    justify-content: space-between;
    align-items: center;
    background-color: rgba(255, 255, 255, 0.5);
}

.menu {
    margin-top: 0;
    margin-bottom: 0;
    padding-left: 0;
    list-style: none;
    display: flex;
    gap: 2em;
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyp1fk8v73pgsd35ryw41.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyp1fk8v73pgsd35ryw41.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El problema es que el elemento pierde su espacio reservado en el  flujo y esto hace que el menú se coloque encima de el texto (no lo empuja), esto puede solucionarse agregando al body la propiedad &lt;code&gt;padding-top&lt;/code&gt; o bien &lt;code&gt;margin-top&lt;/code&gt; o al elemento que contiene el texto la propiedad &lt;code&gt;padding-top&lt;/code&gt; o &lt;code&gt;margin-top&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffkfer6ic6wcmhfs7mw0j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffkfer6ic6wcmhfs7mw0j.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hay que tener cuidado con el posicionamiento fijo ya que puede cubrir algunos elementos, ocultándolos de la vista. A veces no es un gran problema en el escritorio, pero cuando estas en un dispositivo móvil y el espacio de la pantalla es limitado, esto puede causar problemas.&lt;/p&gt;

&lt;h1&gt;
  
  
  Aportes de la comunidad
&lt;/h1&gt;

&lt;p&gt;Me ha encantado este CodePen de Steve Gardner donde nos muestra de forma divertida una pagina con un scroll infinito. &lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/ste-vg/embed/PoQgvBK?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
.&lt;/p&gt;

&lt;h2&gt;
  
  
  📋 Conclusión
&lt;/h2&gt;

&lt;p&gt;☑️ El elemento es posicionado respecto al viewport.&lt;br&gt;
☑️ Al posicionar el elemento como &lt;code&gt;fixed&lt;/code&gt; se habilitan las propiedades top, right, bottom, left y z-index.&lt;br&gt;
☑️ La posición fija es muy usada cuando se hacen menús de navegación. Lo usamos cuando un elemento debe estar siempre en el mismo lugar de la página en todo momento. Simplemente no se mueve.&lt;br&gt;
☑️ El elemento no conserva su espacio en el flujo, todo el espacio que se tuviera considerado para ese elemento desaparece.&lt;br&gt;
☑️ Las dimensiones del elemento se adaptan al contenido, excepto que se haya definido su tamaño con width o height.&lt;br&gt;
☑️ Los elementos posicionados de forma fija no pueden moverse de su lugar y se colocan encima de otros elementos.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔎Recursos:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/es/docs/Web/CSS/position" rel="noopener noreferrer"&gt;Position | MDN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://desarrolloweb.com/articulos/etiqueta-meta-viewport.html" rel="noopener noreferrer"&gt;Viewport | Desarrollo web&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gracias por leer🦸🏻‍♀️&lt;br&gt;
Mis redes sociales donde comparto notas de código:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/lupitacode" rel="noopener noreferrer"&gt;▶️Youtube&lt;/a&gt;&lt;br&gt;
&lt;a href="https://instagram.com/lupitacode" rel="noopener noreferrer"&gt;📷Instagram&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/lupitacode" rel="noopener noreferrer"&gt;🐦Twitter&lt;/a&gt;&lt;br&gt;
&lt;a href="https://facebook.com/lupitacode" rel="noopener noreferrer"&gt;🔵Facebook&lt;/a&gt;&lt;br&gt;
&lt;a href="https://codepen.io/lupitacode/" rel="noopener noreferrer"&gt;🔲Codepen&lt;/a&gt;&lt;br&gt;
&lt;a href="https://lupitacode.medium.com/" rel="noopener noreferrer"&gt;✍️Medium&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.tiktok.com/@lupitacode" rel="noopener noreferrer"&gt;🎵Tik Tok&lt;/a&gt;&lt;/p&gt;

</description>
      <category>css</category>
      <category>html</category>
      <category>spanish</category>
      <category>latam</category>
    </item>
  </channel>
</rss>
