W3C在Selectors 4中引入了一个新的方向检测伪类。我想知道它与普通属性选择器有什么区别:
CSS2 - 属性选择器
E[dir="rtl"] { ... }
选择器4 - dir伪类
E:dir(rtl) { ... }
是否有特定原因为此创建新的伪类?这些选择器是相同的还是它们的行为不同?是否有任何表现或特异性影响?
答案 0 :(得分:7)
是否有为此创建新伪类的特定原因?
与{2}中的属性选择器一起引入:lang()
伪类的原因相同。 1 请参阅What's the difference between html[lang="en"] and html:lang(en) in CSS?
这些选择器是相同的还是表现不同?
请参阅我对相关问题的回答。这里是Selectors 4的相关引用,为了完整起见:
区别:dir(C)和' [dir = C]''那是' [dir = C]''仅对元素上的给定属性执行比较,而:dir(C)伪类使用UAs对文档语义的了解来执行比较。例如,在HTML中,元素的方向性继承,以便没有dir属性的子节点与具有有效dir属性的最近祖先具有相同的方向性。另一个例子,在HTML中,匹配' [dir = auto]''将匹配:dir(ltr)或:dir(rtl),具体取决于由其内容确定的元素的已解决方向性。 [HTML5]
为了使:dir()
和:lang()
之间的相似性达到归宿,如果仔细观察,第一句话实际上是 word-for-word copy 描述:lang()
的部分中的相同段落。
:lang()
的其他大部分内容都是新的,因为与:dir()
一起,选择器4还为:lang()
引入了增强功能。
是否有任何表现或特异性影响?
由于对上一个问题的回答是他们的行为不同,因此表现无关紧要。
没有特异性含义,因为伪类和属性选择器具有同等特异性。
1 我不清楚为什么将:dir()
添加到Selectors需要将近15年的时间,但是你去了。
答案 1 :(得分:2)
根据MDN,存在一些微妙的差异:
:dir CSS伪类根据方向性匹配元素 包含在其中的文本。在HTML中,方向由确定 dir属性。对于其他文档类型,可能还有其他类型 文件确定语言的方法。
请注意,伪类:dir()的用法不等同于 使用[dir = ...]属性选择器。后者匹配值 dir并且在没有设置属性时不匹配,即使在那里 case该元素继承其父元素的值;同样[dir = rtl] 或者[dir = ltr]与dir上可以使用的自动值不匹配 属性。相反,:dir()将匹配计算的值 UA,被继承或自动价值。
另外:dir()只考虑方向性的语义值, 文档中定义的那个,大多数时候是HTML。它不会 考虑样式方向性,由CSS属性设置的方向性 方向,纯粹风格。