【发布时间】:2016-02-29 12:48:59
【问题描述】:
通用选择器星号 (*) 的独特之处在于它匹配任何类型的单个元素。
所以如果我在一个 div 中有不同的元素并且我想用一个选择器来选择它们,我可以为所有内部元素添加一个类(类似于.parent .class {})或者我可以使用通用选择器(@ 987654325@)
然后我看到the spec 为:lang 伪元素(尤其是结尾):
注意 [lang|=xx] 和 :lang(xx) 之间的区别。在这个 HTML 例如,只有 BODY 匹配 [lang|=fr] (因为它有一个 LANG 属性)但是 BODY 和 P 都匹配 :lang(fr) (因为两者 是法语)。
<body lang=fr>
<p>Je suis Français.</p>
</body>
这意味着:lang选择器所针对的元素中的所有元素也都是目标。 (哇!)
假设我想为 div 中的所有元素添加边框 - 而不是选择器 div * {} 我理论上可以使用 :lang
Here's a demo
据我所知,唯一的区别是 :lang 选择器选择父级以及所有子级(当然技术差异是 :lang 具有更大的特异性)....然而
如果 :lang 选择器以包含整个文档的语义方式应用 - 在 html 元素上使用 lang 属性 - 我认为上述差异并不重要。
所以基本上我的问题是:
假设我的html元素有lang="en"属性:
我可以替换使用通用选择器的代码吗,例如:
* { box-sizing: border-box; }
与:
:lang(en) {
box-sizing: border-box;
}
代码似乎可以工作 (DEMO),而且它似乎也是语义的,但我想知道上述技术是否存在某些原因/缺点。
【问题讨论】:
-
如果在最后一个 div 中添加
lang="ch"会怎样? -
通常文档是用一种语言编写的,但即使我添加了不同语言的部分 - 很有可能我还是想单独设置该部分的样式
-
我很好奇你为什么要改用
lang。对我来说,意图是完全不同的。一个是“所有元素”,另一个是“这种语言的元素”,在您的情况下恰好是同一件事,但在概念上是不同的。如果您的意图是“所有元素”,那么我更喜欢*,因为它的字符更少且更普遍认可。 IMOlang应该保留给实际显示不同语言的页面,这些页面需要不同的样式。 -
是的,一般来说你是对的,虽然一个文本可以有多种语言,一次只能看到一种语言。无论如何,我的示例旨在表明
:lang和*不可互换:所有英文元素可能与所有元素不同。 -
@CodingWithSpike 也许会有某种性能提升?虽然我承认我听说以这种方式使用通用选择器不会影响性能
标签: css css-selectors