请考虑以下
HTML标记:
<input id="foo" class="bar" name="baz">
以下选择器是否相等(甚至有效):
CSS
input#foo.bar[name=baz] { } input.bar#foo[name=baz] { } input[name=baz].bar#foo { } /* etc */
是否可以将元素名称移动到比如说结束?
解决方法
它们都是有效的,因为它们符合
sequence of simple selectors的语法.它们是等价的,因为它们的含义,包括特异性,是以不依赖于组件顺序的方式定义的.
由于纯粹的语法原因,无法将元素名称(类型选择器)移动到最后.规范说明一个简单的选择器“始终以类型选择器或通用选择器开始.序列中不允许使用其他类型选择器或通用选择器.这将被解释为使类型选择器(如果存在)必须首先出现.这是很自然的,因为没有办法将它与例如前面的类选择器(无法使用空格,因为它在CSS选择器语法中具有非常特殊的含义:.bar input是一个有效的选择器,意味着与input.bar完全不同).