CSS伪类大全!4大类伪类详解

你好,我是云桃桃。

一个希望帮助更多朋友快速入门 WEB 前端的程序媛。

云桃桃-大专生,一枚程序媛,感谢关注。回复 “前端基础题”,可免费获得前端基础 100 题汇总,回复 “前端工具”,可获取 Web 开发工具合集

284篇原创内容-更多前端系列内容可以go公众.h:云桃桃

后台回复“前端工具”可获取开发工具,持续更新中

后台回复“前端基础题”可得到前端基础100题汇总,持续更新中

后台回复“前端电子书”可获取20+本精选电子书

前言

伪类(Pseudo-class)是 CSS 中一种用于选择元素特定状态或行为的选择器。它们允许我们根据用户操作、元素的位置或其他特定条件来应用样式,从而增强页面的交互性和可读性。伪类在 CSS 中具有重要的作用和用途:

  1. 用户交互状态:伪类可以根据用户的操作状态来应用样式,如:hover 用于鼠标悬停状态。

  2. 链接状态:链接伪类如:link、:visited、:hover、:active 用于控制链接在不同状态下的样式,帮助用户区分未访问链接、已访问链接以及鼠标悬停和激活链接。

  3. 子元素选择:伪类如:first-child、:last-child、:nth-child()等用于选择元素的特定子元素,方便实现对布局和内容的精确控制。

  4. 表单元素状态:伪类如:valid、:focus、:checked 等可用于控制表单元素在不同状态下的样式,增加表单的可用性和友好性。

伪类的语法是如下(选择器:伪类),

selector:pseudo-class {
  property: value;
}

那我们一起来看看吧。

4 类常见的 CSS 伪类

一、 基本伪类

用于选择特定状态的元素,如:link、:visited、:hover、:active、:focus。

a:link {
  color: blue;
}

a:visited {
  color: red;
}

a:hover {
  color: green;
}

a:active {
  color: yellow;
}
/* 鼠标聚焦到input上的背景颜色 */
input:focus {
  background-color: #00f;
}

不止有 a 标签可以 hover,其他元素也可以 hover,比如以下写法,也可以:

/*  鼠标悬停在div上时的背景颜色 */
div:hover {
  background-color: yellow;
}
div p:hover {
  background-color: yellow;
}

这个 hover 可是大有用处!比如,写出一个tb导航的 hover 的导航菜单。

图片

代码如下:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>伪类示例</title>
    <style>
      /* 全局样式 */
      * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
      body {
        padding: 20px;
      }
      /* 标签样式 */
      .menu {
        width: 100px;
        color: #fff;
        line-height: 40px;
        background-color: #dc5757;
        cursor: pointer; /* 鼠标悬停时显示手型 */
        transition: background-color 0.3s ease;
        text-align: center;
      }
      /* 悬停样式 */
      .menu:hover {
        background-color: #9f2b2b;
      }
      /* 菜单样式 */
      .child-menu-list {
        display: none;
        position: absolute;
        list-style-type: none;
        background-color: #fff;
        width: 100px;
        border-radius: 5px;
        box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.1);
      }
      /* 悬停时显示菜单 */
      .menu-box:hover .child-menu-list {
        display: block;
      }
      /* 菜单项样式 */
      .child-menu-list li {
        margin: 5px 0;
      }
      .child-menu-list li a {
        display: block;
        padding: 5px 10px;
        text-decoration: none;
        color: #333;
      }
    </style>
  </head>
  <body>
    <div class="menu-box">
      <p class="menu">这是导航</p>
      <ul class="child-menu-list">
        <li><a href="#">菜单1</a></li>
        <li><a href="#">菜单2</a></li>
        <li><a href="#">菜单3</a></li>
      </ul>
    </div>
  </body>
</html>

效果如下:

图片

二、 结构伪类

