CSS伪类使用详解

news2024/12/26 10:42:41

基本描述

CSS伪类是很常用的功能,主要应用于选择器的关键字,用来改变被选择元素的特殊状态下的样式。
伪类类似于普通CSS类的用法,是对CSS选择器的一种扩展,增强选择器的功能。
目前可用的伪类有大概40多个,少部分有兼容性问题。我们比较常见的,如::hover:root:first-child等。

语法:selector:pseudo-class { property: value; }

div:hover {
  background-color: #f00;
}

如上代码,即是web常用的鼠标hover行为,当鼠标移动到div上面时,就改变div的背景色为红色。

常用伪类

伪类增强了CSS选择器的能力,能让我们通过使用CSS实现更多有用的效果,是前端开发中需要掌握好的一项CSS技巧。
下面介绍较常用的一些伪类,以行为和状态改变引起变化导致的伪类信息的匹配。

  • :hover
    在浏览器中,鼠标指针悬停到元素上时,响应对应的样式。
    触摸屏上该伪类几乎不可用。
  • :active
    被激活的元素,鼠标交互中,代表的时鼠标按下到松开之间的行为。
  • :link
    选中所有未被访问的链接元素。
  • :visited
    选中已访问过的链接元素,一般能改变的主要颜色属性。
  • :focus
    获得焦点的元素,一般用于表单输入的元素。
    通过是否获得焦点改变状态。
  • :checked
    处于选中状态的 radio、checkbox、select 表单元素的选项。
    通过选中/取消选中来改变状态。
  • :disabled
    任何被禁用的元素,如果一个元素处于被禁用状态,则匹配。
  • :enabled
    被启用的元素,如果元素处于被启用状态,则匹配。

元素启用和禁用:如果一个元素能选择、点击、输入文本或获取焦点则属于启用;否则禁用。

下面通过一个简单的示例,看下其中几个伪类的基本使用:

<div class="province">
  <span>中国中部的省份</span>
  <div>
    <input type="radio" name="province"><a href="http://www.jiangxi.gov.cn">江西</a>
    <input type="radio" name="province"><a href="http://www.hunan.gov.cn">湖南</a>
  </div>
  <input type="text" value="222222" />
  <textarea>999999</textarea>
</div>
div:hover {
  color: #ddd;
}
a:link {
  color: #f00;
}
a:visited {
  color: #00f;
}
input:focus {
  background-color: #ff0;
}
input:checked {
  box-shadow: 0 0 0 3px #f00;
}
*:enabled {
  color: #f00;
}

上述代码即对部分伪类的使用,结果如下图:

如上图所示,伪类样式已起作用:

  • 已访问链接设置蓝色(湖南),未访问链接是红色(江西);
  • 焦点激活元素背景色设置黄色(input输入框);
  • 选中的radio设置红色阴影(江西选项的radio标签);
  • 被启用的元素则设置文本为红色(input输入框、textarea框)。

节点匹配的伪类

下面介绍匹配父子兄弟节点元素的伪类,这些伪类在我们匹配节点元素时用处很大:

  • :first-child
    匹配某个元素,它属于它父元素的第一个子元素。
  • :last-child
    匹配某个元素,它属于它父元素的最后一个一个子元素。
  • :nth-child(n)
    匹配某个元素,它属于它父元素的指定位置的元素。
  • :nth-last-child(n)
    匹配某个元素,它属于它父元素的从后往前数的指定位置的元素。
  • :first-of-type
    匹配指定类型元素,并且它属于它父元素的第一个子元素。
  • :nth-of-type(n)
    匹配指定类型元素,并且它属于它父元素的指定位置的元素。
  • :last-of-type
    匹配指定类型元素,并且它属于它父元素的的最后一个子元素。
  • :nth-last-of-type(n)
    匹配指定类型元素,并且它属于它父元素的从后往前数的指定位置的元素。
  • :only-of-type
    匹配没有同类型兄弟元素的元素,有同类型兄弟元素则无效。
  • :only-child
    匹配没有任何兄弟元素的元素,有兄弟元素则无效。

通过下面的代码,看下匹配节点元素时,带type和不带type的区别:

<div>
  <span>前端1</span>
  <div class="country">后端1</div>
  <div class="country">客户端1</div>
</div>
<div>
  <div>前端2</div>
  <span class="country-type">后端2</span>
  <span class="country-type">客户端2</span>
  <div>移动端2</div>
</div>
.country:first-child {
  color: #f00;
}
.country:last-child {
  color: #00f;
}
.country-type:first-of-type {
  color: #f00;
}
.country-type:last-of-type {
  color: #00f;
}

页面呈现:

以上示例,
first-child所在元素(后端1)不属于它父元素的第一个元素,伪类不起作用,所以样式不生效;
last-child所在元素(客户端1)属于它父元素的最后一个元素,伪类起作用,样式生效,显示蓝色文本;
first-of-type所在元素(后端2)不属于它父元素的第一个元素,但属于它同类型(div)的第一个,伪类起作用,显示红色文本;
last-of-type所在元素(客户端2)不属于它父元素的最后一个元素,但属于它同类型(div)的最后一个,伪类起作用,显示蓝色文本;

