考虑这个HTML / CSS场景:
p { content:'x'; }
p:before, p:after { content:inherit; }
<p></p>
在Firefox中,将显示“xx”。在Chrome和IE中没有显示任何内容。
在评估我认为应该发生什么时,我已经考虑了CSS 2.1规范中的以下片段:
12.1 The :before and :after pseudo-elements
:before和:after伪元素继承任何可继承的 来自文档树中元素的属性 连接。
因此,一般来说,将属性继承到:before和:after伪元素来自其包含元素应该可以工作(并且它确实适用于其他属性)。
'内容' 价值:正常|没有| [| | | attr()|公开引用| close-quote |没有公开引用| no-close-quote] + |继承
因此“inherit”是内容属性的有效值
计算值:在元素上,始终计算为“正常”。 On:before和:after,如果指定'normal',则计算为'none'。否则,对于URI值,绝对URI;对于attr()值,结果字符串;对于其他关键字,如指定的那样。
这里重要的是讨论属性的计算值。另请注意,示例中<p>
元素等元素的计算值应为normal
适用于:: before和:after伪元素
此部分列出了属性适用的元素。所有 元素被认为具有所有属性,但具有一些属性 对某些类型的元素没有渲染效果。 ...
所以“适用于”是一个渲染规则,并不确定该属性对该元素是否有意义,因为所有CSS属性总是有意义的。
每个属性也可能具有级联值'inherit',这意味着 对于给定元素,该属性采用相同的指定值 作为元素父级的属性。 '继承'值可以是 用于强制继承值,它也可以用于 通常不会继承的属性。
请注意,它是继承的指定的值,而不是计算值。对于示例的<p>
元素,content属性的指定值为“x”。
现在,在IE的DOM检查器中,p元素的内容的计算值是normal
,取自指定的值“x”。这似乎对规范是正确的,但伪元素不会继承指定的值。
在Chrome的DOM检查器中,p元素的内容的计算值根本不显示!为什么Chrome应该省略任何属性,我不知道。在元素上调用window.getComputedStyle(el).content会返回“x”。与Firefox一样,规范似乎不正确。
在Firefox的DOM检查器中,p元素的内容计算值为“x”。根据规范,这似乎是不正确的,它说计算的值应该是normal
。但是,伪元素将继承指定的值。
所以我得出结论,Firefox,IE和Chrome的所有三个行为都有某些方面的错误,但Firefox在示例方案中显示“xx”是正确的。
我错过了任何相关的内容吗?
答案 0 :(得分:-1)
根据这位绅士对可以继承的样式的回答,内容不是继承的属性。 Which CSS properties are inherited?
同样在你引用的w3.org网站上,没有关于如何处理继承属性的描述,而有关所有其他可能值的注释,似乎是`
> [ <string> | <uri> | <counter> | attr(<identifier>) | open-quote |
> close-quote | no-open-quote | no-close-quote ]+`
对我来说,这意味着继承可能是一个有效的值,但它没有实际用途。或者它可能是一个错字......?
似乎有些浏览器会对继承值进行操作,但它看起来不一致且不可靠,因此我建议避免使用它。您可以使用数据属性实现相同的功能。
我要补充的一点是,考虑到分层如何与伪元素一起工作,我或许会期望:after伪元素继承以下内容:before,if:before将其内容设置为其他内容办法。 https://css-tricks.com/pseudo-element-roundup/
但是现在没有浏览器以这种方式运行。如果你尝试这个小提琴,firefox是你看到的唯一一个,它继承自base元素。 http://jsfiddle.net/8Lsp7c7j/1/