selectores - ¿Cuál es la diferencia al aplicar CSS a html, body y al selector universal*?
selector padre css (1)
html { color: black; background-color: white; }
Esta regla aplica los colores al elemento
html
. Todos los descendientes del elementohtml
heredan sucolor
(pero nobackground-color
), incluido elbody
. El elemento delbody
no tiene un color de fondo predeterminado, lo que significa que es transparente, por lo que el fondo dehtml
se mostrará hasta y a menos que establezcas un fondo para elbody
.Aunque el fondo de
html
está pintado sobre toda la ventana gráfica, el elementohtml
sí mismo no abarca toda la altura de la ventana gráfica automáticamente; el fondo simplemente se propaga a la ventana gráfica. Vea esta respuesta para más detalles.body { color: black; background-color: white; }
Esta regla aplica los colores al elemento del
body
. Todos los descendientes del elemento delbody
heredan sucolor
.De forma similar a cómo el fondo de
html
se propaga a la ventana gráfica automáticamente, el fondo delbody
se propagará ahtml
automáticamente, hasta que, a menos que establezca un fondo parahtml
también. Vea esta respuesta para una explicación. Debido a esto, si solo necesita un fondo (en circunstancias normales), si usa la primera regla o la segunda no hará una diferencia real.Sin embargo, puede combinar estilos de fondo para
html
ybody
con otros trucos para obtener efectos de fondo ingeniosos, como lo he hecho aquí . Vea la respuesta vinculada anterior para saber cómo.* { color: black; background-color: white; }
Esta regla aplica los colores a cada elemento , por lo que ninguna de las dos propiedades se hereda implícitamente. Pero puede anular fácilmente esta regla con cualquier otra cosa, incluyendo cualquiera de las dos reglas anteriores, ya que
*
tiene literalmente ningún significado en la especificidad del selector.Dado que esto rompe la cadena de herencia completamente para cualquier propiedad que normalmente se hereda como
color
, establecer esas propiedades en una regla*
se considera mala práctica a menos que tenga una muy buena razón para romper la herencia de esta manera (la mayoría de los casos de uso que implican romper herencia requieren que lo hagas solo por un elemento, no todos ).
¿En qué se diferencian estas tres reglas cuando se aplican al mismo documento HTML?
html {
color: black;
background-color: white;
}
body {
color: black;
background-color: white;
}
* {
color: black;
background-color: white;
}