因此,带type的伪类,是需要判断是否存在同类型的兄弟元素。这里的类型是指 html标签名,标签名一样就是同类型。

其他

CSS中的下面这些伪类在某些特定情形下却很有用:

  • :required:匹配任意设置了required属性的表单元素。
  • :default:一组相关元素中的默认表单元素。
  • :read-write:可被编辑的表单元素,如input、textarea、设置了contenteditable属性的 p 元素等。
  • :read-only:所有不可被编辑的元素,包含设置了readonly属性的input元素。
  • :optional:任意没有设置required属性的表单元素。
  • :valid:任意内容通过验证的表单元素。
  • :invalid:任意内容未通过验证的表单元素。
  • :focus-within:一个元素获得焦点,或该元素的子元素获得焦点。
  • :out-of-range:input元素的max和min范围外。
  • :in-range:input元素的max和min范围内。
  • :target:选中锚点匹配元素(id)。
  • :empty:匹配没有子元素的元素,子元素包含元素、文本、空格。
  • :root:匹配dom文档树的根元素,如 <html> 元素,优先级比html元素高。
  • :is():选中给定的选择器列表能匹配的元素。
  • :has():指定选择器参数匹配的元素。
  • :lang():基于元素语言来匹配相应元素。
  • :not():用来匹配不符合选择器参数的元素。

如 :root伪类
我们可以通过它定义全局的CSS自定义属性,实现主题样式的切换等,可参考前文使用CSS自定义属性实现页面的主题切换。

:root {
  --color: red;
}
:root[theme="black"] {
  --color: #000;
}
:root[theme="white"] {
  --color: #fff;
}

如 :not伪类
可以结合其他伪类进行联合判断,下面的代码即是判断如果不是最后一个元素,则增加20个像素的右外边距。

div:not(:last-child) {
  margin-right: 20px;
}

伪类增强了CSS选择器的能力,能让我们通过使用CSS实现更多有用的效果,是前端开发中需要掌握好的一项CSS技巧。
而CSS中除了伪类以外,还有一种伪元素,用处也非常大,但和伪类很相似,常被混淆,后续我将详细介绍下伪元素,并分析下它们的区别。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Bean的生命周期理解

一、Spring Bean的生命周期大的概括起来有四个阶段&#xff1a; 1、实例化 2、属性填充注入 3、初始化使用 4、Bean的销毁 二、如流程图所示 三、步骤说明 1、实例化 实例化一个Bean&#xff0c;即new 2、IOC依赖注入 按照Spring上下文对实例化的Bean进行属性填充注入 3、setB…

昆船智能上市:预计年营收19亿到22.5亿 市值48亿

雷递网 雷建平 11月30日昆船智能技术股份有限公司&#xff08;简称&#xff1a;“昆船智能”&#xff0c;证券代码&#xff1a;301311&#xff09;今日在深交所创业板上市。昆船智能本次发行股票6000万股&#xff0c;发行价为13.88元&#xff0c;募资8.33亿元。昆船智能开盘价为…

2022CTF培训(七)逆向专项练习

附件下载链接 babyre 首先是一个迷宫&#xff0c;由于答案不唯一&#xff0c;因此到 dfs 求出所有路径。 #include <bits/stdc.h>constexpr char s[] "**************.****.**s..*..******.****.***********..***..**..#*..***..***.********************.**..*…

springMVC01,springMVC的执行流程【第一个springMVC例子(XML配置版本):HelloWorld】

springMVC01,springMVC的执行流程【第一个springMVC项目&#xff1a;HelloWorld】springMVC的简介springMVC的执行流程第一个springMVC项目&#xff08;XML配置版本&#xff09;1.创建项目1.1 新建maven项目&#xff1a;1.2 添加web支持1.3 在pom.xml中导入依赖1.4 配置tomcat2…

【云享·人物】华为云AI高级专家白小龙:AI如何释放应用生产力,向AI工程化前行?

摘要&#xff1a;AI技术发展&#xff0c;正由应用落地阶段向效率化生产阶段演进&#xff0c;AI工程化能力将会不断深入业务&#xff0c;释放企业生产力。本文分享自华为云社区《【云享人物】华为云AI高级专家白小龙&#xff1a;AI如何释放应用生产力&#xff0c;向AI工程化前行…

[附源码]Python计算机毕业设计Django飞越青少儿兴趣培训机构管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

旅游景区地图导览系统,传统导览智慧新升级

地图在景区导览中一直扮演着重要角色。 从传统导览的纸质地图&#xff0c;再到智慧导览的电子地图&#xff0c;游客都可以从景区地图上了解到景点名称、游玩路线、服务设施等内容&#xff0c;帮助游客更好地游览景区。 相比传统的纸质地图导览&#xff0c;电子地图导览系统有哪…

计算机组成原理习题课第四章-4(唐朔飞)

