CSS空属性选择器[]是否有效?为何无法匹配任何元素?
关于空CSS选择器
[]的说明 []确实是语法合法的CSS选择器,但它确实无法匹配任何实际存在的HTML元素,这不是什么残留语法,而是CSS语法规则和HTML属性定义共同导致的边缘情况。
为什么语法合法?
CSS的属性选择器核心语法是[属性名],用来匹配带有指定属性的元素(比如[class]匹配所有带class属性的元素)。从语法解析层面,空的[]并没有违反CSS的语法规则——解析器会认为你要匹配带有一个无名称属性的元素,所以不会抛出语法错误。
为什么匹配不到元素?
问题出在HTML的规则上:HTML规范要求所有属性必须有合法的名称,不存在“无名称的属性”这种东西。哪怕是手写的不规范代码,也不会产生无名称的属性。所以现实中没有任何HTML元素能满足[]的匹配条件,自然就选不到元素。
有没有实际用途?
目前来看完全没有,因为没有场景会用到匹配“无名称属性元素”的需求,而且也不存在这样的元素。它更像是CSS语法规则推导出来的一个“合法但无用”的边缘案例。
你可以自己验证:在浏览器控制台执行document.querySelectorAll('[]'),返回的会是空的NodeList,进一步确认它确实匹配不到任何内容。
内容的提问来源于stack exchange,提问作者Miguel Leon
相关产品推荐
相关产品推荐

