伪类(Pseudo classes)

由于状态的变化是非静态的,所以元素达到一个特定状态时,它可能得到一个伪类的样式;当状态改变时,它又会失去这个样式。由此可以看出,它的功能和 class 有些类似,但它是基于文档之外的抽象,所以叫伪类。

语法:selector:pseudo-class {}

:root

选择 html 元素,在声明全局 CSS 变量时很有用。

:root {
--first-color: #488cff;
--second-color: #ffff8c;
} #firstParagraph {
background-color: var(--first-color);
} #secondParagraph {
background-color: var(--second-color);
}

:target

若当前页面 URL 为:http://a.cn/index.html#section2,则<section id="section2">Example</section>可以通过 :target 选中。

:first-child

选择作为一组兄弟元素中的第一个元素,与父元素如何无关!

p:first-child 选择 p 元素,要求该元素是一组兄弟元素中的第一个元素(即 p 元素前面没有兄弟元素)。

p > i:first-child 选择 i 元素,要求:① 该 i 元素的父元素是 p 元素。② 该 i 元素是一组兄弟元素中的第一个元素。

p:first-child i 选择 i 元素,要求:① 该 i 元素的父元素是 p 元素。② 该 p 元素是一组兄弟元素中的第一个元素

:first-of-type

选择第一次出现的元素,相比于 :first-child,不要求没有前兄弟节点

  • p:first-of-type 选择 p 元素,要求该元素是某层级中第一次出现的 p 元素(与p 元素前面有没有兄弟元素无关)。

:last-child 和 :last-of-type

:first-child:first-of-type 的区别在于是否有 前兄弟元素,:last-child:last-of-type 的区别在于是否有 后兄弟元素。

  • p:last-child 选择 p 元素,要求该元素是一组兄弟元素的最后一个元素。
  • p:last-of-type 选择 p 元素,要求该元素是一组元素中最后一次出现的 p 元素,与该 p 元素后面是否还有兄弟元素无关。

:nth-child(an+b)

先找到一组兄弟元素,然后从 1 开始排序,选择符参数次序要求的元素。a、b 必须是整数。

  • div:nth-child(0n+1) 匹配一组兄弟元素中的第一个元素,且该元素是 div 元素。等同 div:nth-child(1) div:first-child
  • tr:nth-child(odd) 匹配表格中的奇数行,等同 tr:nth-child(2n+1)
  • tr:nth-child(even) 匹配表格中的偶数行,等同 tr:nth-child(2n+0)
  • span:nth-child(-n+3) 匹配前三个子元素中的 span 元素
  • .a span:nth-child(2n+1) 匹配 span 元素,要求:① 父元素的类为 a。② 该 span 元素在所在组兄弟元素中,次序为奇数

:nth-child():nth-last-child() 相反。

:nth-of-type(an+b)

针对具有一组兄弟节点的标签, 用参数来筛选出在一组兄弟节点的位置。

/* 奇数段 */
p:nth-of-type(2n+1) {
color: red;
}
<div>
<p>这是第一段。</p><!-- 被选择 -->
<div>这段不参与计数。</div>
<p>这是第二段。</p>
<p>这是第三段。</p><!-- 被选择 -->
</div>

:nth-of-type():nth-last-of-type() 相反。

其他伪类

  • a:link 未访问的链接
  • a:visited 已访问的链
  • a:hover 鼠标划过链接
  • a:active 已选中的链接
  • :checked 选择选中状态下的 radio 元素、checkbox 元素或 select 的 option
  • :disabled 选择被禁用的元素
  • :enabled 选择被启用的元素
  • div:focus 当 div 元素获得焦点时将被选中
  • div:focus-within 即使是 div 的子元素——而不是 div 自身获得焦点,也能被选中
  • p:not(.fancy) 选择类名不是 fancy 的 p 元素
  • :empty 选择元素内无任何子元素、文本、空格的元素
  • :only-child 匹配没有兄弟元素的元素,等同 :first-child:last-childnth-child(1):nth-last-child(1)
  • main :only-of-type 选择 main 元素下只出现一次的元素
  • :validinvalid 分别选择通过验证、未通过验证的表单元素

伪元素(Pseudo elements)

CSS伪元素控制的内容和元素是没有差别的,但是它本身只是基于元素的抽象,并不存在于文档中,所以称为伪元素。

语法:selector::pseudo-element {}。伪元素通常用两个冒号 ::,以便与伪类区别。

伪元素可以和伪类一起使用。

::before 和 ::after

创建一个伪元素,其将成为匹配选中的元素的第一个/最后一个子元素。常通过 content 属性来为一个元素添加修饰性的内容。此元素默认为行内元素

content 仅能用于 ::before::after 中,值有以下几种:

div::before {
content: none;
content: normal;
content: 'some text';
content: url(pic.jpg);
content: attr();
}

当值为 none 或 normal 时,伪元素无效;若想使用伪元素但又不想添加字符或图片,可以 content: ''

::first-letter

选中块级元素第一行的第一个字。允许设置的属性:与文字相关的属性、背景、边框、内边框、外边框。

::first-line

选中块级元素的第一行。允许设置的属性:与文字相关的属性、背景。

::selection

选中被用户选中的文字。允许设置的属性:color、background-color、cursor、caret-color、outline、text-decoration、text-emphasis-color、text-shadow。

参考资料

