Skip to content

CSS 组合选择符

组合选择符通过多个选择器之间的关系来选中元素:例如「某元素内部的子元素」「紧跟在某元素后面的兄弟」等。掌握它们可以更精确地写样式而不必给每个元素都加 class。

四种关系类型

写法名称含义
A B(空格)后代选择器A 的任意后代 B
A > B子选择器A 的直接子元素 B
A + B相邻兄弟选择器紧跟在 A 后面一个兄弟 B
A ~ B通用兄弟选择器A 后面所有兄弟 B

1. 后代选择器(空格)

选中「在 A 内部的任意层级」的 B,不限于直接子元素。

css
.article p {
  line-height: 1.6;
}

#header .nav a {
  color: white;
}

2. 子选择器(>)

只选 A 的直接子元素 B,不选「孙子」及更深层。

css
ul > li {
  margin-bottom: 8px;
}

.menu > li {
  display: inline-block;
}

3. 相邻兄弟选择器(+)

选中紧跟在 A 后面的那一个兄弟元素 B(同一父元素、且紧邻)。

css
h2 + p {
  margin-top: 0;   /* 紧跟在 h2 后的段落不加顶间距 */
}

input:focus + .hint {
  display: block;
}

4. 通用兄弟选择器(~)

选中 A 之后所有兄弟元素 B(同一父元素即可,不必紧邻)。

css
h2 ~ p {
  color: #555;
}

.checked ~ .content {
  display: block;
}

组合示例

css
/* 只影响 .card 直接子元素中的 p */
.card > p {
  margin-bottom: 0.5em;
}

/* 列表第一项后的所有项 */
li:first-child + li,
li:first-child ~ li {
  border-top: 1px solid #eee;
}

小结

  • A B:A 内任意后代 B。
  • A > B:A 的直接子元素 B。
  • A + B:紧跟在 A 后面的一个兄弟 B。
  • A ~ B:A 后面的所有兄弟 B。

下一节学习 CSS 伪类::hover、:first-child、:nth-child 等。