例如,如果我们需要将div
的font-size
设置为22px
,是否有可能让该div
的后代仍然从body
继承font-size
?(或任何可继承的风格,感谢@Sourabh指出background
不是继承的)。
我认为一个关键点是,这样我们就可以更改body
或某个父级的样式,并让它通过,即使样式有中间的更改。因此,我们最好不要通过:
body, #foo * { font-size: 16px }
#foo { font-size: 22px }
这与使用事件委派时如何解决iPad上的闪烁有关,其中需要为div
设置-webkit-tap-highlight-color
,但该div
的后代最好继承该div
之上的内容(该div
的父代)。
我可以使用JavaScript将这个div
的样式放在一个临时变量中,然后更改div
的样式,然后仅将该div
的直接子项的样式更改为该临时变量的值,但为body
的样式设置的任何内容都不会被这些子项或其后代继承。
否。在DOM中,子元素将继承父元素的任何可继承CSS。您可以通过再次声明它来"重置"它,使其与父项相匹配,但您不能完全按照您的要求执行,即只更改BODY样式声明。
在我的脑海中,我能想到的一个解决方案不是依赖于来自body
元素的纯继承,而是创建一个类,并在所有想要从一个声明控制方面的元素上使用它。然而,由于CSS的特殊性,这可能仍然很棘手。
如果我正确理解你的问题,你可以使用这样的组合子:
工作示例
body, #foo { background: yellow }
#foo>* { background: blue }
或者类似的:
工作示例2
body {
background: yellow;
}
#foo {
background: blue;
}
#foo>* {
background: yellow;
}
W3C background-color
统计
初始:透明
继承:无
所有元素都是透明的,无论其父元素的background-color
如何。但该颜色是transparent
,因此父对象的颜色在子对象上可见。因此,基本上,如果你想让它们继承颜色,你就不能(至少不使用CSS)(可能有一个我不知道的技巧)。如果不希望每个元素为transparent
,则必须为其指定颜色。
答案是不完全。
可以使用initial
css关键字将属性重置为其初始值,这对于这些用户代理集样式(如-webkit-tap-highlight-color
)特别有用
请参阅此jsFiddle。
但请注意,如果父级不存在,这不是默认设置的值,而是浏览器的默认设置。特别是,body
级别的格式化是,而不是。
我还包含了default
关键字,这实际上与根本不包含任何字体大小说明符相同——它沿着级联链向上查找指定了字体大小的关键字,在本例中是在元素名称选择器上。