首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

:any

这是一项实验技术

由于该技术的规范尚未稳定,请查看各浏览器的兼容性表格来查看用法。另外还需注意,随着规范的变化,实验技术的语法和行为在未来版本的浏览器中可能会发生变化。

:any()伪类可以创建一个包含多个选项的选择器,满足其中的任何一个选项的对象都将被匹配。对于相似对象的选择,它不用反复多次的构建多个选择器,因此是一个很好的选择。

代码语言:javascript
复制
/* Select any h2 inside a section, article, aside, or nav */
/* Currently supported with -moz- and -webkit- prefixes */
:-moz-any(section, article, aside, nav) h2 {
  font-size: 4.5rem;
}

:-webkit-any(section, article, aside, nav) h2 {
  font-size: 4.5rem;
}

注意:这个伪类正在CSS Selectors Level 4:matches()的名字进行标准化。它的语法和名称很可能会在不久的将来发生变化。

语法

形式语法

代码语言:javascript
复制
:-moz-any( <selector># )
:-webkit-any( <selector># )

selector选择器。这可能是一个简单的选择器或由CSS 3简单的选择器组成的多重选择器,也可能包括后代的组合器。

注意:选择器可能包含伪元素,并且允许的唯一组合器是后代组合器。

实例

例如,以下CSS:

代码语言:javascript
复制
/* 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;
}

可以用以下文字取代:

代码语言:javascript
复制
/* 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;
}

但是,请不要使用以下内容:(请参阅下面的性能部分。)

代码语言:javascript
复制
:-moz-any(ol, ul, menu, dir) :-moz-any(ol, ul, menu, dir) :-moz-any(ul, menu, dir) {
  list-style-type: square;
}

笔记

在处理HTML5 部分和标题时,此属性特别有用。因为<section><article><aside>,和<nav>可以嵌套,而没有:any(),要给这些元素设置彼此匹配的样式是比较棘手的。

例如,如果没有:any(),给所有处于不同深度的<h1>元素设置风格可能会非常复杂:

代码语言:javascript
复制
/* 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(),会使该项工作容易得多:

代码语言:javascript
复制
/* 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;
}

性能和特性问题

错误561154跟踪了Gecko的特殊性:-moz-any()不正确的问题。目前(从Firefox 12开始)的实现将:-moz-any()放入了通用规则中,这意味着使用它作为最右边的选择器比使用ID,类或标签作为最右边的选择器要慢。

例如:

代码语言:javascript
复制
.a > :-moz-any(.b, .c)

慢于:

代码语言:javascript
复制
.a > .b, .a > .c

以下更快:

代码语言:javascript
复制
:-moz-any(.a, .d) > .b, :-moz-any(.a, .d) > .c

浏览器兼容性

Feature

Firefox (Gecko)

Chrome

Internet Explorer

Opera

Safari

Basic support

4.0 (2)-moz

12.0 (534.30)-webkit

?

?

5 -webkit

Feature

Android

Chrome for Android

Firefox Mobile (Gecko)

IE Phone

Opera Mobile

Safari Mobile

Basic support

?

(Yes)-webkit

?

?

?

5 -webkit

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com