CSS中的伪类和伪元素(详细)

news2025/1/23 10:34:56

这篇想要跟大家分享的是css中的伪类和伪元素,有任何问题可以私聊我或者评论哦!

首先,我们先来想一下

一、引入伪类跟伪元素的原因?

伪类和伪元素的引入是因为在文档树里有些信息无法被充分描述

比如CSS没有“段落的第一行”、“文章首字母”之类的选择器,而这在一些出版场景里又是必须的,因此引入。

引用标准中的话:

(CSS 引入伪类和伪元素的概念是为了实现基于文档树之外的信息的格式化。)
CSS introduces the concepts of pseudo-elements and pseudo-classes to permit formatting based on 
information that lies outside the document tree.

二、什么是伪类,伪元素?

1、伪类

概念:为处于某个状态的已有元素添加对应的样式,这个状态是根据用户行为而动态改变的。

它可以用于

  • 设置鼠标悬停在元素上时的样式
  • 为已访问和未访问链接设置不同的样式
  • 设置元素获得焦点时的样式

2、伪元素

概念:创建一些不在文档树中的元素,并为其添加样式。(就是选取某些元素前面或后面这种普通选择器无法完成的工作,虽然用户可以看到这些文本,但是这些文本实际上不在文档树中。)

它可以用于

  • 设置元素的首字母、首行的样式
  • 在元素的内容之前或之后插入内容

三、伪类

分类

  • 状态伪类
  • 结构性伪类

1、状态伪类:基于元素当前状态进行选择的

元素的样式会根据其状态呈现不同的样式,当元素处于某状态时会呈现该样式,而进入另一状态后,该样式也会失去。

常见的状态伪类

 :link 应用于未被访问过的链接;    

 :hover 应用于鼠标悬停到的元素;

 :active 应用于被激活的元素;

 :visited 应用于被访问过的链接,与:link互斥。

 :focus 应用于拥有键盘输入焦点的元素。

实例

<!DOCTYPE html>
<html>
<head>
<style>
/* 未访问的链接 */
a:link {
  color: red;
}

/* 已访问的链接  */
a:visited {
  color: green;
}

/* 鼠标悬停链接  */
a:hover {
  color: hotpink;
}

/* 已选择的链接*/
a:active {
  color: blue;
}
</style>
</head>
<body>

<p><a href="">这是一个链接</a></p>

</body>
</html>

注意:

这几个伪类同时出现在一个元素的操作上,顺序不能改变,否则很大程度上会产生紊乱,造成效果失效!

a:hover 必须在 CSS 定义中的 a:link 和 a:visited 之后,才能生效。(意思是必须先写a:link 和 a:visited再写 :hover)

a:active 必须在 CSS 定义中的 a:hover 之后才能生效。(意思是必须先写a:hover再写 :active)

另外伪类名称对大小写并不敏感

伪类和 CSS 类

当您将鼠标悬停在类highlight上时,会改变颜色:

a.highlight:hover {
  color: red;
}

悬停在 <div> 上

div:hover {
  background-color: blue;
}

把鼠标悬停到 <div> 元素以显示 <h1>元素(类似工具提示的效果)

h1 {
  display: none;
  background-color: green;
  padding: 25px;
}

div:hover h1 {
  display: block;
}

2、结构性伪类:css3新增选择器

利用dom树进行元素过滤,通过文档结构的互相关系来匹配元素,能够减少class和id属性的定义,使文档结构更简洁。

常见的结构性伪类

  1.   :first-child 选择某个元素的第一个子元素;  
  2.   :last-child 选择某个元素的最后一个子元素;
  3.   :nth-child(n) 匹配属于其父元素的第 n个子元素,不论元素的类型
  4.   :nth-last-child() 从这个元素的最后一个子元素开始算,选匹配属于其父元素的第 n个子元素,不论元素的类型;
  5.   :nth-of-type() 规定属于其父元素的第n个 指定 元素;
  6.   :nth-last-of-type() 从元素的最后一个开始计算,规定属于其父元素的指定 元素;
  7.   :first-of-type 选择一个上级元素下的第一个同类子元素;
  8.   :last-of-type 选择一个上级元素的最后一个同类子元素;
  9.   :only-child 选择它的父元素的唯一一个子元素;
  10.   :only-of-type 选择一个元素是它的上级元素的唯一一个相同类型的子元素;
  11.  :checked匹配被选中的input元素,这个input元素包括radio和checkbox。
  12.  :empty 选择的元素里面没有任何内容。
  13.   :disabled匹配禁用的表单元素。
  14.   :enabled匹配没有设置disabled属性的表单元素。
  15.   :valid匹配条件验证正确的表单元素。
  16.   :in-range选择具有指定范围内的值的 <input> 元素。
  17.   :optional选择不带 "required" 属性的 <input> 元素。
  18.   :focus选择获得焦点的 <input> 元素。

