首页 > 其他分享 >前端必修技能:高手进阶核心知识分享 - CSS伪类和伪元素

前端必修技能:高手进阶核心知识分享 - CSS伪类和伪元素

时间:2024-07-19 22:30:37浏览次数:15  
标签:hover 进阶 伪类 元素 文档 选择器 CSS

前端必修技能:高手进阶核心知识分享 - 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.

CSS 引入伪类和伪元素的概念是为了格式化文档树以外的信息。也就是说,伪类和伪元素是用来修饰不在文档树中的部分。比如,一句话中的第一个字母,或者是列表中的第一个元素。换个说法,就是用css的类无法精确控制到的地方,才需要伪类和伪元素。

所谓文档树,你可以这样理解:HTML 的文档树是指由 HTML 元素组成的层次结构,这些元素包括 html、head、body 等,并且可以包含其他的元素或者文本。下面是一个典型的HTML文档树:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文档树案例</title>
</head>
<body>
    <div id="content">
        <h1>我是文档的标题</h1>
        <p>我是文档的内容</p>
        <img src="image.jpg" alt="An example image">
        <a href="###">我是个链接</a>
    </div>
</body>
</html>

在这个示例中,html 是根元素,它包含了 head 和body 两个子元素。head 包含了 title 和 meta 元素,而 body 包含了 h1, p, 和 img 元素。这样的层次结构构成了 HTML 的文档树。

document
└── html
    ├── head
    │   └── title
    │       └── "文档树案例"
    └── body
        └── div#content
            ├── h1
            │   └── "我是文档的标题"
            ├── p
            │   └── "我是文档的内容"
            └── a
                └── "我是个链接"

也就是说,伪类和伪元素都不会出现在这个树上。

什么是伪类

说伪类,就得先说类。CSS的类是什么? 就是 class 类选择器。

我们都知道类选择器的作用:用来给HTML的元素添加不同的样式,比如:

.blue{ color:blue; }

那么伪类呢?既然是带个伪的类,那么它的作用其实也是与类选择器相同,只不过,它是比类选择器更加细化的去给元素的某个特别状态(或者与类元素相关的指定的元素)增加样式。比如,鼠标滑过文字链接,按钮被按下,文本框获得焦点,又或者选择本元素的第一个子元素,第一个兄弟元素等等等等。这时候,就是需要伪类的时候。于是CSS给我们定义了伪类选择器:

a:hover{}
button:active{}
input:focus{}

我们可以把伪类理解成基于类选择器的特殊扩展和补充。伪类选择元素基于的是当前元素处于的状态,或者说元素当前所具有的特性,而不是元素的id、class、属性等静态的标志。由于状态是动态变化的,所以一个元素达到一个特定状态时,它可能得到一个伪类的样式;当状态改变时,它又会失去这个样式。所以,它必须是依赖于类选择器的才能生效的。我们不能单独使用它。

那么,我们为什么需要为这些状态定义不同的样式?因为我们需要让访问者通过一个元素的不同的状态变化,清晰的感知到,他在哪里,他在做什么。

所以,伪类的概念大概就清楚了:伪类用于当已有元素处于某个状态时,为其添加对应的样式,这个状态是根据用户行为而动态变化的。

常用的伪类:

状态伪类

状态伪类是基于元素当前状态进行选择的。在与用户的交互过程中元素的状态是动态变化的,因此该元素会根据其状态呈现不同的样式。当元素处于某状态时会呈现该样式,而进入另一状态后,该样式就会失去。状态伪类的顺序很重要,顺序错误可能会导致没有效果。通常的建议是LVFHA,即—–未访问(:link)、已访问(:visited)、获得焦点(:focus)、激活(:active)和悬停(:hover)。(注意:状态伪类不一定只写在 诸如 a,input,button等元素上,也可以作用于其他如 div、img等其他元素上 )

选择器

示例

示例说明

:link

a:link

选择所有未访问的链接

:visited

a:visited

选择所有访问过的链接

:hover

a:hover

选择鼠标悬空的链接

:active

a:active

选择正在活动的链接

:focus

input:focus

选择获得焦点的输入框

举个例子

下面是一个a标签(链接)的四种状态。

a:link {
  color: blue;
}
a:visited {
  color: red;
}
a:hover {
  color: green;
}
a:active {
  color: yellow;
}

当鼠标悬浮在未访问或已访问链接的时候,都会同时存在两种状态,:link与:hover或:visited与:hover。如果:hover声明在:link或:visited之前,那么就会被覆盖掉。当鼠标点中链接的时候,会同时存在两种状态,:active与:hover。如果:active声明在:hover之前,那么会被覆盖掉。因此:hover与:active必须在:link与:visited之后,而:active必须在:hover之后,至于:link与:visited,它们两个的顺序可以互换。

下面动画演示了上述代码的作用:

:focus伪类更多地用于表单元素,可在元素聚焦时生效,例如为文本框添加:focus

input{
  padding: 5px 10px;
  background: #eaeaea;
  border:2px solid #666;
}
input:focus{
  outline: none;
  background: #f99;
  border:2px solid #10f;
}

在下图中,右边就是input文本框获得输入焦点时的样式。

结构化伪类

结构化伪类是 CSS3 新增选择器,利用 DOM 树进行元素过滤,通过文档结构的互相关系来匹配元素,能够减少 class 和 id 属性的定义,使文档结构更简洁。

伪类选择器

示例

示例说明

:root

匹配文档的根元素

一般的 html 文件的根元素是 html 元素。

:not (selector)

:not(p)

选择所有p以外的元素

:empty

p:empty

匹配所有没有子元素的 p 元素

:target

#news:target