计算机组成原理习题课第四章-4&#xff08;唐朔飞&#xff09; ✨欢迎关注&#x1f5b1;点赞&#x1f380;收藏⭐留言✒ &#x1f52e;本文由京与旧铺原创&#xff0c;csdn首发&#xff01; &#x1f618;系列专栏&#xff1a;java学习 &#x1f4bb;首发时间&#xff1a;&…

TIA博途中通用函数库指令FIFO先入先出的具体使用方法

TIA博途中通用函数库指令FIFO先入先出的具体使用方法 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 如下图所示,在TIA博途中添加通用函数库指令,然后在库指令中找到FIFO,鼠标直接拖拽到程序段中,系统会自动生成一…

【毕业设计】10-基于单片机的车站安检门_磁性霍尔传感器系统设计(原理图+源码+仿真工程+答辩论文)

【毕业设计】10-基于单片机的车站安检门/磁性霍尔传感器系统设计&#xff08;原理图源码仿真工程答辩论文&#xff09; 文章目录【毕业设计】10-基于单片机的车站安检门/磁性霍尔传感器系统设计&#xff08;原理图源码仿真工程答辩论文&#xff09;任务书设计说明书摘要设计框架…

https加密解密过程二、名词解析及文件生成

https加密解密过程二、名词解析及文件生成 密钥仓库keystore文件 Keytool是一个Java数据证书的管理工具 &#xff0c;Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中 keystore文件的内容其实就是把私钥、公钥以及公钥对应的地址等信息输出为json格式的…

git的基础操作

git的基础操作 一、Git理论 &#xff08;一&#xff09;工作区域 基本概念&#xff1a; 工作区&#xff1a;平时存放项目代码的地方。 暂存区(Stage/Index)&#xff1a;暂存区&#xff0c;用于临时存放你的改动&#xff0c;事实上它只是一个文件&#xff0c;保存即将提交到…

(四)DepthAI-python相关接口:OAK Messages

消息快播&#xff1a;OpenCV众筹了一款ROS2机器人rae&#xff0c;开源、功能强、上手简单。来瞅瞅~ 编辑&#xff1a;OAK中国 首发&#xff1a;oakchina.cn 喜欢的话&#xff0c;请多多&#x1f44d;⭐️✍ 内容可能会不定期更新&#xff0c;官网内容都是最新的&#xff0c;请查…

mapstruct常见错误及解决方案

1 问题集合 mapstruct-jdk8 编译报错 我以前项目使用的是mapstruct-jdk8<1.3.1.Final &#xff0c;现在做改造升级&#xff0c;比如springboot升级等&#xff0c;但是报错了 我们去mvn仓库去看下&#xff1a; Deprecated MapStruct artifact containing annotations to …

Postman之CSV或JOSN文件实现数据驱动

目录 一、适用场景 二、接口信息 三、数据驱动实现 3.1.data.文件设置 3.1.1.data.csv文件设置 3.1.2.data.json文件设置 3.3.接口传参设置 3.4.断言设置 四、执行结果 4.1.data.csv执行脚本上传设置 4.2.data.json执行脚本上传设置​ 4.3.执行结果展示 一、适用场…

12 【操作mongodb数据库】

12 【操作mongodb数据库】 1.简介 1.Mongoose是一个让我们可以通过Node来操作MongoDB的模块。2.Mongoose是一个对象文档模型(ODM)库,它对Node原生的MongoDB模块进行了进一步的优化封装&#xff0c;并提供了更多的功能。在大多数情况下&#xff0c;它被用来把结构化的模式应用…

Stable Diffusion 关键词tag语法教程

Stable Diffusion 关键词tag语法教程 AI绘图在线体验 二次元绘图 在线体验地址:Stable Diffusion 模型包括&#xff1a; NovelAI&#xff0c;NovelAI的模型训练使用了数千个网站的数十亿张图片&#xff0c;包括 Pixiv、Twitter、DeviantArt、Tumblr等网站的作品。 Waifu&am…

Flink系列之大数据分布式计算引擎设计实现剖析

声明&#xff1a; 文章中代码及相关语句为自己根据相应理解编写&#xff0c;文章中出现的相关图片为自己实践中的截图和相关技术对应的图片&#xff0c;若有相关异议&#xff0c;请联系删除。感谢。转载请注明出处&#xff0c;感谢。 By luoyepiaoxue2014 B站&#xff…

MySQL基本语句操作

目录 一. MySQKL基本操作命令&#xff08;增&#xff0c;删&#xff0c;该&#xff0c;查&#xff09; 1.1 基本概述 1.2 查看当前服务器种的数据库 1.3 查看数据库结构​编辑 二.SQL语句 三. 创建及删除数据库和表 3.1 创建新的数据库 3.2 创建新的表 ​3.3 删除指…

c++随机数问题研究

1、问题背景 某项目中有个复杂的排序&#xff0c;先是各种规则依次排序&#xff0c;最后如果依然并列的话&#xff0c;那就随机位置&#xff0c;名次并列。测试中发现一个诡异现象&#xff0c;并列时随机排序但随机后2个case打印的顺序每次都一样&#xff0c;随机数没有起到任…