CSS 中的伪类和伪元素的更多相关文章

  1. CSS中伪类及伪元素用法详解

    CSS中伪类及伪元素用法详解   伪类的分类及作用: 注:该表引自W3School教程 伪元素的分类及作用: 接下来让博主通过一些生动的实例(之前的作业或小作品)来说明几种常用伪类的用法和效果,其他的 ...

  2. 关于css中伪类及伪元素的总结

    css中的伪类和伪元素总是混淆,今天参考了很多资料,也查看了部分文档,现将伪类及伪元素总结如下: 一.由来: 伪类和伪元素的引入都是因为在文档树里有些信息无法被充分描述,比如CSS没有"段落 ...

  3. CSS中的伪类与伪元素

    在前端开发中,大家或多或少的有接触过CSS伪类和伪元素,使用伪元素的时候,总感觉和伪类很相似,但又不能详细的说出两者的区别和联系,那么两者到底有什么区别和联系呢? 在 W3C 中定义: 伪类:用于向某 ...

  4. css中伪类与伪元素的区别

    一:伪类:1:定义:css伪类用于向某些选择器添加特殊效果. 伪类其实与普通的css类相类似,可以为已有的元素添加样式,但是他只有处于dom无法描述的状态下才能为文档树中的元素添加样式,所以将其称为伪 ...

  5. css中伪类和伪元素的区别

    转载:http://www.cnblogs.com/ihardcoder/p/5294927.html CSS3伪类和伪元素的特性和区别   前端er们大都或多或少地接触过CSS伪类和伪元素,比如最常 ...

  6. css伪选择器使用总结——css中关于伪类和伪元素的知识总汇

    CSS 伪类用于向某些选择器添加特殊的效果,而CSS引入伪类和伪元素的概念是为了实现基于文档树之外的信息的格式化.这里讲总结关于css伪类和伪元素的相关使用 伪元素 :before/:before 在 ...

  7. CSS3 动态生成内容(在Web中插入内容)====CSS的伪类或者伪元素

    # css3 .类:伪类::伪元素 /* CSS3伪元素/伪类 :https://www.w3.org/TR/css3-selectors/#selectors ::selection 伪元素(F12 ...

  8. 前端开发 CSS中你所不知道的伪类与伪元素的区别--摘抄

    做过前端开发的人都熟悉伪类与伪元素,而真正能够彻底了解这二者的区别的人并不多.伪类与伪元素确实很容易混淆. 伪元素主要是用来创建一些不存在原有dom结构树种的元素,例如:用::before和::aft ...

  9. css中伪类和伪元素

    伪类和伪元素时对那些我们不能通过class.id等选择元素的补充 伪类的操作对象是文档树中已有的元素(可以给已有元素加了一个类替代),而伪元素则创建了一个文档数外的元素(可以添加一个新元素替代) CS ...

  10. CSS伪类和伪元素

    一.伪类 CSS伪类用于向某些选择器添加特殊的效果,在W3规范中,CSS伪类有如下几个: CSS2.1 :active:向被激活的元素添加样式(激活是指点击鼠标那一下) :focus:向拥有键盘输入焦 ...

随机推荐

  1. MySQL datetime类型详解

    研发反馈问题,数据库中datetime数据类型存储的值末尾会因四舍五入出现不一致数据,影响查询结果,比如:程序中自动获取带毫秒精度的日期'2019-03-05 01:53:55.63',存入数据库后变 ...

  2. Python第六章-函数04-递归函数和拉姆达表达式

    五.递归函数 什么叫递归(recusive)? 你拿两个镜子互相面对着, 然后去看镜子, 会发现每个镜子中很多个镜子, 层层的嵌套, 无穷尽, 这就是一种递归! 从前有坐山, 山里有座庙, 庙里有个老 ...

  3. TensorFlow 一步一步实现卷积神经网络

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! TensorFlow 从入门到精通系列教程: http://www ...

  4. ICCV 2019|70 篇论文抢先读,含目标检测/自动驾驶/GCN/等(提供PDF下载)

    虽然ICCV2019已经公布了接收ID名单,但是具体的论文都还没放出来,为了让大家更快得看论文,我们汇总了目前已经公布的大部分ICCV2019 论文,并组织了ICCV2019论文汇总开源项目(http ...

  5. JVM中内存分配策略及堆和栈的比较

    最近愈发对JVM底层的运行 原理产生了兴趣,遂查阅相关资料以备忘. 内存分配策略 根据编译原理的观点,程序运行时的内存分配,有三种策略,分别为静态的.堆式的.栈式的. 静态存储分配指的是在编译时就能确 ...

  6. [bzoj4977]跳伞求生<贪心>

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4977 这是八月月赛的一道题,月赛的时候和同学讨论了一下,最后由一位叫二哥的大佬率先AC,用 ...

  7. 【tensorflow2.0】处理图片数据-cifar2分类

    1.准备数据 cifar2数据集为cifar10数据集的子集,只包括前两种类别airplane和automobile. 训练集有airplane和automobile图片各5000张,测试集有airp ...

  8. XXE验证与利用流程

    特征 特征1 --- .ashx 看到url是 .ashx后缀的 特征2 --- 响应体是xml 发现有这些特征都可以用下面的流程测试 测试 在线工具: http://ceye.io/ http:// ...

  9. Gang Of Four的23中设计模式

    Gang Of Four的23中设计模式 标签(空格分隔): 设计模式 1. 根据目的来进行划分 根据目的进行划分可以分为创建型模式, 结构型模式和行为模式三种. 1.1 创建型模式 怎样创建对象, ...

  10. 为什么Swift和Python要抛弃++\--?

    简单好用的++.-- 说到自增(++)\自减(--)运算符,小伙伴们应该都不会陌生,在很多编程语言的代码中,都经常出现它们的身影. 比如常用的for语句 for (int i = 0; i < ...