我正在使用以下定义(改编自CSS2规范http://www.w3.org/TR/CSS21/cascade.html#specificity)
使用以下样式(我的计算在右侧):
.content {color: green;} /* a=0 b=0 c=1 d=0 -> 0,0,1,0 */
.content:hover {color: yellow;} /* a=0 b=0 c=2 d=0 -> 0,0,2,0 */
li {color: orange;} /* a=0 b=0 c=0 d=1 -> 0,0,0,1 */
li:first-line {color: pink;} /* a=0 b=0 c=0 d=2 -> 0,0,0,2 */
以及以下html
<li class="content">The first line</li>
当我在浏览器中打开它时,文本行是粉红色的。我以为它会是绿色的,在悬停时,它会是黄色的。我认为元素和伪元素(计算中的d)的重量小于类和伪类(计算中的c)。
答案 0 :(得分:2)
您对特异性的理解是完全正确的。伪类和类在特异性上彼此相等,并且它们都比伪元素和元素(它们也彼此相等)排名更高。根据您已链接的规范,这是explained pretty clearly。
那么为什么您在print(file.read())
file.seek(0, os.SEEK_SET)
for line in file:
...
中设置的规则优先于您在li:first-line
中设置的规则,如果后者更具体?
因为从CSS的角度来看,伪元素是元素。这意味着您有一个.content:hover
元素 - 如果您没有设置它的样式 - 将从{{1}继承 li:first-line
或color: green
}和color: yellow
规则。但是直接定位元素的规则始终优先于继承的规则,而.content
选择器的目标是 <{1}}中的伪元素。 .content:hover
规则获胜只是因为它们没有被继承,:first-line
和li
选择器的规则被继承(由{{{}中包含的伪元素1}})。特异性规则是红鲱鱼;他们甚至不会发挥作用。
答案 1 :(得分:0)
我认为:first-line
比.content
更具体。所以文本的第一行是粉红色,但列表的子弹是绿色(悬停时为黄色)。对我来说,一切都很好。
想象一下,:first-line
选择器只是一个嵌套的文本节点选择器,如:
<li class="content">
<text:text>The first line</text:text><br />
The second line
</li>
它在嵌套元素上运行,因此它比任何其他选择器更重要。