当前位置:首页 > 教程 > CSS > CSS选择器

2.3 CSS组合选择器

组合选择器

选择器 说明 示例
多元素选择器 同时匹配所有div,p元素 div,p{color:#f00;}
后代元素选择器 匹配所有属于nav后代的li元素,中间用空格 #nav li{font-size:16px;}
子元素选择器 匹配所有div的子元素span div>span{background:#ccc;}
相邻元素选择器 匹配所有紧随p元素后的同级span元素 p+span{background:#ccc;}

一、多元素选择器

如果您想把很多元素显示为灰色,可以使用类似如下的规则:

body, h2, p, table, th, td {color:gray;}

说明:将选择器放在规则左边,然后用逗号分隔,就定义了一个规则。其右边的样式(color:gray;)将应用到多个选择器所引用的元素。逗号告诉浏览器,规则中包含多个不同的选择器。

如果不用逗号分开写声明,那么写法如下:

body {color:gray;}
h2 {color:gray;}
p {color:gray;}
table {color:gray;}
th {color:gray;}
td {color:gray;}

说明:通过以上两组规则能得到同样的结果,不过可以很清楚地看出哪一个写起来更容易,所以推荐用第一种组合的方式写,这样更简洁也更省时间。

二、后代元素选择器

后代选择器(descendant selector)又称为包含选择器。后代选择器可以选择作为某元素后代的元素。

举例来说,如果您希望只对 h1 元素中的 em 元素应用样式,可以这样写:

h1 em {color:red;}

上面这个规则会把作为 h1 元素后代的 em 元素的文本变为 红色。其他 em 文本(如段落或块引用中的 em)则不会被这个规则选中:

<h1>This is a <em>important</em> heading</h1>
<p>This is a <em>important</em> paragraph.</p>

运行后如图:

2.3 CSS组合选择器

说明:h1 em 选择器可以解释为 “作为 h1 元素后代的任何 em 元素”。如果要从左向右读选择器,可以换成以下说法:“包含 em 的所有 h1 会把以下样式应用到该 em”。

三、子元素选择器

与后代选择器相比,子元素选择器(Child selectors)只能选择作为某元素子元素的元素。

如果您不希望选择任意的后代元素,而是希望缩小范围,只选择某个元素的子元素,请使用子元素选择器(Child selector)。

例如,如果您希望选择只作为 h1 元素子元素的 strong 元素,可以这样写:

h1 > strong {color:red;}

这个规则会把第一个 h1 下面的两个 strong 元素变为红色,但是第二个 h1 中的 strong 不受影响:

<h1>This is <strong>very</strong> <strong>very</strong> important.</h1>
<h1>This is <em>really <strong>very</strong></em> important.</h1>

运行后如图:

2.3 CSS组合选择器

说明:上面示例第二个h1当中虽然也有strong标签,但是它并不是h1>strong指定的规则,因为strong嵌套在em标签里面,不是h1的子元素。

四、相邻元素选择器

相邻元素选择器又称为“CSS 相邻兄弟选择器”,如果需要选择紧接在另一个元素后的元素,而且二者有相同的父元素,可以使用相邻兄弟选择器。

例如,如果要增加紧接在 h1 元素后出现的段落的上边距,可以这样写:

h1 + p {margin-top:50px;}

说明:相邻兄弟选择器使用了加号(+),即相邻兄弟结合符。这个选择器读作:“选择紧接在 h1 元素后出现的段落,h1 和 p 元素拥有共同的父元素”。

请看下面这个文档树片段:

<div>
  <ul>
    <li>List item 1</li>
    <li>List item 2</li>
    <li>List item 3</li>
  </ul>
  <ol>
    <li>List item 1</li>
    <li>List item 2</li>
    <li>List item 3</li>
  </ol>
</div>

在上面的片段中,div 元素中包含两个列表:一个无序列表,一个有序列表,每个列表都包含三个列表项。这两个列表是相邻兄弟,列表项本身也是相邻兄弟。不过,第一个列表中的列表项与第二个列表中的列表项不是相邻兄弟,因为这两组列表项不属于同一父元素(最多只能算堂兄弟)。

请记住,用一个结合符只能选择两个相邻兄弟中的第二个元素。请看下面的选择器:

li + li {font-weight:bold;}

运行后如图:

2.3 CSS组合选择器

说明:上面这个选择器只会把列表中的第二个和第三个列表项变为粗体。第一个列表项不受影响。

最后说一下,后面两种子元素选择器,相邻元素选择器用的相对较少,大家做一个简单的了解即可。

你觉得文章内容怎么样

阿里云代金券 100 云产品通用

有效期30天 首购用户

立即领取
推荐宝塔面板 0 安全高效的

服务器运维面板

立即领取