前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >重新认识伪类和伪元素

重新认识伪类和伪元素

作者头像
ihoey
发布于 2018-10-31 08:18:30
发布于 2018-10-31 08:18:30
1K00
代码可运行
举报
文章被收录于专栏:梦魇小栈梦魇小栈
运行总次数:0
代码可运行

熟悉前端的人都会听过css的伪类与伪元素,然而大多数的人都会将这两者混淆(包括我)。那今天就让我们来看看伪类和伪元素的区别吧!

伪类与伪元素

先说一说为什么css要引入伪元素和伪类,以下是css2.1 Selectors章节中对伪类与伪元素的描述:

CSS introduces the concepts of pseudo-elements and pseudo-classes to permit formatting based on information that lies outside the document tree.

  • 直译过来就是:css引入伪类和伪元素概念是为了格式化文档树以外的信息。也就是说,伪类和伪元素是用来修饰不在文档树中的部分,比如,一句话中的第一个字母,或者是列表中的第一个元素。下面分别对伪类和伪元素进行解释:
    • 伪类用于当已有元素处于的某个状态时,为其添加对应的样式,这个状态是根据用户行为而动态变化的。比如说,当用户悬停在指定的元素时,我们可以通过:hover来描述这个元素的状态。虽然它和普通的css类相似,可以为已有的元素添加样式,但是它只有处于dom树无法描述的状态下才能为元素添加样式,所以将其称为伪类。
    • 伪元素用于创建一些不在文档树中的元素,并为其添加样式。比如说,我们可以通过:before来在一个元素前增加一些文本,并为这些文本添加样式。虽然用户可以看到这些文本,但是这些文本实际上不在文档树中。

伪类

  • 伪类前面是一个冒号,E:first-child 伪类,会对现有的元素进行筛选
    • :link
    • :visited
    • :hover
    • :active
    • :focus
    • :not()
    • :first-child
    • :last-child
    • :nth-child
    • :nth-last-child 从后面计数
    • :only-child 只满足一个子元素
    • :target 当URL带有锚名称,指向文档内某个具体的元素时,:target匹配该元素。
    • :checked 被选中的input元素
    • :empty 匹配没有子元素的元素
    • :valid 匹配条件验证正确的表单元素。

伪元素

  • 伪元素前面是两个冒号,E::first-line 伪元素。会创造出不存在的新元素,由于 css 对单冒号的伪元素也支持,所以这样很容易让新学者混淆。但实际上现在 css3 已经明确规定了伪类单冒号,伪元素双冒号的规则。
    • ::before/:before 在被选元素前插入内容
    • ::after/:after 在被元素后插入内容,其用法和特性与:before相似。
    • ::first-letter/:first-letter 匹配元素中文本的首字母。被修饰的首字母不在文档树中
    • ::first-line/:first-line 匹配元素中第一行的文本。这个伪元素只能用在块元素中,不能用在内联元素中。
    • ::selection 匹配用户被用户选中或者处于高亮状态的部分。在火狐浏览器使用时需要添加-moz前缀。该伪元素只支持双冒号的形式。
    • ::placeholder 匹配占位符的文本,只有元素设置了placeholder属性时,该伪元素才能生效。
  • 该伪元素不是CSS的标准,它的实现可能在将来会有所改变,所以要决定使用时必须谨慎。 在一些浏览器中(IE10Firefox18及其以下版本)会使用单冒号的形式。
  • 对于伪元素 :before:after 而言,属性 content 是必须设置的,我们知道属性的值可以为字符串,也可以有其它形式,比如指向一张图片的 URL:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
content: url('img/icon.png')
  • 配合伪类使用
    • 伪元素 :before 还可以配合伪类使用,这里举经常与 :before 配合使用的伪类 :hover 为例:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.before:hover:before{content:'you before'; color:red;}
<div class="before"> me</div>
  • 配合取值函数 attr() 使用
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
a::before{content: attr(title)}
<a href="https://blog.ihoey.com" title="梦魇小栈"></a>

