我有一个联系人列表,它生成为一个无序列表,并data
为每个列表项分配了 HTML5 属性。属性的值是data
用于按字母顺序排列的单个字母。我无法控制生成的标记,但我需要在每个字母的第一个条目之前插入一个节标题。我希望用:before
伪元素来实现这一点。没有什么不寻常的。我选择的 CSS 选择器有很大的自由度,因为这个项目只支持 IE9+。
示例标记:
<ul>
<li data-name="a"> ... </li>
<li data-name="a"> ... </li>
<li data-name="a"> ... </li>
<li data-name="z"> ... </li>
<li data-name="z"> ... </li>
<li data-name="z"> ... </li>
</ul>
示例 CSS:
li:not([data-name="a"] ~ [data-name="a"]):before { ... }
不幸的是,这个选择器不起作用,我不完全确定为什么不这样做,因为如果我把它分成几个部分,一切都只是花花公子。
一般的兄弟组合器本身就可以正常工作,否定伪类也是如此,只是当它们组合在一起时,什么都不会发生。
这也不起作用:
li:not(li[data-name="a"] ~ li[data-name="a"]):before { ... }