我们可以允许将 CSS 样式从父级"pass-through"到其十进制体吗?



例如,如果我们需要将divfont-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,则必须为其指定颜色。

答案是不完全

可以使用initialcss关键字将属性重置为其初始值,这对于这些用户代理集样式(如-webkit-tap-highlight-color)特别有用

请参阅此jsFiddle。

但请注意,如果父级不存在,这不是默认设置的值,而是浏览器的默认设置。特别是,body级别的格式化是,而不是


我还包含了default关键字,这实际上与根本不包含任何字体大小说明符相同——它沿着级联链向上查找指定了字体大小的关键字,在本例中是在元素名称选择器上。