CSS属性选择器中的“ i”是什么意思?


112

我在Google Chrome用户代理样式表中找到了以下CSS选择器:

[type="checkbox" i]

什么i意思


1
@Alexander O'Mara:选择器级别4是CSS3的一部分-它只是从级别3开始的模块的下一个级别。“ CSS4”是用词不当。
BoltClock

2
@Alexander O'Mara:我很想看到它在meta上出现。特别是,我想知道我们如何处理[css4]标签的使用-我可以采取的最严格的措施是使其成为[css3]的同义词,这实际上是正确的做法。
BoltClock

1
@BoltClock Meta问题到了!顺便说一句,当您询问将答案与该问题合并时,您的意思是在此处编辑问题/答案以添加信息,还是指一个神奇的“将答案移至另一个问题”按钮?
亚历山大·奥玛拉

1
@亚历山大·奥玛拉(Alexander O'Mara):没有提出单个答案,而是合并了两个完整的问题。这是仅Mod功能。
BoltClock

1
@TylerH我们就此主题在Meta上进行了讨论。随时添加到那里的讨论。
亚历山大·奥玛拉

Answers:


132

如注释中所述,它用于不区分大小写的属性匹配。这是CSS选择器第4级的新功能。

目前,它在Chrome 49 +,Firefox 47 +,Safari 9+和Opera 37 + *中可用。在此之前,该功能仅在Chrome 39左右的Chrome用户代理样式中可用,但可以通过设置实验性功能标志为网络内容启用。

*早期版本的Opera也可能支持。

工作示例/浏览器测试:

[data-test] {
    width: 100px;
    height: 100px;
    margin: 4px;
}

[data-test="A"] {
    background: red;
}

[data-test="a" i] {
    background: green;
}
Green if supported, red if not:

<div data-test="A"></div>

如果浏览器支持此功能,则上面的方块将为绿色,否则为红色。


6
感谢您的指导!享受你的新帽子。这种事情在选择器库中起作用吗?它有什么样的浏览器支持?
本杰明·格林巴姆2014年

1
@BenjaminGruenbaum似乎只有Chrome用户代理样式可用(至少不是网站的CSS,至少现在还没有)。我找不到任何官方的兼容性文档。
亚历山大·奥玛拉

(现在合并这些问题,重新发表我先前的评论。)像这样的全新实验性标准记录得很少,这不足为奇。就是说,我的回答包含有关此方面的更多信息,即它的工作方式,为什么使用它以及如何在Chrome中实现(如问题所给)。
BoltClock

Chrome将在版本49.0(当前为Beta)中添加对此功能的支持,并在版本47.0(计划于2016年6月发布)中添加Firefox。来源:developer.mozilla.org/en-US/docs/Web/CSS/…–
错误(

1
@LWChris:我不确定是否确实存在任何此类浏览器。IE6根本不了解属性选择器,即使使用自定义数据属性,IE7也支持它们。
BoltClock

36

这是在选择器4中引入的属性选择器的大小写不敏感标志。显然,他们早在2014年8月就将这项功能的实现嵌入Chrome。

简而言之:此标志告诉浏览器type不区分大小写地匹配属性的各个值。HTML中属性值的默认选择器匹配行为是区分大小写的,这通常是不希望的,因为许多属性被定义为具有不区分大小写的值,并且您要确保选择器选择所有正确的元素,而不区分大小写。type是此类属性的一个示例,因为它是枚举的属性,并且枚举的属性被称为具有不区分大小写的值

以下是相关的提交:

  • 179370 —实施
  • 179401 —对UA样式表的更改,如问题中的屏幕快照所示

请注意,它当前隐藏在“启用实验性Web平台功能”标记中,您可以从chrome:// flags /#enable-experimental-web-platform-features访问该标记。这可以解释为什么该功能在很大程度上未引起注意-隐藏在该标志后面的功能只能在内部使用,除非启用,否则不能在面向公众的代码(例如作者样式表)中使用,因为它们是试验性的,因此尚未准备好用于生产。

您可以使用以下测试用例-启用和禁用该标志时比较结果:

span[data-foo="bar"] {
    color: red;
}

span[data-foo="bar" i] {
    color: green;
}
<span data-foo="bar">If all of this text is green,</span>
<span data-foo="Bar">your browser supports case-insensitive attribute selectors.</span>

请注意,我使用自定义数据属性,而不是type显示它几乎可以与任何属性一起使用。

在撰写本文时,我还没有其他实现方式,但是希望其他浏览器会很快赶上。这是对标准的相对简单但极其有用的补充,我希望将来能够使用它。


我有“那个下午”的疲劳……阅读完W3规范后,我仍然不完全了解,为此,在CSS中实际的实际用法是什么?
马特

2
@Matt:属性选择器匹配如HTML5所述区分大小写,这在许多情况下是不希望的,因为HTML5允许某些属性使用不区分大小写的值。您可以使用此标志来确保您选择正确的元素,而不管大小写如何。例如,在屏幕截图中,您可以看到它正在寻找input[type="search" i],它将与元素匹配<input type="SEARCH">
BoltClock

1
我可以确认它与Chromium版本43.0.2357.130并启用了“启用实验性Web平台功能”有关。
罗伯特·西默
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.