实例

选择器匹配p元素的第一个子元素:

p:first-child {
  color: red;
}
<p>你好</p>
<p>好啊</p>

匹配所有 <p> 元素中的首个 <i> 元素:

p i:first-child {
  color: blue;
}

<p>我是一个<i>强壮</i>的男人。我是一个<i>强壮</i>的男人。</p>

<p>我是一个<i>强壮</i>的男人。我是一个<i>强壮</i>的男人。</p>


段落2变成蓝色

语法解释:p:nth-child(3),P标签的父元素是body,body的第3个子元素是“段落2。”所以段落2”,颜色变成了蓝色

p:nth-child(3)
{
background:blue;
}
 
<body>
 
<h1>今天学习伪类和伪元素</h1>
<p>段落1</p>
<p>段落2</p>
<p>段落3</p>

 
</body>

在上一个代码中,如果p:nth-child(3)改为属p:nth-of-type(3) ,则意思为规定其父元素的第3个 p 元素,那么变蓝色的是段落3

lang="en" 的 q 元素定义~: 

q:lang(en) {
  quotes: "~" "~";
}

<p>Some text <q lang="en">A quote in a paragraph</q> Some text.</p>

 选择获得焦点的 <input> 元素(点击输入框,背景颜色变为黄色):

input:focus {
  background-color: yellow;
}
  First name: <input type="text" name="fname"><br>
  Last name: <input type="text" name="lname"><br>

四、伪元素

所有的伪元素

选择器例子例子描述
::afterp::after在每个 <p> 元素之后插入内容。
::beforep::before在每个 <p> 元素之前插入内容。
::first-letterp::first-letter选择每个 <p> 元素的首字母。
::first-linep::first-line选择每个 <p> 元素的首行。
::selectionp::selection选择用户选择的元素部分。

注意:

 CSS3 规范中有一部分要求,为了区分伪类和伪元素,伪元素使用两个冒号 (::), 伪类使用一个冒号 (:)

对于 CSS2 中已经有的伪元素,例如 :before,单冒号和双冒号的写法 ,::before 作用是一样的,所以,如果网站只需要兼容 webkit、firefox、opera 等浏览器,伪元素建议采用双冒号的写法,如果是要兼容 IE 浏览器,建议用 CSS2 的单冒号写法。

实例

为所有 <p> 元素中的首行添加样式:

p::first-line {
  color: #ff0000;
  font-size:16px;
}

在这里对于::first-line,我们需要注意,::first-line 伪元素只能应用于块级元素。

以下属性适用于 ::first-line 伪元素:

  • 字体属性
  • 颜色属性
  • 背景属性
  • word-spacing
  • letter-spacing
  • text-decoration
  • vertical-align
  • text-transform
  • line-height
  • clear

设置所有 <p> 元素中文本的首字母格式:

p::first-letter {
  color: red;
  font-size: 16px;
}

在这里对于::first-letter ,我们需要注意,::first-letter  伪元素只能应用于块级元素。

下面的属性适用于 ::first-letter 伪元素:

  • 字体属性
  • 颜色属性
  • 背景属性
  • 外边距属性
  • 内边距属性
  • 边框属性
  • text-decoration
  • vertical-align(仅当 "float" 为 "none")
  • text-transform
  • line-height
  • float
  • clear

在这里要对::before和::after,做个讲解

在元素的 ::before和 ::after中插入内容-content属性(如果没有写content样式,伪元素会失效)

默认值:normal
继承:no
版本:CSS2
JavaScript 语法:object.style.content="url(beep.wav)"

contnt属性的类别:

none设置 content 为空值。
normal在 :before 和 :after 伪类元素中会被视为 none,即也是空值。
counter设定计数器,格式可以是 counter(name) 或 counter(name,style) 。产生的内容是该伪类元素指定名称的最小范围的计数;格式由style指定(默认是'decimal'——十进制数字)
attr(attribute)将元素的 attribute 属性以字符串形式返回。。
string设置文本内容
open-quote设置前引号
close-quote设置后引号
no-open-quote移除内容的开始引号
no-close-quote移除内容的闭合引号
url(url)设置某种媒体(图像,声音,视频等内容)的链接地址
inherit指定的 content 属性的值,应该从父元素继承

在每个 <h1> 元素的内容之前插入一幅图:

h1::before {
  content: url();
}

在每个 <h1> 元素的内容之后插入一幅图像:

h1::after {
  content: url();
}

使所选文本在蓝色背景上显示为红色:

::selection {
  color: red; 
  background:blue;
}

可以应用于 ::selection:的属性

  • color
  • background
  • cursor
  • outline

伪元素与 CSS 类结合使用:(将以粉色和较大的字体显示 class="name" 的段落的首字母。)

p.name::first-letter {
  color: hotpink;
  font-size: 200%;
}  

<p class="name">你好漂亮!</p>

五、伪类和伪元素的应用

1、画分割线

效果如图

<style>
/*content没有内容也一定要记得写*/
    .line::before, .line::after {
      content: '';
      display: inline-block;
      width: 300px;
      border-top: 1px solid black;
      margin: 5px;
    }
  </style>
</head>
<body>
  <p class="line">此处为分割线</p>
</body>

2、清除浮动

这里将会在下一次分享“浮动”时去分享

其他应用也会在后续的使用中,不断发现,不断补充

最后!

关于代码只粘贴了主要代码,其他的内容,需要读者自己进行补充

下次见!

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

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

相关文章

[error] Error: Fail to open IDE 问题解决

问题描述&#xff1a;接手前辈的微信小程序项目&#xff08;uni-app搭建&#xff09;&#xff0c;使用HBuilder编译器&#xff0c;&#xff0c;控制台报 [error] Error: Fail to open IDE 错误原因一&#xff1a;微信小程序AppID错误解决方法&#xff1a;如图点击项目目录 mani…

wangeditor5在vue3中的全使用过程(图片上传、附件上传、工具栏配置、编辑器配置)

1、参考官方的wangeditor5-for-vue3的开发手册 官方文档地址&#xff1a;https://clinfc.github.io/wangeditor5-for-vue3/guide/ 说明为说明要编写这编博客文章&#xff1f; 官方文档的使用手册对于新手来说比较的难看懂&#xff0c;写的也不够详细&#xff0c;源码的封装比较…

vue3+vite项目配置ESlint、pritter插件

前言 入行前端工作将近两年多时间了&#xff08;如果算上实习&#xff09;&#xff0c;从一开始vue2入门&#xff0c;到现在vue3前端变化是真的快&#xff0c;刚了解webpack搭建项目流程&#xff0c;vite又横空出世&#xff0c;不得不说前端变化真的太快了&#xff0c;所以只有…

【JavaScript】DOM和事件简介和文档加载流程以及DOM查询(上)案例(附源码)

&#x1f41a;作者简介&#xff1a;苏凉&#xff08;专注于网络爬虫&#xff0c;数据分析&#xff0c;正在学习前端的路上&#xff09; &#x1f433;博客主页&#xff1a;苏凉.py的博客 &#x1f310;系列总专栏&#xff1a;web前端基础教程 &#x1f451;名言警句&#xff1a…

自己的智能AI聊天机器人,可自定义头像,免费html源码分享,粘贴即用!

1.展示效果效果预览图&#xff1a;新增小功能&#xff1a;① 在原有的基础上加入了本地实时存档的功能&#xff0c;按照下面的步骤便可以随时在本地查看以往和智能AI所有的聊天记录哦&#xff01;再也不用担心关闭网页后先前的聊天内容全部消失啦&#xff01;PS&#xff1a;最新…

解决宝塔 Nginx 跨域问题Access-Control-Allow-Origin

何为跨域&#xff1f; 1、资源跳转&#xff1a; A链接、重定向、表单提交 2.资源嵌入&#xff1a; <link>、<script>、<img>、<frame>等dom标签&#xff0c;还有样式中background:url()、font-face()等文件外链 3.脚本请求&#xff1a; js发起的ajax请…

商城系统需求分析

文章目录一、引言1.1项目背景1.2 前期工作二、技术概述三、功能需求3.1 功能块划分3.2 功能块描述3.2.1 面向用户部分功能&#xff1a;3.2.2 后台管理部分功能&#xff1a;四、性能需求4.1 数据精确度4.2 适应性五、系统流程图5.1 顾客与管理员流程图如下5.2 订单处理流程说明六…

VUE动态切换皮肤 VUE动态切换背景图片 操作 / VUE 主题切换

上正文 使用&#xff1a;root &#xff0c;var&#xff08;&#xff09;函数实现 1. 创建皮肤或主题 css目录 一个公共主题文件 theme.css&#xff0c;一个main.js引入文件theme-all.css&#xff0c;一个单独的 主题样式文件 theme-12.css 2. 定义css文件中所要切换的主题的…

