--- title: ':any' slug: 'Web/CSS/:any' tags: - CSS - 伪类选择器 - 实验性 translation_of: 'Web/CSS/:is' translation_of_original: 'Web/CSS/:any' ---
The :any()
pseudo-class lets you quickly construct sets of similar selectors by establishing groups from which any of the included items will match. This is an alternative to having to repeat the entire selector for the one item that varies.
译文:any()伪类可以让您快速构建类似的选择器集合,通过建立包含所有包含项的组来匹配。这是另一种选择,它必须重复整个选择器,因为其中一个项目是不同的。
:matches()
. It is likely that the syntax and name of :-vendor-any()
will be changed to reflect it in the near future.{{csssyntax}}
selector
举个例子,如以下 CSS:
/* 3 deep (or more) unordered lists use a square */ ol ol ul, ol ul ul, ol menu ul, ol dir ul, ol ol menu, ol ul menu, ol menu menu, ol dir menu, ol ol dir, ol ul dir, ol menu dir, ol dir dir, ul ol ul, ul ul ul, ul menu ul, ul dir ul, ul ol menu, ul ul menu, ul menu menu, ul dir menu, ul ol dir, ul ul dir, ul menu dir, ul dir dir, menu ol ul, menu ul ul, menu menu ul, menu dir ul, menu ol menu, menu ul menu, menu menu menu, menu dir menu, menu ol dir, menu ul dir, menu menu dir, menu dir dir, dir ol ul, dir ul ul, dir menu ul, dir dir ul, dir ol menu, dir ul menu, dir menu menu, dir dir menu, dir ol dir, dir ul dir, dir menu dir, dir dir dir { list-style-type: square; }
可以写成这样:
/* 3 deep (or more) unordered lists use a square */ :-moz-any(ol, ul, menu, dir) :-moz-any(ol, ul, menu, dir) ul, :-moz-any(ol, ul, menu, dir) :-moz-any(ol, ul, menu, dir) menu, :-moz-any(ol, ul, menu, dir) :-moz-any(ol, ul, menu, dir) dir { list-style-type: square; }
但是,不能写成这样(详见the section on performance):
:-moz-any(ol, ul, menu, dir) :-moz-any(ol, ul, menu, dir) :-moz-any(ul, menu, dir) { list-style-type: square; }
译文: 这个伪类选择器会在处理 HTML5 的 sections and headings 中尤其有用。因为 {{HTMLElement("section")}}, {{HTMLElement("article")}}, {{HTMLElement("aside")}}, 和 {{HTMLElement("nav")}} 可以被嵌套,如果不使用 :any()
,为了去匹配这些标签来给予样式会变得困难。
举个例子,当不使用 :any()
,给予不同的 DOM 结点层次深度下的所有的 {{HTMLElement("h1")}} 的元素样式时,将会变得特别的复杂。
/* Level 0 */ h1 { font-size: 30px; } /* Level 1 */ section h1, article h1, aside h1, nav h1 { font-size: 25px; } /* Level 2 */ section section h1, section article h1, section aside h1, section nav h1, article section h1, article article h1, article aside h1, article nav h1, aside section h1, aside article h1, aside aside h1, aside nav h1, nav section h1, nav article h1, nav aside h1, nav nav h1, { font-size: 20px; } /* Level 3 */ /* ... don't even think about it*/
然而,通过使用 :any()
,这将变得很简单:
/* Level 0 */ h1 { font-size: 30px; } /* Level 1 */ :-moz-any(section, article, aside, nav) h1 { font-size: 25px; } /* Level 2 */ :-moz-any(section, article, aside, nav) :-moz-any(section, article, aside, nav) h1 { font-size: 20px; } /* Level 3 */ :-moz-any(section, article, aside, nav) :-moz-any(section, article, aside, nav) :-moz-any(section, article, aside, nav) h1 { font-size: 15px; }
Bug 561154 追踪了一个关于 Gecko 作为内核的浏览器在使用 :-moz-any()
不正确的问题。在最新的浏览器(从 Firefox 12) 实现 :-moz-any()
有一个通用的规则,在使用这个伪类选择器时,当使用它作为最右边的选择器会比使用 ID, Class, 标签选择器作为最右边的选择器要来的慢。
例如:
.a > :-moz-any(.b, .c)
会比下面的表达式慢
.a > .b, .a > .c
而下面的表达式将会是最快的
:-moz-any(.a, .d) > .b, :-moz-any(.a, .d) > .c
{{CompatibilityTable}}
Feature | Firefox (Gecko) | Chrome | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | {{CompatGeckoDesktop("2")}}{{property_prefix("-moz")}} | 12.0 (534.30){{property_prefix("-webkit")}} | {{CompatUnknown}} | {{CompatUnknown}} | 5 {{property_prefix("-webkit")}} |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Phone | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basic support | {{CompatUnknown}} | {{CompatVersionUnknown}}{{property_prefix("-webkit")}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} | 5 {{property_prefix("-webkit")}} |