选择当前活动#news元素(点击URL包含锚的名字)

:first-child

p:first-child

选择符合的p元素,该p元素必须是其父元素的第一个子元素

:first-of-type

p:first-of-type

选择符合的p元素,该p元素必须是其父元素的第一个p子元素

:last-child

p:last-child

选择符合的p元素,该p元素必须是其父元素的最后一个子元素

:last-of-type

p:last-of-type

选择符合的p元素,该p元素必须是其父元素的最后一个p子元素

:nth-child(n)

p:nth-child(2)

选择符合的p元素,该p元素必须是其父元素的第2个子元素

:nth-last-child(n)

p:nth-last-child(2)

选择符合的p元素,该p元素必须是其父元素的倒数第2个子元素

:nth-last-of-type(n)

p:nth-last-of-type(2)

选择符合的p元素,该p元素必须是其父元素的倒数第2个p子元素

:nth-of-type(n)

p:nth-of-type(2)

选择符合的p元素,该p元素必须是其父元素的第2个p子元素

:only-of-type

p:only-of-type

选择符合的p元素,该p元素的父元素可以有多个子元素,但是类型为p的子元素只有一个

:only-child

p:only-child

选择符合的p元素,该p元素的父元素只有一个子元素,就是该p元素

:root

:root选择器用匹配文档的根元素。在HTML中根元素始终是HTML元素,所以也可以把:root理解为html根元素选择器,但是比html根元素的优先级高,:root伪类选择器常常被用于定义全局的CSS变量或者设置全局的CSS样式。比如:

:root{
    --font-size: 16px; // 定义CSS变量;
    --color:#330;    
 

标签:hover,进阶,伪类,元素,文档,选择器,CSS
From: https://blog.csdn.net/uuplay0216/article/details/140559972

相关文章

  • 【C++进阶学习】第七弹——AVL树——树形结构存储数据的经典模块
    二叉搜索树:【C++进阶学习】第五弹——二叉搜索树——二叉树进阶及set和map的铺垫-CSDN博客目录一、AVL树的概念二、AVL树的原理与实现AVL树的节点AVL树的插入AVL树的旋转AVL树的打印AVL树的检查三、实现AVL树的完整代码四、总结前言:在前面我们学习二叉搜索树的......
  • 编织文字之美:WebKit的CSS文本格式化能力全解析
    编织文字之美:WebKit的CSS文本格式化能力全解析在网页设计中,文本不仅是传递信息的媒介,更是展现美学的重要元素。WebKit,作为Safari、QQ浏览器等众多浏览器的内核,提供了强大的CSS文本格式化支持。通过CSS,开发者可以对文本进行丰富的样式设计,从而提升用户体验和网站的视觉吸引......
  • 动态美学:WebKit中CSS转换与动画的魔力
    动态美学:WebKit中CSS转换与动画的魔力在现代网页设计中,CSS转换(Transforms)和动画(Transitions)是实现动态效果的两大法宝。它们能够为用户带来流畅、直观的交互体验。WebKit,作为Safari、QQ浏览器等众多浏览器的核心引擎,对CSS转换和动画提供了全面的支持。本文将深入探讨WebKit......
  • ComfyUI进阶:Comfyroll插件 (四)
    ComfyUI进阶:Comfyroll插件(四)前言:学习ComfyUI是一场持久战,而Comfyroll是一款功能强大的自定义节点集合,专为ComfyUI用户打造,旨在提供更加丰富和专业的图像生成与编辑工具。借助这些节点,用户可以在静态图像的精细调整和动态动画的复杂构建方面进行深入探索。Comfyroll的节点设......
  • 15 指针 · 其三 · 进阶
    目录一、字符指针变量(一)字符指针与字符串数组区别二、数组指针变量(一)数组指针介绍(二)数组指针初始化(三)数组指针的使用三、二维数组传参的本质四、函数指针变量(一)函数指针介绍1、函数的地址2、函数指针的写法(二)函数指针的使用(三)两段有趣的代码(四)typedef五、函数......
  • CSS实现点击翻转效果
    1、先看效果就是点击之后反转成蓝色的过程,不知道用什么软件能录制个gif(如果你有什么好的录制gif软件可以告诉我,哈哈),就将就着看吧。上代码,html版本<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-wi......
  • CSS3案例--制作服装软文推广
    效果图:先使用通配符消除样式:字体倾斜效果使用font-style:italic;导入自定义字体样式:其中font-family属性值为自定义名src属性值存放字体样式所在位置 补充知识点:1.后代选择器表示方法:父选择器与后代选择器用空格隔开,或者用>隔开2.并集选择器表示方法:选择器之间用","隔开3.......
  • 【CSS学习第一篇】
    CSS学习第一篇1.CSS简介1.1什么是CSS?1.2CSS语法规范2.CSS选择器2.1CSS选择器的作用2.2CSS选择器的分类2.3标签选择器2.4类选择器2.5id选择器2.6通配符选择器3.CSS字体属性3.1font-family设置字体系列3.2font-size字号大小3.3font-weight字体粗细3.4font......
  • 前端重学笔记-CSS篇-10
    一、HTML5新特性HTML5的新增特性主要是针对于以前的不足,增加了一些新的标签、新的表单和新的表单属性等。这些新特性都有兼容性问题,基本是IE9+以上版本的浏览器才支持,如果不考虑兼容性问题,可以大量使用这些新特性。声明:1.新特性增加了很多,但是我们专注于开发常用的新特......
  • CSS盒子模型 (圆角边框,盒子阴影,文字阴影)
    (大家好,今天我们将继续来学习CSS的相关知识,大家可以在评论区进行互动答疑哦~加油!......