用于选择特定结构状态的元素。

  1. :before 和 :after 这两个伪类用于在元素的内容前后插入生成的内容,比如添加一些装饰性的内容或图标,在标题前添加引用符号、在链接后添加外部链接图标等。

  2. :first-child 和 :last-child :first-child选择器匹配其父元素的第一个子元素,:last-child选择器匹配其父元素的最后一个子元素。比如,设置列表的第一个元素的特殊样式或者下图 tb 的,最后一个元素,不需要右侧边框。

    图片

  3. :nth-child(n) 和 :nth-last-child(n) 这两个伪类选择器根据子元素在父元素中的位置选择元素,:nth-child(n)选择第 n 个子元素,:nth-last-child(n)选择倒数第 n 个子元素。比如,实现列表中间隔行样式或者每隔 3 个元素:nth-child(3n)就有特定的样式等。

  4. :nth-of-type(n) 和 :nth-last-of-type(n) 与上面的类似,不过这两个伪类选择器是基于子元素的类型进行选择,而不是在整个子元素中进行选择。比如选择表格中某一列的所有单元格、选择特定类型的列表项等。

  5. :only-child 和 :only-of-type :only-child选择器匹配没有兄弟元素的元素,:only-of-type选择器匹配其父元素中特定类型的唯一一个子元素。

那我们来看看代码吧。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Pseudo-class Example</title>
    <style>
      /* 添加装饰性内容 */
      h1:before {
        content: '「';
      }
      h1:after {
        content: '」😆';
      }

      /* 设置第一个和最后一个段落的样式 */
      .box1 p:first-child {
        font-weight: bold;
        background-color: #ffcc00;
      }
      .box1 p:last-child {
        border-bottom: 5px solid #ee7474;
      }

      /* 间隔行样式 */
      ul li:nth-child(3n) {
        background-color: #2dcf56;
      }

      /* 设置第二个表格列的单元格样式 */
      table tr td:nth-of-type(2) {
        font-style: italic;
        color: #4330ba;
      }

      /* 选择唯一类型的子元素 */
      .box2:only-child {
        border: 1px solid #333;
        padding: 10px;
      }
    </style>
  </head>
  <body>
    <h1>Title</h1>
    <div class="box1">
      <p>This is the first paragraph.</p>
      <p>This is the second paragraph.</p>
      <p>This is the third paragraph.</p>
    </div>

    <ul>
      <li>Item 1</li>
      <li>Item 2</li>
      <li>Item 3</li>
      <li>Item 4</li>
      <li>Item 5</li>
      <li>Item 6</li>
      <li>Item 7</li>
      <li>Item 8</li>
      <li>Item 9</li>
      <li>Item 10</li>
    </ul>

    <table>
      <tr>
        <td>Row 1, Cell 1</td>
        <td>Row 1, Cell 2</td>
      </tr>
      <tr>
        <td>Row 2, Cell 1</td>
        <td>Row 2, Cell 2</td>
      </tr>
    </table>

    <div class="box2">
      <p>Only Child Element</p>
    </div>
  </body>
</html>

效果如下:

图片

这些伪类元素提供了强大的选择器功能,可以根据元素的结构状态选择目标元素,使得样式控制更加灵活和精确。

三、否定伪类

用于选择特定状态的元素,如:not()。

/* 选择ul中除了类名为exclude的li元素 */
ul li:not(.exclude) {
  color: #20b45e;
}

效果如下:

图片

四、UI 伪类

用于选择特定 UI 状态的元素,这个通常用到 form 表单中,如:enabled、:disabled、:checked、:indeterminate。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>UI State Pseudo-classes Example</title>
    <style>
      /* 用于选择已启用的输入框 */
      input:enabled {
        border: 2px solid #008000;
      }

      /* 用于选择已禁用的输入框 */
      input:disabled {
        background-color: #f9c8c8;
      }

      /* 用于选择已被选中的复选框 */
      input[type='checkbox']:checked {
        transform: scale(2.2); /* check选中以后,放大复选框 */
      }

      /* 用于选择具有不确定状态的复选框,不透明度设置成 0.2 */
      input[type='checkbox']:indeterminate {
        opacity: 0.2;
      }
    </style>
  </head>
  <body>
    <form>
      <label for="username">用户名:</label>
      <input type="text" id="username" name="username" placeholder="请输入用户名" required />
      <br /><br />
      <label for="password">电话:</label>
      <input type="text" id="phone" name="phone" placeholder="请输入密码" required />
      <br /><br />
      <label for="password">密码:</label>
      <input disabled type="password" id="password" name="password" placeholder="请输入密码" required />
      <br /><br />
      <label for="remember">记住我:</label>
      <input type="checkbox" id="remember" name="remember" />
      <br /><br />
      <label for="subscribe">订阅新闻简报:</label>
      <input type="checkbox" id="subscribe" name="subscribe" checked />
      <br /><br />

      <input type="submit" value="提交" />
    </form>

    <script>
      // 注意:需要手动设置复选框的不确定状态,直接设置该属性不起效
      document.querySelector('input[type="checkbox"]').indeterminate = true
    </script>
  </body>
