:before
并且:after
不需要为被替换元素工作,CSS 规范没有指定它们如何为它们工作,并且被替换元素的概念有些模糊。
CSS 2.1 规范清楚地表明它们可以用于替换元素,只是说它没有“完全定义”如何。这涉及到一个被替换的元素应该有自己的视觉渲染,它不受 CSS 控制,而伪元素应该在元素的内容中添加一些东西。该规范补充说,这将在未来的规范中“更详细地”定义,但到目前为止还没有发生。
浏览器供应商只是决定通过根本不为某些元素实现这些伪元素来避免问题。
根本不清楚“替换元素”是什么意思,意思似乎发生了一些变化。它通常被解释为与空元素(具有EMPTY
声明内容的元素,即不能有任何内容的元素)的含义相同,但 CSS 2.1 本身显示了带有选择器的示例样式表br:before
(尽管浏览器忽略了这一点,实现br
了自己的方式)。可以说,越来越多的元素已经进入了 CSS 渲染的范围,至少部分是这样。例如,一个input
元素(包括它的字体、颜色等)在现代浏览器中很大程度上可以通过 CSS 进行控制。
:after
当前的浏览器(Firefox、IE 、Chrome)似乎不支持:before
除hr
. 对于hr
, IE 和 Chrome 将生成的内容放在一个带边框的框内,这是 ; 的实现hr
。内容使盒子更高。Firefox 将两个 (!) 伪元素的内容放在作为其实现的水平规则之后hr
。这种变体说明了 CSS 2.1 中提到的“交互”问题的种类。
通常声称这些伪元素不能用于空元素,因为它们的 HTML 定义不允许任何内容。这是一个类别错误。标记语言的语法规则并不限制您在 CSS 中可以做的事情
总而言之,:after
并且:before
目前不能用于空元素(除了少量用于hr
),但这主要是由于实现,并且将来可能会改变。