Forzar herencia en CSS

Forzando valores heredados en CSS


Ahora que ya conocemos la herencia en CSS y sabemos de que se trata, vamos a ver una serie de recursos para forzar y modificar su comportamiento al que más nos interese.

¿Cómo forzar herencia en CSS?

En el capítulo anterior vimos que ciertas propiedades como color o font-size heredan de forma automática los valores de sus elementos padres, mientras que otras propiedades como border no lo hacen.

Este comportamiento se puede forzar de forma manual, utilizando ciertos valores especiales, disponibles en todas las propiedades CSS existentes. Esos valores son los siguientes:

ValorSignificado
inheritLa propiedad hereda el valor que tiene la misma propiedad CSS en su elemento padre.
initialEstablece al valor valor predeterminado definido por la especificación CSS, ignorando la herencia.
unsetResetea el valor. En propiedades heredables: inherit, en propiedades no heredables: initial.
revertVuelve al estilo inmediatamente anterior aplicado en la cascada.

Veamos un ejemplo de cada una de ellas por separado.

El valor inherit

El valor inherit es el más sencillo de todos, ya que simplemente hereda el valor de la misma propiedad en su elemento padre. Por ejemplo, la propiedad border es una propiedad no heredable, vamos a convertirla en heredable con inherit:

.parent {
  color: green;
  border: 3px solid red;
}

.child {
  border: inherit;
}
<div class="parent">
  <p>Hello from parent!</p>
  <div class="child">
    <p>Hello from child!</p>
  </div>
</div>

Al utilizar el valor inherit, la propiedad border del elemento hijo hereda el valor de la propiedad border de su elemento padre, pasando a tener un borde propio, al igual que su elemento padre. Por su parte, la propiedad color ya era heredable, por lo tanto, cambia el color a su elemento hijo a verde porque lo hereda.

El valor initial

Veamos ahora el mismo ejemplo anterior, centrándonos en el color de texto. Antes, colocamos color: green en el padre. Como color es una propiedad heredable , el hijo tomaba el color del padre. Ahora, vamos a añadir un color: initial en el hijo:

.parent {
  color: green;
  border: 3px solid red;
}

.child {
  border: inherit;
  color: initial;
}
<div class="parent">
  <p>Hello from parent!</p>
  <div class="child">
    <p>Hello from child!</p>
  </div>
</div>

Con ese valor initial en la propiedad color del hijo, se pasa a utilizar un color negro para el texto, ya que es el valor inicial (predeterminado) de esta propiedad.

El valor unset

El valor unset es sencillo de entender. En propiedades heredables, es como utilizar el valor inherit, en propiedades no heredables, es como utilizar el valor initial. Veamos con el ejemplo anterior:

.parent {
  color: green;
  border: 3px solid red;
}

.child {
  border: unset;    /* Propiedad no heredable (initial): Valor predeterminado */
  color: unset;     /* Propiedad heredable (inherit): Hereda el verde */
}
<div class="parent">
  <p>Hello from parent!</p>
  <div class="child">
    <p>Hello from child!</p>
  </div>
</div>

En el caso de color actúa como inherit, por lo que hereda el verde de su elemento padre. En el caso de border, actúa como initial, y toma el valor predeterminado del border, que contiene el border-style en none, y por lo tanto no tiene borde.

El valor revert

En el siguiente ejemplo vamos a ver como funciona revert, y para ello tenemos que observar como funciona la cascada.

  • 1️⃣ El navegador le da estilo al elemento <body>, por lo que pinta el texto verde.
  • 2️⃣ El navegador le da estilo al elemento .parent, por lo que sobreescribe con color de texto azul.
  • 3️⃣ El navegador le da estilo al elemento .child, y revertimos al valor anterior: azul.
body {
  color: green;
}

.parent {
  color: blue;
}

.child {
  color: revert;
}
<div class="parent">
  <p>Hello from parent!</p>
  <div class="child">
    <p>Hello from child!</p>
  </div>
</div>

En casos más complejos donde interviene la especificidad (la veremos más adelante) este valor podría ser más útil, ya que el cambio de valor no es tan directo.

La propiedad all

Existe una propiedad CSS denominada all que sirve para resetear todas las propiedades establecidas del selector definido en CSS. Por ejemplo, imaginemos un <div class="element">. Este elemento, por defecto, es «invisible»: no tiene tamaño de alto, no tiene color de fondo y no tiene borde.

Le establecemos unas dimensiones, un color de fondo y un borde:

.element {
  width: 200px;
  height: 200px;
  font-size: 42px;
  color: red;
  background: indigo;
  border: 3px solid black;
}

.element {
  all: initial;
}
<div class="element">Esto es un texto de ejemplo.</div>

Observa que a pesar de usar todas esas propiedades, mediante la propiedad all hemos reseteado todos los estilos que afectan a ese elemento a sus valores por defecto.

Recuerda que la propiedad all no reseteará las propiedades CSS direction, unicode-bidi ni las variables CSS establecidas.

¿Quién soy yo?

Soy Manz, vivo en Tenerife (España) y soy streamer partner en Twitch y profesor. Me apasiona el universo de la programación web, el diseño y desarrollo web y la tecnología en general. Aunque soy full-stack, mi pasión es el front-end, la terminal y crear cosas divertidas y locas.

Puedes encontrar más sobre mi en Manz.dev