</html>

效果如下:

图片

CSS 伪类注意事项

当使用 CSS 伪类时,需要注意以下几点:

  1. 选择器的准确性: 确保选择器的准确性,避免误选或未选中目标元素。

  2. 顺序和优先级: 理解伪类的顺序和优先级,以确保样式能够按预期生效。

  3. 兼容性考虑: 部分伪类可能在低版本浏览器中不被支持(可通过前端兼容性自查工具查询:https://caniuse.com/),需要考虑兼容性问题。

  4. 语义化使用: 使用伪类时要符合语义化,遵循样式和内容分离的原则。

  5. 效果逻辑清晰: 样式的逻辑要清晰易懂,避免出现冲突或不必要的复杂性。

这些注意点有助于提高代码的可维护性和可读性,确保样式的正确应用和一致性。

OK,本文完。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/581088.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[C++基础学习]----01-C++数据类型详解

前言 C是一种静态类型的编程语言&#xff0c;它提供了丰富的数据类型来存储和操作数据。这些数据类型为C程序员提供了丰富的选择&#xff0c;可以根据具体需求来选择最合适的类型来存储和操作数据。下面详细解释一些常见的C数据类型&#xff0c;包括其原理和使用方法&#xff1…

VBA技术资料MF146:发出多次Beep提示声

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

Day20.一刷数据结构算法(C语言版) 669修剪二叉搜索树;108将有序数组转换为二叉搜索树;538把二叉搜索树转换为累加树

一、669修剪二叉搜索树 这道题目比较难&#xff0c;比添加增加和删除节点难的多&#xff0c;建议先看视频理解。 题目链接&#xff1a;修剪二叉搜索树 文章讲解&#xff1a; 代码随想录 视频讲解&#xff1a; 你修剪的方式不对&#xff0c;我来给你纠正一下&#xff01;| 修剪二…

AI预测体彩排列3第2套算法实战化测试第6弹2024年4月28日第6次测试

今天继续进行新算法的测试&#xff0c;今天是第6次测试。好了&#xff0c;废话不多说了&#xff0c;直接上图上结果。 2024年4月28日体彩排3预测结果 6码定位方案如下&#xff1a; 百位&#xff1a;3、2、1、0、5、6、7 十位&#xff1a;3、5、6、2、1、0 个位&#xff1a;3、4…

iOS - 多线程-atomic

文章目录 iOS - 多线程-atomic1. 源码分析1.1 get方法1.2 set方法 2. 一般不使用atomic的原因 iOS - 多线程-atomic atomic用于保证属性setter、getter的原子性操作&#xff0c;相当于在getter和setter内部加了线程同步的锁可以参考源码objc4的objc-accessors.mm它并不能保证使…

【无监督+自然语言】 GPT,BERT, GPT-2,GPT-3 生成式预训练模型方法概述 (Generative Pre-Traning)

主要参考 【GPT&#xff0c;GPT-2&#xff0c;GPT-3 论文精读【李沐论文精读】-2022.03.04】 https://www.bilibili.com/video/BV1AF411b7xQ/ 大语言模型综述&#xff1a; https://blog.csdn.net/imwaters/article/details/137019747 GPT与chatgpt的关系 图源&#xff1a;L…

【Verilog-语法】 条件编译 `ifdef/`ifndef

一、前言 在Verilog项目开发过程中某功能是&#xff0c;一部分代码可能有时候用&#xff0c;有时候不用&#xff0c;为了避免全部编译占用资源&#xff0c;可以使用条件编译语句&#xff1b;尤其在大型项目中还可以节约大量的时间。 二、语法 语法书写格式&#xff1a; &am…

嵌入式Linux学习——Linux常用命令(下)

压缩/解压缩命令 gzip gzip 的常用选项&#xff1a; -l(list) 列出压缩文件的内容。-k(keep) 在压缩或解压时&#xff0c;保留输入文件。-d(decompress) 将压缩文件进行解压缩。 注意&#xff1a; 如果 gzip 不加任何选项&#xff0c;此时为压缩。 压缩完该文件会生成后缀…

web自动化系列-selenium的基本方法介绍

web自动化 &#xff0c;一个老生常谈的话题 &#xff0c;很多人的自动化之路就是从它开始 。它学起来简单 &#xff0c;但做起来又比较难以驾驭 &#xff1b;它的执行效率慢 、但又是最接近于用户的操作场景 &#xff1b; 1.web自动化中的三大亮点技术 我们先聊聊 &#xff0…

hive安装

文章目录 1、下载hive2、安装hadoop&#xff08;略&#xff09;3、安装mysql&#xff08;略&#xff09;4、安装 1、下载hive https://dlcdn.apache.org/hive/hive-3.1.3/ 2、安装hadoop&#xff08;略&#xff09; 3、安装mysql&#xff08;略&#xff09; 4、安装 解压 …

(十一)Servlet教程——Request请求转发

1.Web应用在处理客户端的请求的时候&#xff0c;一般的时候都需要多个资源协同处理&#xff0c;比如先经过一个Servlet的处理&#xff0c;然后再经过另外一个Servlet的处理。但是在一个Servlet中又不能直接调用另外一个Servlet的service方法&#xff0c;所以Servlet就提供了请求…

【嵌入式软件】LWIP 以太网通信

1.互联网模型 1.1 OSI&#xff08;Open System Interconnection&#xff09;七层模型 1&#xff09;应用层&#xff1a; 为上层用户提供应用的接口。常用的应用层的网络协议有&#xff1a;HTTP、FTP、TFTP、SMTP、SNMP、DNS、TELNET、HTTPS、POP3、DHCP 2&#xff09;表示层&…

【C++】C\C++内存管理

下面是围绕C\C内存管理这一块知识谈论相关的内存管理机制&#xff0c;有需要借鉴即可。 同时&#xff0c;我在下面也放了快速建立链表的模板&#xff0c;方便oj题目拿到vs上进行调试。 内存管理目录 1.CPP内存管理1.1new、delete关键字概念1.2特性1.3总结 2.new、delete的底层…

【C语言】贪吃蛇详解(附源码)

一、贪吃蛇实现效果 【C语言】贪吃蛇&#xff08;控制台&#xff09; 二、源码 &#x1f388;&#x1f388;&#x1f388;Snake 残风也想永存/C语言项目 - 码云 - 开源中国 (gitee.com)&#x1f388;&#x1f388;&#x1f388; 三、如何使用C语言去实现一个贪吃蛇&#xff1f…

每日一题:地下城游戏

恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 。地下城是由 m x n 个房间组成的二维网格。我们英勇的骑士最初被安置在 左上角 的房间里&#xff0c;他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初始健康点数为一个正整数。如果他的健康点数在某一时刻降至 0…

ThreeJs 环境配置及遇到问题的解决方法

一、环境搭建 ThreeJs在实际在实际使用中更多的是结合框架开发例如&#xff1a;vue框架、react框架&#xff0c;在使用时需要配置开发环境&#xff0c;本文使用的是vscode ThreeJs NodeJs vue 1、ThreeJs安装 下载路径&#xff1a;GitHub - mrdoob/three.js: JavaScript…

CentOS命令大全:掌握关键命令及其精妙用法!

CentOS是一种流行的开源企业级Linux发行版&#xff0c;它基于Red Hat Enterprise Linux (RHEL)的源代码构建。对于系统管理员和运维工程师来说&#xff0c;掌握CentOS的常用命令至关重要。 这些命令不仅可以帮助管理服务器&#xff0c;还可以进行故障排查、性能监控和安全加固等…

【idea】idea 中 git 分支多个提交合并一个提交到新的分支

一、方法原理讲解 我们在 dev 分支对不同的代码文件做了多次提交。现在我们想要把这些提交都合并到 test 分支。首先我们要明白四个 git 操作&#xff0c; commit&#xff1a;命令用于将你的代码变更保存到本地代码仓库中&#xff0c;它创建了一个新的提交&#xff08;commit…

Ubuntu编译安装MariaDB并进行初始化配置

Ubuntu编译安装MariaDB并进行初始化配置 1. 编译安装MariaDB2. 配置MariaDB3. Docker安装MariaDB 1. 编译安装MariaDB MariaDB官方安装文档&#xff1a;https://mariadb.com/kb/en/Build_Environment_Setup_for_Linux/    下载MariaDB源码&#xff1a;https://mariadb.org/ma…

Spring Boot 如何实现缓存预热

Spring Boot 实现缓存预热 1、使用启动监听事件实现缓存预热。2、使用 PostConstruct 注解实现缓存预热。3、使用 CommandLineRunner 或 ApplicationRunner 实现缓存预热。4、通过实现 InitializingBean 接口&#xff0c;并重写 afterPropertiesSet 方法实现缓存预热。 1、使用…