效果
<a href="https://blog.ihoey.com" title="梦魇小栈">梦魇小栈</a>

总结

  • 伪元素和伪类之所以这么容易混淆,是因为他们的效果类似而且写法相仿,但实际上 css3 为了区分两者,已经明确规定了伪类用一个冒号来表示,而伪元素则用两个冒号来表示。
  • 伪类的效果可以通过添加一个实际的类来达到,而伪元素的效果则需要通过添加一个实际的元素才能达到,这也是为什么他们一个称为伪类,一个称为伪元素的原因。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-04-282,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java - Date
string format(Date date)按照指定的模式,把Date日期,格式化为符合模式的字符串 Date parse(String source)把符合模式的字符串,解析为Date日期
kenvie
2022/01/20
9610
Java开发者必知的时间处理工具:SimpleDateFormat类详解
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。
喵手
2023/11/21
2.7K0
Java开发者必知的时间处理工具:SimpleDateFormat类详解
从入门到精通:SimpleDateFormat类高深用法,让你的代码更简洁!
咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~
bug菌
2024/07/30
2520
从入门到精通:SimpleDateFormat类高深用法,让你的代码更简洁!
Object类、常用API
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/100195.html原文链接:https://javaforall.cn
全栈程序员站长
2022/06/29
1.9K0
Object类、常用API
java_Object类、日期时间类、System类、包装类
java.lang.Object 类是所有类的父类。它描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object。
咕咕星
2020/08/19
1.2K0
java_Object类、日期时间类、System类、包装类
JDK1.9-常用类时间日期类
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
cwl_java
2019/12/03
8290
java基础学习_常用类04_正则表达式、Math类、Random类、System类、BigInteger类、BigDecimal类、Date和DateFormat类、Calendar类_day14总
============================================================================= ======================
黑泽君
2019/02/25
6310
java基础学习_常用类04_正则表达式、Math类、Random类、System类、BigInteger类、BigDecimal类、Date和DateFormat类、Calendar类_day14总
使用SimpleDateFormat的时候小心点
SimpleDateFormat是Java提供的一个格式化和解析日期的工具类,日常开发中应该经常会用到,但是由于它是线程不安全的,多线程公用一个SimpleDateFormat实例对日期进行解析或者格式化会导致程序出错。
chengcheng222e
2021/11/04
2640
第三阶段-Java常见对象:【第十一章 Date、DateFormat和Calendar类】
可以进行日期和字符串的格式化和解析,但是由于是抽象类,所以使用具体子类SimpleDateFormat。
BWH_Steven
2019/08/09
4050
深入理解Java:SimpleDateFormat安全的时间格式化
想必大家对SimpleDateFormat并不陌生。SimpleDateFormat 是 Java 中一个非常常用的类,该类用来对日期字符串进行解析和格式化输出,但如果使用不小心会导致非常微妙和难以调试的问题,因为 DateFormat 和 SimpleDateFormat 类不都是线程安全的,在多线程环境下调用 format() 和 parse() 方法应该使用同步代码来避免问题。下面我们通过一个具体的场景来一步步的深入学习和理解SimpleDateFormat类。
用户6182664
2019/09/05
9940
【详解】SimpleDateFormat类的线程安全问题
在Java编程中,​​SimpleDateFormat​​ 是一个非常常用的日期格式化工具类。它可以用来将日期转换成字符串,也可以将字符串解析成日期。然而,在多线程环境中使用 ​​SimpleDateFormat​​ 时,会遇到线程安全的问题,这可能导致程序运行结果的不确定性或错误。
大盘鸡拌面
2025/01/16
930
java学习day07 常用API
2018.6.11 1.object 所有类的父类 toString 打印对象的地址值 hashCode 对象的存储位置的算法 equals 比较的是内存地址,==比的是值。 对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;如果作用于引用类型的变量,则比较的是所指向的对象的地址 对于equals方法,注意:equals方法不能作用于基本数据类型的变量; 如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址; 诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。 instanceof 查看一个对象是否是另一个对象的实例。
曼路
2018/10/18
4450
【详解】SimpleDateFormat类到底为啥不是线程安全的?
在Java编程中,​​SimpleDateFormat​​ 是一个非常常用的日期格式化工具。然而,很多开发者在使用过程中会遇到一个常见的问题:​​SimpleDateFormat​​ 不是线程安全的。本文将深入探讨为什么 ​​SimpleDateFormat​​ 会存在线程安全问题,并提供一些解决方案。
大盘鸡拌面
2025/03/19
980
JavaApi高级编程(四)Date类以及如何使用
目录 一、Date的基本概念以及使用  案例一: 二、DateFormat的应用 1、DateFormat日期格式化类(抽象类) 2、功能:完成日期的显示格式化 案例二: 三、Calender类 1、日期数据的定制格式: 2、日期格式化方法: 3、日期/时间组件方法:  4、日期和时间模式 以上就是今天的内容,还请大佬对里面的内容稍作指点,谢谢*-* ---- 一、Date的基本概念以及使用  1、Date 类表示日期和时间(该类大部分方法已过时) 2、提供操纵日期和时间各组成部分的方法 3、Date
天蝎座的程序媛
2022/11/18
1.9K0
JavaApi高级编程(四)Date类以及如何使用
还在使用SimpleDateFormat?你的项目崩没?
日常开发中,我们经常需要使用时间相关类,说到时间相关类,想必大家对SimpleDateFormat并不陌生。主要是用它进行时间的格式化输出和解析,挺方便快捷的,但是SimpleDateFormat并不是一个线程安全的类。在多线程情况下,会出现异常,想必有经验的小伙伴也遇到过。下面我们就来分析分析SimpleDateFormat为什么不安全?是怎么引发的?以及多线程下有那些SimpleDateFormat的解决方案?
Java3y
2019/03/07
4560
还在使用SimpleDateFormat?你的项目崩没?
Java八大常用类(五) 时间类
常用类 4 Date类和DateFormat类 我们把1970年1月1日00:00:00 定为基准时间
卢衍飞
2023/02/14
4770
Java 日期处理类
日期处理类 Date类 当前日期时间 java.util.Date import java.util.Date; public class TestDemo { public static void main(String [] args) { Date date = new Date(); System.out.println(date); } } 运行结果: Sat Jun 29 21:56:04 CST 2019 上述的结果表示的就是当前的日期时间,为国际标准的格式; 当然我们可以使
Mirror王宇阳
2020/11/12
1.1K0
14(02)正则表达式,Pattern,Mactcher,Math,BigInteger,BigDeximal,System等
5:BigInteger(理解) (1)针对大整数的运算 (2)构造方法 A:BigInteger(String s) package cn.itcast_01; import java.math.BigInteger; /* * BigInteger:可以让超过Integer范围内的数据进行运算 * * 构造方法: * BigInteger(String val) */ public class BigIntegerDemo { public static void main(St
Java帮帮
2018/03/16
9780
Java中的SimpleDateFormat方法分析
本专栏是自己学Java的旅途,纯手敲的代码,自己跟着黑马课程学习的,并加入一些自己的理解,对代码和笔记 进行适当修改。希望能对大家能有所帮助,同时也是请大家对我进行监督,对我写的代码进行建议,互相学习。
学编程的小程
2023/10/11
2120
Java中的SimpleDateFormat方法分析
【JavaSE专栏43】Java常用类SimpleDateFormat解析,轻松解决日期格式化问题
本文讲解了 Java 中常用类 SimpleDateFormat 的语法、使用说明和应用场景,并给出了样例代码。
Designer 小郑
2023/08/02
1.6K0
【JavaSE专栏43】Java常用类SimpleDateFormat解析,轻松解决日期格式化问题
推荐阅读
相关推荐
Java - Date
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文