CSS中的E:dir(dir)和E [dir =" dir"]有什么区别?

时间:2017-01-03 12:25:20

标签: css css-selectors

W3C在Selectors 4中引入了一个新的方向检测伪类。我想知道它与普通属性选择器有什么区别:

CSS2 - 属性选择器

E[dir="rtl"] { ... }

选择器4 - dir伪类

E:dir(rtl) { ... }

是否有特定原因为此创建新的伪类?这些选择器是相同的还是它们的行为不同?是否有任何表现或特异性影响?

2 个答案:

答案 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属性设置的方向性   方向,纯粹风格。