0

0

CSS伪类是什么?CSS伪类的详细介绍

不言

不言

发布时间:2018-11-02 09:38:27

|

4752人浏览过

|

来源于php中文网

原创

无论您是初学者还是经验丰富的css开发人员,您都可能听说过伪类。最着名的伪类可能是:hover,当指针设备(例如鼠标)指向它时,它允许我们在处于悬停状态时对元素进行样式化。

按照我们之前关于margin:autoCSS Floats的内容介绍,我们在这篇文章中对伪类进行了更深入的研究。我们将看到什么是伪类,它们是如何工作的,我们如何对它们进行分类,以及它们与伪元素的区别。(推荐教程:css视频教程

什么是伪类?

一个伪类是我们可以为了增加CSS选择一个关键字定义一个特殊状态的属于HTML元素。我们可以使用冒号语法 将伪类添加到CSS选择器,:如下所示:a:hover{ ... }

一个CSS类是我们可以添加到HTML我们想申请,同一款式的规则元素,例如顶部菜单项或侧边栏小工具的标题属性。换句话说,我们可以使用CSS类对以某种方式相似的HTML元素进行分组或分类。

立即学习前端免费学习笔记(深入)”;

伪类与它们类似,因为它们也用于将样式规则添加到共享相同特征的元素。

但是,虽然真正的类是用户定义的并且可以在源代码中被发现,但是例如,基于所属的HTML元素的当前状态,UA(用户代理)(例如web浏览器)添加

伪类。

伪类和伪元素可以在CSS选择器中使用,但在HTML源代码中不存在。相反,它们在某些条件下由UA“插入”以用于在样式表中寻址。

伪类的目的

常规CSS类的工作是对元素进行分类或分组。开发人员知道他们的元素是如何分组的:他们可以形成类似“菜单项”,“按钮”,“缩略图”等的类来分组,以及后来的类似元素的样式。这些分类基于开发人员自己给出的元素特征。

例如,如果开发者决定使用a 

作为缩略图对象,则可以使用
“缩略图”类对其进行分类。
[...]

然而,HTML元素具有基于其状态,位置,性质以及与页面和用户的交互的共同特征。这些是HTML代码中通常不标记的特征,但我们可以使用 CSS中的伪类来定位它们,例如:

1、一个元素,它是其父元素中的最后一个子元素

2、访问的链接

3、一个全屏的元素。

这些是伪类通常所针对的特征。为了更好地理解类和伪类之间的区别,我们假设我们使用该类.last来标识不同父容器中的最后一个元素。

  • item 1
  • item 2
  • item 3
  • item 4

我们可以使用以下CSS设置这些最后一个子元素的样式:

li.last {
  text-transform: uppercase;
}
 
option.last{
  font-style:italic;
}

   但是当最后一个元素改变时会发生什么?好吧,我们必须将.last类从前一个元素移动到当前元素。

更新类的麻烦可以留给用户代理,至少对于元素中常见的那些特征(并且最后一个元素是它可以获得的常见元素)。拥有预定义的:last-child伪类确实非常有用。这样,我们不必指示 HTML代码中的最后一个元素,但我们仍然可以使用以下CSS来设置它们的样式:

li:last-child {
  text-transform: uppercase;
}
 
option:last-child {
    font-style:italic;
}

伪类的主要类型

伪类有很多种,它们都为我们提供了基于其特征无法访问或难以访问的特征来定位元素的方法。这是MDN 中标准伪类的列表。

1.动态伪类

动态伪类根据它们为响应用户的交互而转换的状态动态地添加到HTML元素和从HTML元素中删除。一些的动态伪类的例子是,,,和,所有这些都可以被添加到锚定标记。:hover:focus:link:visited

a:visited{
  color: #8D20AE;
}
.button:hover,
.button:focus{
  font-weight: bold;
}

2.基于状态的伪类

基于状态的伪类在处于特定静态时添加到元素中。其中一些最着名的例子是:

:checked可以应用于复选框(

:fullscreen 定位当前以全屏模式显示的任何元素

:disabledHTML元素,可以是在已禁用模式,例如

最流行的基于状态的伪类必须是:checked,它标记是否选中了复选框。

.checkbox:checked + label{
  font-style:italic;
}
input:disabled{
  background-color: #EEEEEE;
}

3.结构伪类

结构伪类根据它们在文档结构中的位置对元素进行分类。它最常见的例子是:first-child,:last-child和:nth-child(n)- 都可以用来根据容器的位置来定位容器内的特定子元素 - 并且:root它以DOM中最高级别的父元素为目标。

4.杂项伪类

还有一些难以分类的杂项伪类,例如:

:not(x)选择与选择器x不匹配的元素

:lang(language-code) 选择哪些内容采用特定语言的元素

:dir(directionality)选择具有给定方向性内容的元素(从左到右或从右到左)。

p:lang(ko){
  background-color: #FFFF00;
}
:root{
  background-color: #FAEBD7;
}

nth-child与类型 Pseudo-Classes的第n个

其中一件关于伪类最难的事情是可能理解的差别:nth-child和:nth-of-type伪类。

两者都是结构伪类,并在父元素(容器)内标记特定元素,但方式不同。

久久企业网站后台管理系统1.0
久久企业网站后台管理系统1.0

一、功能简介本软件完全适应大、中、小型网站建设需要,让您用很便宜的虚拟主机空间也可以开通4个独立的网站!久久企业网站后台管理系统各种版本开发基础架构均为php+mysql+div+css+伪静态,迎合搜索引擎排名的喜好。另外值得一提的是本站特色的TAG系统可为您的网站做出无限分类,不用任何设置全站ULR伪静态!本建站系统除了有产品发布、新闻(软文)发布、订单管理系统和留言反馈等一些最基本的功能之外

下载

假设Ñ为2,然后:nth-of-child(n)靶向是一个元素它的父元素的第二个孩子,以及:nth-of-type(n)目标第二的中相同类型的元件的(例如段落)父元素内。

我们来看一个例子吧。

/* a paragraph that's also the second child inside its parent element */
  p:nth-child(2) {
  color: #1E90FF;    // lightblue
}
/* the second paragraph inside a parent element */
p:nth-of-type(2) {
  font-weight:bold;
}

 让我们看看这个简短的CSS样式如何在两种不同的情况下使用HTML。

案例1

在案例1中,a中的第二个元素

是无序列表,因此nth-child(2)规则不适用于它。虽然它是第二个子元素,但它不是一个段落。

但是,如果父元素确实具有第二个段落,则该nth-of-type(2)规则将适用,因为此规则仅查找

元素,而不关心父元素内的其他类型的元素(例如无序列表)。

在我们的示例中,nth-of-type(2)规则将设置第二个段落,即子3。


Paragraph 1, Child 1

    Unordered List 1, Child 2

Paragraph 2, Child 3

   360截图20181102092952505.jpg

案例2

在第二种情况下,我们将无序列表移到第三位,第二段将在它之前。这意味着将应用规则:nth-child(2)和:nth-of-type(2)规则,因为第二个段落也是其父

元素的第二个子句。

Paragraph 1, Child 1

Paragraph 2, Child 2

    Unordered List 1, Child 3

360截图20181102093205135.jpg

如果你想更多地了解:nth-of-child和:nth-of-type伪类之间的差异,CSS Tricks上有一个很棒的帖子。如果您使用SASS,Family.scss可以帮助您创建复杂的nth- child'ified元素。

伪类与伪元素

当我们谈论伪类时,理解它们与伪元素的区别也很重要,以免混淆它们。

Pseudo-elements用户代理也添加了诸如::before和::after(参见本教程如何使用它们),并且可以使用CSS对它们进行定位和设置样式,就像伪类一样。

但是,虽然我们使用伪类来选择文档树中仅存在未单独标记的HTML元素,但伪元素允许我们根据DOM(例如和)或仅作为目标通常不存在于DOM中的元素。现有元素的某些部分(例如或)。::before::after::first-letter::placeholder

语法也有区别。伪元素通常用双冒号识别::,而伪类用单冒号识别:。

这可能导致混乱,如CSS2中,伪元素也标记为单个冒号 - 浏览器仍接受伪元素的单冒号语法。

我们用CSS来定位伪类和伪元素之间也存在差异。

1.它们在CSS选择器序列中的位置

伪元素只能出现在选择器序列之后,而伪类可以放在CSS选择器序列中的任何位置。

例如,您可以

    以两种方式定位列表元素的最后一个列表项。
    ul > :last-child.red {
      color: #B0171F;
    }

    要么

    ul > .red:last-child {
      color: #B0171F;
    }

    选择器的第一个序列选择

      元素中的最后一个子元素(具有类.red),第二个元素选择.red内部具有类的元素中的最后一个子元素
        。如您所见,伪类的位置是可变的。

        让我们尝试用伪元素做类似的事情。

        ul > .red::after {
          display: block;
          content: 'red';
          color: #B0171F;
        }

        上面的CSS代码是有效的,文本“red”将出现在

      • 带有类的项目之后.red。

        另一方面,这段代码不起作用,因为我们无法改变选择器序列中伪元素的位置。

        ul > ::after.red {
          display: block;
          content: 'red';
          color: #B0171F;
        }

        2.选择器序列中的出现次数

        此外,只有一个伪元素可以出现在选择器旁边,而伪类可以在组合有意义的情况下相互组合。例如,为了目标,同时也是只读的,我们可以创建伪类组合的第一个孩子元素:first-child,并:read-only以下列方式:

        :first-child:read-only {
          color:#EEEEEE;
        }

        jQuery选择器扩展

        具有:语法的选择器代码并不总是构成适当的CSS伪类。如果您曾经使用过jQuery,那么您可能已经使用了许多具有:语法的选择器,例如$(':checkbox'),$(':input')和$(':selected')。

        重要的是要知道这些不是 jQuery所针对的CSS伪类。它们被称为jQuery选择器扩展。

        jQuery选择器扩展允许您使用更简单的关键字来定位HTML元素。它们中的大多数是多个普通CSS选择器的组合,它们用单个关键字表示。

        /* Change the font of all input-related HTML elements,
        like button, select, and input */
        $( ":input" ).css("font-family","courier new")

相关专题

更多
Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

9

2026.01.20

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

59

2026.01.19

java用途介绍
java用途介绍

本专题整合了java用途功能相关介绍,阅读专题下面的文章了解更多详细内容。

82

2026.01.19

java输出数组相关教程
java输出数组相关教程

本专题整合了java输出数组相关教程,阅读专题下面的文章了解更多详细内容。

38

2026.01.19

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

10

2026.01.19

xml格式相关教程
xml格式相关教程

本专题整合了xml格式相关教程汇总,阅读专题下面的文章了解更多详细内容。

13

2026.01.19

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

17

2026.01.19

微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

157

2026.01.18

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

162

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.0万人学习

Vue.js 开发基础教程
Vue.js 开发基础教程

共33课时 | 7.1万人学习

React Native进阶精讲视频教程
React Native进阶精讲视频教程

共17课时 | 3.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号