CSS - Pseudo-classes(伪类选择器)

目录

一、介绍

CSS 伪类(Pseudo-classes) 用于定义元素的特定状态或结构位置,从而允许你为这些特殊场景添加样式。伪类以冒号 : 开头,附加在选择器后

css 复制代码
/* 举例 */
a:link{
   color: #fff;
    background-color: aqua;
}

二、常用种类

伪类 含义
:link 选中未访问的链接
:visited 选中已访问的链接
:hover 鼠标悬停在元素上时
:active 元素被激活(如鼠标按下元素)时
:focus 元素获得焦点(如表单输入框被选中)
:disabled 禁用的表单元素
:checked 被选中的复选框或单选按钮
:first-child 元素的第一个子元素
:last-child 元素的最后一个子元素
:first-of-type 选中第一个指定类型的子元素
:last-of-type 选中最后一个指定类型的子元素
:nth-child(n) 选中第 n 个子元素(支持公式如 2n+1)
:nth-of-type(n) 选中该类型元素的第 n 个

三、案例实现

案例一:a标签使用link/visited/hover/active

当我们同时使用多种选中样式的伪类时,生效的顺序十分重要!!!这里通过爱恨法则来加快记忆

爱恨法则 Love Hate -> link visited hover active

效果代码:hover和active需要鼠标移动至元素/鼠标按下激活元素

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>
        .nav a{
            width: 100px;
            height: 50px;
            text-decoration: none;
            background-color: antiquewhite;
        }
        /*伪类顺序: 爱恨法则 Love Hate -> link visited hover active  */
        /* line 选中未访问过的超链接 */
        .nav a:link{
            color: #fff;
            background-color: aqua;
        }
        /* visited 选中访问过的超链接 */
        .nav a:visited{
            background-color: aquamarine;
        }
        /* hover 选中鼠标移入的元素 */
        .nav a:hover{
            background-color: azure;
        }
        /* active 选中鼠标按下的元素 */
        .nav a:active{
            color: #fff;
            background-color: red;
        }
    </style>
</head>
<body>
    <div class="nav">
        <a href="https://gitee.com/">gitee</a>
        <a href="https://www.bilibili.com">哔哩哔哩</a>
        <a href="https://ys.mihoyo.com/">原神</a>
        <a href="https://chat.deepseek.com/">deepseek</a>
    </div>
</body>
</html>

效果

案例二:表单元素使用focus/disabled

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>
        form input:focus{
            outline: 1px solid red;
        }
        form button:disabled{
            cursor: not-allowed;
        }
    </style>
</head>
<body>
    <form>
        <input type="text" placeholder="一步一步向上爬">
        <button disabled>成绩加一</button>
    </form>
</body>
</html>

focus:表单聚焦
disabled:表单元素禁用,这里改动的是鼠标样式
效果

案例三、通过其余伪类实现元素灵活选中

注意!!!:first-child 的匹配规则- - last-child同理

  • 严格检查位置:只有同时满足以下两个条件时才生效:
    • 元素是父容器的第一个子元素。
    • 元素类型与选择器指定的标签匹配

案例

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>
        p:first-child{
            color: red;
        }
    </style>
</head>
<body>
    <div> <!-- 父元素 -->
        <span>span:灵活的选择器</span> <!-- 第一个为span -->
        <div> <!-- 父元素 -->
            <p>p:分割线</p> <!-- 第一个为p,满足条件 -->
        </div>
        <div> <!-- 父元素 -->
            <span>span</span> <!-- 第一个为span -->
            <p>p:分割线</p>
        </div>
    </div>
</body>
</html>

效果


案例:first-of-type

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>
        p:first-of-type{
            color: red;
        }
    </style>
</head>
<body>
    <div>
        <span>灵活的选择器</span>
        <div>
            <p>分割线</p>
        </div>
        <div>
            <span>111</span>
            <p>分割线</p>
        </div>
    </div>
    </div>
</body>
</html>

案例:实现斑马线

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>
        .list{
            width: 400px;
            outline: 1px solid red;
        }
        .list p{
            margin: 0;
        }
        .list p:first-child{
            text-align: center;
            font-size: 32px;
        } 
        .list p:nth-child(2n+3){
            background-color: hsl(160, 88%, 80%);
        }
        .list p:nth-child(2n){
            background-color: aqua;
        }
    </style>
</head>
<body>
    <div class="list">
        <p>
            <span>你好</span>
        </p>
        <p>
            <span>相信自己,你一定可以的,不要忘记休息</span>
        </p>
        <p>
            <span>相信自己,你一定可以的,不要忘记休息</span>
        </p>
        <p>
            <span>相信自己,你一定可以的,不要忘记休息</span>
        </p>
        <p>
            <span>相信自己,你一定可以的,不要忘记休息</span>
        </p>
        <p>
            <span>相信自己,你一定可以的,不要忘记休息</span>
        </p>
        <p>
            <span>相信自己,你一定可以的,不要忘记休息</span>
        </p>
        <p>
            <span>相信自己,你一定可以的,不要忘记休息</span>
        </p>

    </div>
</body>
</html>

效果

相关推荐
雪芽蓝域zzs4 小时前
从零搭建【pnpm+Vue3+TS+Setup+VueRouter4+Pinia+Axios+ElementPlus (unplugin 按需)】仿若依后台
前端·vue.js
燕落南枝4 小时前
HTML 列表标签详解:有序列表、无序列表与描述列表
前端·html
派小心.4 小时前
DAU和MAU怎么计算?先确定活跃事件、用户键和统计窗口
大数据·服务器·前端·人工智能·数据分析
代码猎人4 小时前
前端怎么配合后端完成bug修复
前端
叫我铁汁儿吧5 小时前
JS作用域
前端·面试
定栓5 小时前
Webpack迁到Vite第七节(四):全家桶移除 — 保留项、脚本与数据收尾
前端·webpack·node.js
代码猎人5 小时前
前端怎么优化首屏加载速度
前端
代码猎人5 小时前
前端怎么保障项目稳定上线与运行
前端
数据掘金5 小时前
小程序埋点方案的埋点文档怎么自动生成?
前端
deli0075 小时前
cron 表达式为什么总跑错?10 个场景实测,下次执行时间一眼看懂
前端