【问题标题】:Is it possible to have a pseudo element within pseudo element?伪元素中是否可以有伪元素?
【发布时间】:2013-07-25 23:17:12
【问题描述】:
div { position: relative; width: 100px; height: 100px; background: #f00; }
div::before { position: absolute; content: ''; width: 75px; height: 75px; background: #0f0; }
div::before::before { position: absolute; content: ''; width: 50px; height: 50px; background: #00f; }

是我的语法错误还是不支持伪元素中的伪元素?

请注意,我知道 ::after 伪元素,但我需要另一个伪元素中的实际元素来实现,例如::after 不够的地方是:

div { position: relative; width: 100px; height: 100px; background: #f00; }
div::before { position: absolute; content: ''; right: 0; bottom: 0; width: 75px; height: 75px; background: #0f0; }
div::after { position: absolute; content: ''; left: 0; top: 0; width: 50px; height: 50px; background: #00f; }

因为::after 是相对于元素而不是::before。

【问题讨论】:

  • 因为你在做absolute定位,所以没有理由不使用:after,它只需要在某些方面计算它的位置:before的位置(见@987654322 @ 它将:after 放在它所在的位置,如果根据上面的代码实际上可能是:before:before)。

标签: css css-selectors pseudo-element


【解决方案1】:

是我的语法错误还是不支持伪元素中的伪元素?

如果我理解正确,这是不可能的。从Selectors Level 3 开始,您不能链接多个伪元素,尽管将来可能会允许这样做。

每个选择器只能出现一个伪元素,如果出现,它必须出现在代表选择器主题的简单选择器序列之后。 注意:本规范的未来版本可能允许每个选择器有多个伪元素。


有趣的是,您可以将::first-letter & ::before / ::after 伪元素与占位符伪元素链接起来,例如

::-webkit-input-placeholder::first-letter {
color: purple;  
}

http://jsfiddle.net/k3yb6/1/

【讨论】:

  • “一旦选择器级别 4 被浏览器采用,它显然会被允许”——选择器级别 4 也不允许(当前)多个伪元素:dev.w3.org/csswg/selectors4/#pseudo-elements。
  • @Paul D. Waite:没错,但考虑到它是 WD,到 CR 或更远的时候,事情可能会发生变化。感谢您指出这一点。
  • 确实如此。我认为 W3C 规范中有时会出现类似的行文是投机性的(即不是由于实施它们所描述内容的实际计划),但无论哪种方式我都没有任何实际知识。
  • @Paul, Adrift:早在生成内容级别 3 时就已经探索过了:w3.org/TR/css3-content/#nesting 然而,不用说,它从未起飞。还要注意模块的年龄——如果它没有等待重写,它可能已经被放弃了。
猜你喜欢
  • 2021-06-04
  • 1970-01-01
  • 1970-01-01
  • 2015-01-03
  • 2012-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-11
相关资源
最近更新 更多