vue(绑定style属性)

以对象方式绑定style属性 <div id"app"> <!-- 在行内属性中书写样式 --> <div style"color:royalblue ; font-size: 48px;">黄绥睿真帅个鬼</div> <!-- 把行内属性改造成对象&#xff0c;以对象方式绑定style属性 外部增加{}&a…

【进阶】TS 中的 类型断言 和 泛型

类型断言 作用 : 手动指定值的具体类型 ( 缩写值的范围 ) 应用场景 1 获取 DOM 元素的时候指定具体元素 示例 : const box document.getElementById(img) console.log(box.src) // ts报错错误内容 : 解析 &#xff1a; 上述语法在 js 中可以直接使用, 但是 TS 中就不行…

vue 动态样式绑定 class/style

简介&#xff1a; 字符串写法&#xff1a;类名不确定&#xff0c;要动态获取 对象写法&#xff1a;要绑定多个样式&#xff0c;个数确定&#xff0c;名字确定&#xff0c;但不确定用不用。 数组写法&#xff1a;要绑定多个样式&#xff0c;个数不确定&#xff0c;名字不确定。…

HTML基础 - HTML表格

HTML基础 - HTML表格 1.无表头的表格 <table> <tr> <td> <table>标签代表的是表 <tr>标签代表的是行 <td>标签代表的是列 在html页面中的表格来着&#xff0c;就和excl的表格不一样喽&#xff0c;咱自己有自己的规则&#xff1a; 这就是…

这一次,彻底搞懂箭头函数

一、箭头函数的特点 1. 相比普通函数&#xff0c;箭头函数有更加简洁的语法。 普通函数 function add(num) {return num 10 }箭头函数 const add num > num 10;2. 箭头函数不绑定this&#xff0c;会捕获其所在上下文的this&#xff0c;作为自己的this。 这句话需要注意的…

若依(ruoyi)字典管理插件实现思路探究

一个UI表单的构成&#xff0c;避免不了下拉框&#xff0c;多选框等标签&#xff0c;在开发这些标签时&#xff0c;通常会请求后台接口获取字典值进行动态渲染。定制化开发虽然实现简单&#xff0c;但会产生大量重复工作&#xff0c;解决这类问题的思路有哪些&#xff1f;文章对…

chrome插件开发时跨域问题解决方案

这是一个没有套路的前端博主&#xff0c;热衷各种前端向的骚操作&#xff0c;经常想到哪就写到哪&#xff0c;如果有感兴趣的技术和前端效果可以留言&#xff5e;博主看到后会去代替大家踩坑的&#xff5e;接下来的几篇都是uni-app的小实战&#xff0c;有助于我们更好的去学习u…

Vue在HTML中如何使用

&#x1f440;Vue是什么 一套用于构建用户界面的渐进式JavaScript框架。 构建用户界面&#xff1a;数据变成界面渐进式&#xff1a;Vue可以自底向上逐层的应用&#x1f440;Vue如何使用 一、引入vue.js <script src"./js/vue.js"></script> 二、准备一个…

HBuilderX uni-app简单实现静态登录页面(实例)

本章用到......uni-app页面跳转uni.navigateTo方法、uni.navigateBack方法。uni-app简单实现邮箱验证码发送点击后读秒样式。登录账号、密码正则表达式验证等 适合刚入门的小伙伴&#xff0c;大佬就没必要看了 静态页面&#xff01;静态页面&#xff01;没有绑定后端数据接口…

拿来即用的前端登录页面(简洁清爽版)

1、使用bootstrap实现 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>登录</title><link rel"stylesheet" href"/bootstrap-3.3.7-dist/css/bootstrap.m…

vue项目根据不同环境动态配置接口请求ip及全局变量(vue环境变量配置)

在项目的开发过程中&#xff0c;我们常常会遇到根据不同的环境需要切换不同的ip的问题&#xff0c;例如在项目部署到测试服时需要将接口请求ip替换成测试服的ip,部署到正式服时又需要将接口请求ip替换成正式服对应的ip,有些公司还有预发环境等&#xff0c;这样在每次部署不同环…

Vue实战篇三十五:实现滑动拼图验证登录

系列文章目录 Vue基础篇一&#xff1a;编写第一个Vue程序 Vue基础篇二&#xff1a;Vue组件的核心概念 Vue基础篇三&#xff1a;Vue的计算属性与侦听器 Vue基础篇四&#xff1a;Vue的生命周期&#xff08;秒杀案例实战&#xff09; Vue基础篇五&#xff1a;Vue的指令 Vue基础篇…