CSS_复合选择器

目录

[7. 复合选择器](#7. 复合选择器)

[7.1 交集选择器](#7.1 交集选择器)

[7.2 并集选择器](#7.2 并集选择器)

[7.3 后代选择器](#7.3 后代选择器)

[7.4 子代选择器](#7.4 子代选择器)

[7.5 兄弟选择器](#7.5 兄弟选择器)

[7.6 属性选择器](#7.6 属性选择器)

[7.7 伪类选择器](#7.7 伪类选择器)

7.7.1动态伪类

7.7.2结构伪类

7.7.3否定伪类

[7.7.4 UI伪类](#7.7.4 UI伪类)

[7.7.5 目标选择器](#7.7.5 目标选择器)


7. 复合选择器

7.1 交集选择器

作用:选中同时符合多个条件的元素。

交集有并且的含义(通俗理解:即......又......的意思,例如:年轻且美丽)

语法:选择器1选择器2选择器3...选择器n{}

举例:

css 复制代码
p.beauty{
            color: blue;
        }

注意点:

  1. 有标签名,标签名必须卸载前面。

  2. id选择器,理论上可以作为交集的条件,但在实际应用中几乎不用------没有意义。

  3. 交集选择器中不可能 出现两个元素选择器 ,因为一个元素,不能即是p元素又是span元素。

  4. 用的最多的交集选择器:元素选择器配合类名选择器,例如:p.beauty

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>交集选择器</title>
    <style>
        .beijing {
            color: gold;
        }
        .beauty {
            color: red;
        }
        p.beauty{
            color: blue;
        }
        /* p.beauty#ls{
            color: aqua;
        } 
        一般不用这种形式id可以直接定位*/
        /* #ls{
            color: aquamarine;
        } */
    </style>
</head>
<body>
    <h2 class="beijing">北京大学</h2>
    <h2 class="qinghua">清华大学</h2>
    <hr>
    <p class="beauty" id="ls">李四</p>
    <p class="beauty">张三</p>
</body>
</html>
7.2 并集选择器

作用:选中多个选择器对应的元素,又称:分组选择器

语法:选择器1,选择器2,选择器3...选择器n{}

选择器之间+,

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>并集选择器</title>
    <style>
        .beijing {
            color: gold;
           
        }
        .beauty {
            color: red;
        }
        .beauty,.beijing{
            font-size: 50px;
            background: gray;
            width: 200px;
        }
    </style>
</head>
<body>
    <h2 class="beijing">北京大学</h2>
    <h2 class="qinghua">清华大学</h2>
    <hr>
    <p class="beauty" id="ls">李四</p>
    <p class="beauty">张三</p>
</body>
</html>
7.3 后代选择器

作用:选中指定元素中,复合要求的后代元素。

语法:选择器1 选择器2 选择器3 ...... 选择器n {} (先写祖先,再写后代)

选择器之间,用空格隔开。

css 复制代码
/* 选中ul中的所有li */
ul li {
color: red;
}
/* 选中ul中所有li中的a */
ul li a {
color: orange;
}
/* 选中类名为subject元素中的所有li */
.subject li {
color: blue;
}
/* 选中类名为subject元素中的所有类名为front-end的li */
.subject li.front-end {
color: blue;
}
html 复制代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>后代选择器</title>
    <style>
        ul li{
            color: blue;
        }
        ol li{
            color: aquamarine;
        }
        ul li a{
            color: brown;
        }
        .suject li{
            color: seagreen;
        }
        
    </style>
</head>
<body>
    <!-- 无序 -->
    <ul>
        <li>美甲</li>
        <li>电视剧</li>
        <li>
            <a href="#">剪头</a>
        </li>
        <div>
            <li>打篮球</li>
        </div>
    </ul>
    <!-- 有序 -->
    <hr>
    <ol>
        <li>小李</li>
        <li>小王</li>
        <li>小刘</li>
    </ol>
    <ol class="suject">
        <li>数据结构</li>
        <li>大物</li>
        <li>高数</li>
    </ol>
</body>
</html>
7.4 子代选择器

语法:选择器1 > 选择器2 > 选择器3 > ...... 选择器n {}

选择器之间,用 > 隔开, > 可以理解为:" xxx 的子代",其实就是儿子的意思。

选择器 1234....n ,可以是我们之前学的任何一种选择器。

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>子代选择器</title>
    <style>
        div>a{
            color: aquamarine;
        }
        div>p>a{
            color: blue;
        }
    </style>
</head>
<body>
    <div>
        <a href="#">李四</a>
        <a href="#">王五</a>
        <p>
            <a href="#">张三</a>
        </p>
    </div>
</body>
</html>

注意:

  1. 子代选择器,最终选择的是子代,不是父级。

  2. 子、孙子、重孙子、重重孙子 ...... 统称后代!, 就是指儿子

7.5 兄弟选择器

相邻兄弟选择器:

作用:选中指定元素后,符合条件的相邻兄弟元素。

所谓相邻,就是紧挨着他的下一个,简记:睡在我下铺的兄弟。

语法: 选择器1+选择器2 {} 。

css 复制代码
div+p{
            color: brown;
        }

通用兄弟选择器:

作用:选中指定元素后,符合条件的所有兄弟元素。(简记:睡在我下铺的所有兄弟)

语法: 选择器1~选择器2 {} 。

实例:

css 复制代码
div~p{
            color: brown;
        }
html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>兄弟选择器</title>
    <style>
        /* 与div紧紧相邻的兄弟p元素(在div下面) */
        div+p{
            color: brown;
        }
         /* 与div后所有的兄弟p元素(在div下面) */
        div~p{
            color: brown;
        }
    </style>
</head>
<body>
    <p>广州</p>
    <div>大学</div>
    <p>上海</p>
    <p>北京</p>
</body>
</html>

注意:两种兄弟选择器,选择的是下面的兄弟。

7.6 属性选择器

作用:选中属性值符合一定要求的元素。

语法:

  1. 属性名\] 选中**具有**某个属性的元素。

  2. 属性名\^="值"\] 选中包含某个属性,且属性值以指定的值**开头**的元素。

  3. 属性名\*="值"\] 选择包含某个属性,属性值**包含**指定值的元素。

/* 选中具有title属性的元素 /
div[title]{color:red;}
/
选中title属性值为atguigu的元素 /
div[title="atguigu"]{color:red;}
/
选中title属性值以a开头的元素 /
div[title^="a"]{color:red;}
/
选中title属性值以u结尾的元素 /
div[title$="u"]{color:red;}
/
选中title属性值包含g的元素 /
div[title
="g"]{color:red;}

复制代码
##### **7.7 伪类选择器**

作用:选中特殊状态的元素。
> 如何理解"伪" ? --- 虚假的,不是真的。
>
> 如何理解"伪类"? --- 像类( class ),但不是类,是元素的一种特殊状态

###### **7.7.1动态伪类**

1. `:link` 超链接**未被访问**的状态。

<!-- -->

1. :`visited` 超链接**访问过**的状态。

<!-- -->

1. :`hover` 鼠标**悬停**在元素上的状态。

<!-- -->

1. :`active` 元素**激活**的状态。

<!-- -->

1. :`focus` 获取焦点的元素。

> * `link`和`visited`是a标签独有的属性,`active`和`hover`是使用元素都具有
>
> * 什么是激活?------ 按下鼠标不松开。
>
> * 注意点:遵循 LVHA 的顺序,即: link 、 visited 、 hover 、 active 。
>
> * 表单类元素才能使用 :focus 伪类。
>
> * 当用户:点击元素、触摸元素、或通过键盘的 " tab " 键等方式,选择元素时,就是获
>
>   得焦点。

```html
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>动态</title>
    <style>
        /* 选中的是没有访问过的a元素 */
        a:link{
            color: orange;
        }
        /* 选中的是访问过的a元素 */
        a:visited{
            color: gray;
        }
        /* 选中的是鼠标悬浮状态的a元素 */
        a:hover{
            color: skyblue;
        }
        /* 选中的是鼠标点击激活状态的a元素 */
        a:active{
            color: greenyellow;
        }
        /*  */
        input:focus {
            background-color: green;
        }
    </style>
</head>
<body>
    <a href="https://www.baidu.com" target="_blank">baidu</a>
    <a href="https://www.jingdong.com">jingdong</a>
    <br>
    <input type="text" name="" id="">
</body>
7.7.2结构伪类

常用的:

  1. :first-child 所有兄弟元素中的第一个
  1. :last-child 所有兄弟元素中的最后一个
  1. :nth-child(n) 所有兄弟元素中的 n
  1. :first-of-type 所有同类型 兄弟元素中的第一个
  1. :last-of-type 所有同类型 兄弟元素中的最后一个
  1. :nth-of-type(n) 所有同类型 兄弟元素中的 第n个

关于 n 的值:

  1. 0 或 不写 :什么都选不中 ------ 几乎不用。
  1. n :选中所有子元素 ------ 几乎不用。
  1. 1~正无穷的整数 :选中对应序号的子元素。
  1. 2n 或 even :选中序号为偶数的子元素。
  1. 2n+1 或 odd :选中序号为奇数的子元素。
  1. -n+3 :选中的是前 3 个。
html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>结构伪类</title>
    <style>
        /* 选中div的第一个儿子p元素 结构1*/
        /* div>p:first-child{
            color: #de3939;
        } */
        /* 选中div的第一个儿子p元素 结构2*/
        div>p:first-child {
            color: #341dc9;
        }

        /* 选中div的后代p元素,且p的父级是谁无所谓
        ,但p必须是其父亲的第一个儿子 结构3*/
        div p:first-child {
            color: #0dc62f;
        }

         /* 选中div的后代p元素,且p的父级是谁无所谓
        ,但p必须是其父亲的第一个儿子 结构3*/
        p:first-child {
            color: #0dc62f;
        }
         /* 选中div的第n个儿子p元素(按照所以儿子计算) */
        div>p:nth-child(3) {
            color: brown;
        }
        div>p:nth-child(2n+1) {
            color: rgb(65, 42, 165);
        }
        /* 所有同类型兄弟元素中的第一个 */
        div>p:first-of-type{
            color: rgb(5, 96, 66);
        }
         /* 所有同类型兄弟元素中的最后一个 */
        div>p:last-of-type{
            color: rgb(5, 96, 66);
        }
        /* 所有同类型兄弟元素中的 第n个(按照所有同类型兄弟计算) */
        div>p:nth-of-type(3){
            color: blue;
        }
    </style>
</head>

<body>
    <!-- 结构1 -->
    <!-- <div>
        <p>张三:100</p>
        <p>李四:99</p>
        <p>王五:98</p>
        <p>刘:97</p>
    </div> -->

    <!-- 结构2 -->
    <!-- <div>
        <span>张三:100</span>
        <p>李四:99</p>
        <p>王五:98</p>
        <p>刘:97</p>
    </div> -->
    <!-- 结构3 -->
     <p>测试1</p>
    <div>
        <p>测试2</p>
        <marquee>
            <p>测试3</p>
            <p>张三:100</p>
        </marquee>
        <p>李四:99</p>
        <p>王五:98</p>
        <p>刘:97</p>
    </div>
</body>
</html>

了解即可:

  1. :nth-last-child(n) 所有兄弟元素中的倒数第 n
  1. :nth-last-of-type(n) 所有同类型 兄弟元素中的 倒数第**n个** 。
  1. :only-child 选择没有兄弟的元素(独生子女)。
  1. :only-of-type 选择没有同类型兄弟的元素。
  1. :root 根元素。
  1. :empty 内容为空元素(空格也算内容)。
7.7.3否定伪类

:not(选择器) 排除满足括号中条件的元素。

md-end-block 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>否定伪类</title>
    <style>
        /* 选中的是div的儿子p元素,排除类名为fail的元素 */
        div>p:not(.fail){
            color: red;
        }
        /* 选中的是div的儿子p元素,排除title属性为加油的元素 */
        div>p:not([title^="加油"]){
            color: blue;
        }
        /* 选中的是div的儿子p元素,排除第一个儿子p元素*/
        div>p:not(:first-child){
            color: aqua;
        }
    </style>
</head>
<body>
    <div>
        <p>张三:100</p>
        <p>李四:99</p>
        <p>王五:98</p>
        <p>刘:97</p>
        <p class="fail" title="加油">孙七:59</p>
        <p class="fail">李八:40</p>
    </div>
</body>
</html>
7.7.4 UI伪类
  1. :checked 被选中的复选框或单选按钮。
  1. :enable 可用的表单元素(没有 disabled 属性)。
  1. :disabled 不可用的表单元素(有 disabled 属性)。
md-end-block 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>UI伪类</title>
    <style>
        /* 选中的是勾选的复选框  
        :checked 被选中的复选框或单选按钮。*/
        input:checked{
            width: 100px;
            height: 100px;
        }
        /* 选中的是被禁用的input元素 */
        input:disabled{
            background-color: aquamarine;
        }
        /* 选中的是可用的input元素 */
        input:enabled{
            background-color: black;
        }
    </style>
</head>
<body>
    <input type="checkbox">
    <input type="radio" name="gender" id="">
    <input type="radio" name="gender" id="">
    <input type="text">
    <input type="text" disabled>
</body>
</html>
7.7.5 目标选择器

:target 选中锚点指向的元素。

md-end-block 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>UI伪类</title>
    <style>
       div{
        background-color: bisque;
        height: 400px;
       }
        div:target{
        background-color: black;
       }
    </style>
</head>
<body>
    <a href="#one">第1个</a>
    <a href="#two">第2个</a>
    <a href="#three">第3个</a>
    <a href="#four">第4个</a>
    <a href="#five">第5个</a>


    <div id="one">1</div><br>
    <div id="two">2</div><br>
    <div id="three">3</div><br>
    <div id="four">4</div><br>
    <div id="five">5</div><br>
</html>
相关推荐
Boilermaker199221 分钟前
【Java EE】SpringIoC
前端·数据库·spring
中微子32 分钟前
JavaScript 防抖与节流:从原理到实践的完整指南
前端·javascript
天天向上10241 小时前
Vue 配置打包后可编辑的变量
前端·javascript·vue.js
芬兰y1 小时前
VUE 带有搜索功能的穿梭框(简单demo)
前端·javascript·vue.js
好果不榨汁1 小时前
qiankun 路由选择不同模式如何书写不同的配置
前端·vue.js
小蜜蜂dry1 小时前
Fetch 笔记
前端·javascript
拾光拾趣录1 小时前
列表分页中的快速翻页竞态问题
前端·javascript
小old弟1 小时前
vue3,你看setup设计详解,也是个人才
前端
Lefan1 小时前
一文了解什么是Dart
前端·flutter·dart
Patrick_Wilson1 小时前
青苔漫染待客迟
前端·设计模式·架构