CSS 相邻兄弟选择器

相邻兄弟选择器(Adjacent sibling selector)可选择紧接在另一元素后的元素,且二者有相同父元素。


选择相邻兄弟

如果需要选择紧接在另一个元素后的元素,而且二者有相同的父元素,可以使用相邻兄弟选择器(Adjacent sibling selector)。

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

  1. h2 + p {margin-top:50px;}

这个选择器读作:“选择紧接在 h1 元素后出现的段落,h1 和 p 元素拥有共同的父元素”。

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <style type="text/css">
  5. h2 + p {margin-top:50px;}
  6. </style>
  7. </head>
  8. <body>
  9. <h2>这是一个标题。</h2>
  10. <p>这是一个段落。</p>
  11. <p>这是一个段落。</p>
  12. <p>这是一个段落。</p>
  13. </body>
  14. </html>

语法解释

相邻兄弟选择器使用了加号(+),即相邻兄弟结合符(Adjacent sibling combinator)。

注释:与子结合符一样,相邻兄弟结合符旁边可以有空白符。请看下面这个文档树片段:

  1. <div>
  2. <ul>
  3. <li>List item 1</li>
  4. <li>List item 2</li>
  5. <li>List item 3</li>
  6. </ul>
  7. <ol>
  8. <li>List item 1</li>
  9. <li>List item 2</li>
  10. <li>List item 3</li>
  11. </ol>
  12. </div>

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

  1. li + li {font-weight:bold;}

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

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <style type="text/css">
  5. li + li {font-weight:bold;}
  6. </style>
  7. </head>
  8. <body>
  9. <div>
  10. <ul>
  11. <li>列表 项目 1</li>
  12. <li>列表 项目 2</li>
  13. <li>列表 项目 3</li>
  14. </ul>
  15. <ol>
  16. <li>列表 项目 1</li>
  17. <li>列表 项目 2</li>
  18. <li>列表 项目 3</li>
  19. </ol>
  20. </div>
  21. </body>
  22. </html>

结合其他选择器

相邻兄弟结合符还可以结合其他结合符:

  1. html > body table + ul {margin-top:20px;}

这个选择器解释为:选择紧接在 table 元素后出现的所有兄弟 ul 元素,该 table 元素包含在一个 body 元素中,body 元素本身是 html 元素的子元素。

分类导航