CSS 兄弟选择器

在 CSS 中,我们可以使用兄弟选择器来选择同一父元素下的兄弟元素。CSS 有以下 2 种兄弟选择器:

  • 相邻兄弟选择器(+)。
  • 通用兄弟选择器(~)。

CSS 相邻兄弟选择器

在 CSS 中,相邻兄弟选择器只会选择器紧跟着元素 A 之后的第一个元素 B。相邻兄弟选择器很好理解嘛,它选中的元素首先是同级的兄弟元素,并且该元素是 “相邻(紧跟后面)” 的。

语法:

A + B {
    ……
}

说明:

在相邻兄弟选择器中,A 元素和 B 元素之间用 “+” 隔开,表示选中紧跟着 A 元素后面的下一个 B 元素。

示例 1:相邻兄弟选择器(+)

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        #inner + p {
            color: red;
        }
    </style>
</head>
<body>
    <div id="lvye">
        <p>这是子元素</p>
        <p>这是子元素</p>
        <div id="inner">
            <p>这是子元素的子元素</p>
            <p>这是子元素的子元素</p>
        </div>
        <p>这是子元素</p>
        <p>这是子元素</p>
    </div>
</body>
</html>

页面效果如下图所示。

CSS 相邻兄弟选择器示例

分析:

#inner + p 表示选取 id="inner" 的元素后面的 “相邻” 的兄弟元素 p。

示例 2:相邻兄弟选择器的应用

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        li + li { 
            border-top: 2px solid red; 
        }
    </style>
</head>
<body>
    <ul>
        <li> 第 1 个元素 </li>
        <li> 第 2 个元素 </li>
        <li> 第 3 个元素 </li>
        <li> 第 4 个元素 </li>
        <li> 第 5 个元素 </li>
        <li> 第 6 个元素 </li>
    </ul>
</body>
</html>

页面效果如下图所示。

CSS 相邻兄弟选择器的应用

分析:

“li + li” 使用的是相邻兄弟选择器,表示 “选择 li 元素相邻的下一个 li 元素”。由于最后一个 li 元素没有相邻的下一个 li 元素,所以对于最后一个 li 元素,它是没有下一个 li 元素可以选取的。li + li { border-top: 2px solid red; } 达到在两两 li 元素之间添加一个边框的效果。

这是一个非常棒的技巧,在实际开发中如果想要在两两元素之间实现什么效果(border、margin 等),我们会经常用到这个技巧!小伙伴们一定要重点掌握。

CSS 通用兄弟选择器

在 CSS 中,通用兄弟选择器会选取所有跟在元素 A 之后的元素 B,只要它们有相同的父元素。

语法:

A~B {
    ……
}

说明:

在通用兄弟选择器中,A 元素和 B 元素之间用 “~” 隔开,表示选中与 A 元素后面同级的所有 B 元素。

示例 3:通用兄弟选择器(~)

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        #inner ~ p {
            color: red;
        }
    </style>
</head>
<body>
    <div id="lvye">
        <p>这是子元素</p>
        <p>这是子元素</p>
        <div id="inner">
            <p>这是子元素的子元素</p>
            <p>这是子元素的子元素</p>
        </div>
        <p>这是子元素</p>
        <p>这是子元素</p>
    </div>
</body>
</html>

页面效果如下图所示。

CSS 通用兄弟选择器示例

分析:

#inner~p 表示选取 id="inner" 的元素后面的所有兄弟元素 p。记住,兄弟选择器只选取后面的所有兄弟元素,不包括前面的所有兄弟元素。

相邻兄弟选择器 vs 通用兄弟选择器

在 CSS 中,相邻兄弟选择器与通用兄弟选择器非常相似,不过两者也有明显的区别。

  • 相邻兄弟选择器:选取元素后面 “相邻” 的某一个元素。
  • 通用兄弟选择器:选取元素后面 “所有” 的某一类元素。

注意: 不管是相邻兄弟选择器,还是通用兄弟选择器,它们都无法选取元素 “前面” 的元素。

示例 4:相邻兄弟选择器 vs 通用兄弟选择器

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        /* 通用兄弟选择器 */
        h2 ~ p { color: blue; }
        
        /* 相邻兄弟选择器 */
        h2 + p { color: red; }
    </style>
</head>
<body>
    <div>
        <h2>标题</h2>
        <p>段落1</p>
        <p>段落2</p>
    </div>
</body>
</html>

页面效果如下图所示。

相邻兄弟选择器 vs 通用兄弟选择器

分析:

首先我们要清楚,相邻兄弟选择器和通用兄弟选择器的优先级是相同的。如果两者都存在,那么后来者会覆盖先来者。

h2 ~ p { color: blue; } 会选择 h2 后面所有的 p 元素,并设置颜色为蓝色。如果没有后面的 h2 + p { color: red; },那么所有的 p 都是蓝色。

但由于后面存在 h2 + p { color: red; },而 h2 + p { color: red; } 只会选择 h2 的下一个 p 元素,并设置其颜色为红色。因此最终,第一个 p 元素颜色为红色,第二个 p 元素颜色为蓝色。

上一篇: CSS 后代选择器

下一篇: CSS 群组选择器

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号