将CSS应用到html,body和通用select器*有什么区别?
这三个规则在应用于相同的HTML文档时有何不同?
html { color: black; background-color: white; } body { color: black; background-color: white; } * { color: black; background-color: white; }
-
html { color: black; background-color: white; }
此规则将颜色应用于
html
元素。html
元素的所有后代inheritance其color
(但不包括background-color
),包括body
。body
元素没有默认的背景颜色,这意味着它是透明的,所以html
的背景将直到显示,除非你为body
设置背景。尽pipe
html
的背景被绘制在整个视口上,但html
元素本身并不会自动跨越视口的整个高度。 背景只是传播到视口。 看到这个答案的细节。 -
body { color: black; background-color: white; }
此规则将颜色应用于
body
元素。body
元素的所有后代inheritance它的color
。与自动将
html
的背景传播到视口的方式类似,html
的背景将自动传播到html
,除非您为html
设置背景。 看到这个答案的解释。 正因为如此,如果你只需要一个背景(通常情况下),不pipe你使用第一条规则还是第二条规则都不会有什么实际的区别。但是,您可以将
html
和body
背景样式与其他技巧结合使用,以获得一些漂亮的背景效果,就像我在这里所做的那样 。 请参阅上面的链接答案。 -
* { color: black; background-color: white; }
这个规则将颜色应用于每个元素 ,所以这两个属性都不会被隐式地inheritance。 但是你可以很容易地用其他任何东西来覆盖这个规则,包括上面两个规则中的任何一个,因为
*
在select器特殊性中几乎没有意义。因为这会彻底地破坏通常inheritance的任何属性(如
color
的inheritance链,所以在*
规则中设置这些属性被认为是不好的做法,除非有很好的理由以这种方式破坏inheritance(大多数涉及中断inheritance的用例需要你只做一个元素,而不是全部 )。