• CSS复合选择器(二)


    伪类选择器

    • 作用:选中特殊状态的元素。

    如何理解“伪” ? — 虚假的,不是真的。
    如何理解“伪类”? — 像类( class ),但不是类,是元素的一种特殊状态。

    • 常用的伪类选择器:

    一、动态伪类:

    1. : link 超链接未被访问的状态。
    2. :visited 超链接访问过的状态。
    3. : hover 鼠标悬停在元素上的状态。
    4. :active 元素激活的状态。

    什么是激活?—— 按下鼠标不松开。
    注意点:遵循LVHA 的顺序,即:link 、visited 、hover 、active 。

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

    表单类元素才能使用:focus 伪类。
    当用户:点击元素、触摸元素、或通过键盘的 “tab ” 键等方式,选择元素时,就是获得焦点。

    代码如下:

    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <title>伪类选择器_动态伪类</title>
        <style>
            /* 选中的是没有访问过的a元素 */
            a:link {
                color: orange;
            }
            /* 选中的是访问过的a元素 */
            a:visited {
                color: gray;
            }
            /* 选中的是鼠标悬浮状态的a元素 */
            a:hover {
                color: skyblue;
            }
            /* 选中的是激活状态的a元素 */
            a:active {
                color: green;
            }
            /* 选中的是鼠标悬浮的span元素 */
            span:hover {
                color: green;
            }
            /* 选中的是激活的span元素 */
            span:active {
                color: red;
            }
            /* 选中的是获取焦点状态的input元素、获取焦点状态的select元素 */
            input:focus,select:focus {
                color: orange;
                background-color: green;
            }
        </style>
    </head>
    <body>
        <a href="https://www.baidu.com">去百度</a>
        <a href="https://www.jd.com">去京东</a>
        <span>前端</span>
        <br>
        <input type="text">
        <br>
        <input type="text">
        <br>
        <input type="text">
        <select>
            <option value="beijing">北京</option>
            <option value="shanghai">上海</option>
        </select>
    </body>
    </html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53

    二、结构伪类

    • 常用的:
    1. :first-child 所有兄弟元素中的第一个。
    2. :last-child 所有兄弟元素中的最后一个。
    3. :nth-child(n) 所有兄弟元素中的第 n 个。
    4. :first-of-type 所有同类型兄弟元素中的第一个。
    5. :last-of-type 所有同类型兄弟元素中的最后一个。
    6. :nth-of-type(n) 所有同类型兄弟元素中的 第n个 。

    关于n的值:

    1. 0或不写:什么都选不中 —— 几乎不用。
    2. n:选中所有子元素 —— 几乎不用。
    3. 1~正无穷的整数 :选中对应序号的子元素。
    4. 2n 或 even :选中序号为偶数的子元素。
    5. 2 n+1 或 odd :选中序号为奇数的子元素。
    6. -n+3 :选中的是前3个。
    • 了解即可:
    1. :nth-last-child(n) 所有兄弟元素中的倒数第 n 个。
    2. :nth-last-of-type(n) 所有同类型兄弟元素中的 倒数第n个 。
    3. :only-child 选择没有兄弟的元素(独生子女)。
    4. :only-of-type 选择没有同类型兄弟的元素。
    5. : root 根元素。
    6. : empty 内容为空元素(空格也算内容)。

    代码如下:

    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <title>伪类选择器_结构伪类_1</title>
        <style>
            /* 选中的是div的第一个儿子p元素(按照所有兄弟计算的) —— 看结构1 */
            /* div>p:first-child {
                color: red;
            } */
    
            /* 选中的是div的第一个儿子p元素(按照所有兄弟计算的) —— 看结构2 */
            /* div>p:first-child {
                color: red;
            } */
    
            /* 选中的是div的后代p元素,且p的父亲是谁无所谓,但p必须是其父亲的第一个儿子(按照所有兄弟计算的) —— 看结构3 */
            /* div p:first-child {
                color: red;
            } */
    
            /* 选中的是p元素,且p的父亲是谁无所谓,但p必须是其父亲的第一个儿子(按照所有兄弟计算的) —— 看结构3 */
            p:first-child {
                color: red;
            }
        </style>
    </head>
    <body>
        <!-- 结构1 -->
        <!-- <div>
            <p>张三:98</p>
            <p>李四:88</p>
            <p>王五:78</p>
            <p>赵六:68</p>
        </div> -->
    
        <!-- 结构2 -->
        <!-- <div>
            <span>张三:98</span>
            <p>李四:88</p>
            <p>王五:78</p>
            <p>赵六:68</p>
        </div> -->
    
        <!-- 结构3 -->
        <p>测试1</p>
        <div>
            <p>测试2</p>
            <marquee>
                <p>测试3</p>
                <p>张三:98</p>
            </marquee>
            <p>李四:88</p>
            <p>王五:78</p>
            <p>赵六:68</p>
        </div>
    </body>
    </html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <title>伪类选择器_结构伪类_2</title>
        <style>
            /* 选中的是div的第一个儿子p元素(按照所有兄弟计算的)—— 结构1*/
            /* div>p:first-child {
                color: red;
            } */
    
            /* 选中的是div的最后一个儿子p元素(按照所有兄弟计算的)—— 结构1*/
            /* div>p:last-child {
                color: red;
            } */
            
            /* 选中的是div的第n个儿子p元素(按照所有兄弟计算的)—— 结构1 */
            /* div>p:nth-child(3) {
                color: red;
            } */
        
            /* 选中的是div的偶数个儿子p元素(按照所有兄弟计算的)—— 结构2 */
            /* 关于n的值 —— 结构2:
                    1. 0或不写:什么都选不中 —— 几乎不用。
                    2. n :选中所有子元素  —— 几乎不用。
                    3. 1 ~ 正无穷的整数,选中对应序号的子元素。
                    4. 2n 或 even  :选中序号为偶数的子元素。
                    5. 2n+1 或 odd :选中序号为奇数的子元素。
                    6. -n+3 : 选中前三个。
             */
            /* div>p:nth-child(2n) {
                color: red;
            } */
        
            /* 选中的是div的第一个儿子p元素(按照所有同类型兄弟计算的)—— 结构3 */
            /* div>p:first-of-type{
                color: red;
            } */
    
            /* 选中的是div的最后一个儿子p元素(按照所有同类型兄弟计算的)—— 结构3 */
            /* div>p:last-of-type{
                color: red;
            } */
            
            /* 选中的是div的第n个儿子p元素(按照所有同类型兄弟计算的)—— 结构3 */
            /* div>p:nth-of-type(5) {
                color: red;
            } */
        </style>
    </head>
    <body>
        <!-- 结构1 -->
        <!-- <div>
            <p>张三:98</p>
            <p>李四:88</p>
            <p>王五:78</p>
            <p>赵六:68</p>
            <p>孙七:58</p>
            <p>老八:48</p>
        </div> -->
    
        <!-- 结构2 -->
        <!-- <div>
            <p>1</p>
            <p>2</p>
            <p>3</p>
            <p>4</p>
            <p>5</p>
            <p>6</p>
            <p>7</p>
            <p>8</p>
            <p>9</p>
            <p>10</p>
        </div> -->
    
        <!-- 结构3 -->
        <!-- <div>
            <span>测试1</span>
            <p>张三:98</p>
            <p>李四:88</p>
            <p>王五:78</p>
            <span>测试2</span>
            <p>赵六:68</p>
            <span>测试3</span>
            <p>孙七:58</p>
            <span>测试4</span>
            <p>老八:48</p>
            <span>测试5</span>
        </div> -->
    </body>
    </html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <title>伪类选择器_结构伪类_3</title>
        <style>
            /* 选中div中倒数第n个的儿子p元素(按照所有兄弟)—— 看结构1 */
            /* div>p:nth-last-child(3) {
                color: red;
            } */
    
            /* 选中div中倒数第n个的儿子p元素(按照所有同类型的兄弟)—— 看结构1 */
            /* div>p:nth-last-of-type(2) {
                color: red;
            } */
            
            /* 选中的是没有兄弟的span元素 —— 看结构2 */
            /* span:only-child {
                color: red;
            } */
    
            /* 选中的是没有同类型兄弟的span元素 —— 看结构2 */
            /* span:only-of-type {
                color: red;
            } */
    
            /* 选中的是根元素 */
            /* :root {
                background-color: gray;
            } */
    
            /* 选中的是没有内容的div元素 */
            /* div:empty {
                width: 100px;
                height: 100px;
                background-color: red;
            } */
    
        </style>
    </head>
    <body>
        <!-- 结构1 -->
        <!-- <div>
            <span>测试1</span>
            <p>张三:98</p>
            <p>李四:88</p>
            <p>王五:78</p>
            <p>赵六:68</p>
            <p>孙七:58</p>
            <p>老八:48</p>
            <span>测试2</span>
        </div> -->
        
        <!-- 结构2 -->
        <!-- <div>
            <span>测试1</span>
        </div>
        <div>
            <span>测试2</span>
            <p>张三:98</p>
            <p>李四:88</p>
            <p>王五:78</p>
            <p>赵六:68</p>
            <p>孙七:58</p>
            <p>老八:48</p>
        </div> -->
    
        <!-- 结构3 -->
        <div> </div>
    </body>
    </html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71

    三、否定伪类:

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

    代码如下:

    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <title>伪类选择器_否定伪类</title>
        <style>
            /* 选中的是div的儿子p元素,但是排除类名为fail的元素 */
            /* div>p:not(.fail) {
                color: red;
            } */
    
            /* 选中的是div的儿子p元素,但是排除title属性值以“你要加油”开头的 */
            /* div>p:not([title^="你要加油"]) {
                color: red;
            } */
    
            /* 选中的是div的儿子p元素,但排除第一个儿子p元素 */
            div>p:not(:first-child) {
                color: red;
            }
        </style>
    </head>
    <body>
        <div>
            <p>张三:98</p>
            <p>李四:88</p>
            <p>王五:78</p>
            <p>赵六:68</p>
            <p class="fail" title="你要加油啊!孙七">孙七:58</p>
            <p class="fail" title="你要加油啊!老八">老八:48</p>
        </div>
    </body>
    </html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    四、UI伪类:

    1. :checked 被选中的复选框或单选按钮。
    2. :enable 可用的表单元素(没有 disabled 属性)。
    3. :disabled 不可用的表单元素(有disabled 属性)。

    代码如下:

    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <title>伪类选择器_UI伪类</title>
        <style>
            /* 选中的是勾选的复选框或单选按钮 */
            input:checked {
                width: 100px;
                height: 100px;
            }
            /* 选中的是被禁用的input元素 */
            input:disabled {
                background-color: gray;
            }
            /* 选中的是可用的input元素 */
            input:enabled {
                background-color: green;
            }
    
        </style>
    </head>
    <body>
        <input type="checkbox">
        <input type="radio" name="gender">
        <input type="radio" name="gender">
        <input type="text">
        <input type="text" disabled>
    </body>
    </html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    五、目标伪类(了解)

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

    代码如下:

    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <title>伪类选择器_目标伪类</title>
        <style>
            div {
                background-color: gray;
                height: 300px;
            }
            div:target {
                background-color: green;
            }
        </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>
        <a href="#six">去看第6</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>
        <div id="six">6</div>
    </body>
    </html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    六、语言伪类(了解)

    :lang() 根据指定的语言选择元素(本质是看lang 属性的值)。

    代码如下:

    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <title>伪类选择器_语言伪类</title>
        <style>
            div:lang(en) {
                color: red;
            }
            :lang(zh-CN) {
                color: green;
            }
        </style>
    </head>
    <body>
        <div>北京</div>
        <div lang="en">上海</div>
        <p>前端</p>
        <span>你好</span>
    </body>
    </html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
  • 相关阅读:
    基于Java+Spring+mybatis+vue+element实现酒店管理系统
    LLM长度外推——位置插值(llama/baichuan)
    5月第3周榜单丨飞瓜数据B站UP主排行榜单(哔哩哔哩)发布!
    【docker】harbor私有仓库部署与管理
    09 模型的增删查改《ThinkPHP6 入门到电商实战》
    深度强化学习预训练,在线、离线
    免编程经验,搭建宠物店小程序轻松实现
    Unity-timeline(时间线)
    一个音频水印的小例子
    ABP集成SqlSugar
  • 原文地址:https://blog.csdn.net/mwm2378/article/details/136357724