​本博文介绍CSS3中新增的选择器,包括属性选择器、结构伪类选择器和伪元素选择器。

1 属性选择器

属性选择器([属性])可以根据元素的属性和属性值来对符合要求的元素进行选择。

属性选择器的基础语法如下表:

语法 说明
标签[属性] {} 选择有目标属性的标签
标签[属性="value"] {} 选择有目标属性且属性值为"value"的标签
标签[属性^="x"] {} 选择有目标属性且属性值以"x"开头的标签
标签[属性$="x"] {} 选择有目标属性且属性值以"x"结尾的标签
标签[属性*="x"] {} 选择有目标属性且属性值包含"x"的标签

举两个实例:

① input[value] {} :选择具有value属性的input标签

② input[value="123"] {} :选择value属性值为"123"的input标签

注意事项:

(1)属性选择器(即[属性])的权重是0,0,1,0;

(2)标签[属性] 的权重是标签权重+属性选择器权重。

2 结构伪类选择器(上)

首先是第一类常用的结构伪类选择器,这类选择器常用于根据父级选择器来选择里面的子元素。

基础语法如下表:

语法 说明
E:first-child 选择父元素中的第一个子元素,若该元素为E,则选中,否则选择器不生效
E:last-child 选择父元素中的最后一个子元素,若该元素为E,则选中,否则选择器不生效
E:nth-child(n) 根据n来选择父元素中的子元素,若选中的子元素为E,则选中,否则选择器不生效

注意,这类选择器的选择步骤如下:

(1)先给所有子元素从1开始进行编号;

(2)根据选择器来进行选择。如:E:first-child就选择第一个子元素,如果这个子元素是E的话,那么就选中了;但如果第一个子元素不是E的话,那么这类选择器就不会生效。

总之,这类选择器是“先编号,再选择,选择的元素为E,则选中”。

可能语法太模糊?上实例:

① ul li:first-child :选择 ul 下的第1个子元素,若该元素为li,则选中该元素,否则不生效;

② ul li:nth-child(6)  :选择 ul 下的第6个子元素,若该元素为li,则选中该元素,否则不生效;

③ ul li:nth-child(2n) :选择 ul 下的所有第偶数个子元素(2n即为偶数),若其为 li 则选中。

接着,这里还要对E:nth-child(n)这一基本语法按照 n 的分类进行详细的说明:

E:nth-child(n)中 n 的类型 说明(选中的子元素为E则生效)
数字 选择第n个子元素
关键字"even" 选择所有第偶数个子元素
关键字"odd" 选择所有第奇数个子元素
公式 根据公式进行选择。注意:公式中的 n 从0开始计算,但子元素是从1开始计数的,因此第0个子元素是不存在的

当E:nth-child(n)中 n 的类型为“公式”时,提供以下实例供理解(n 从0开始计算):

选择器 说明(选中的子元素为E则生效)
E:nth-child(n) 选择从第0个开始的所有子元素
E:nth-child(n+3) 选择从第3个开始的所有子元素
E:nth-child(2n) 选择所有第偶数个子元素
E:nth-child(2n+1) 选择所有第奇数个子元素
E:nth-child(-n+3) 选择前3个子元素

实际上,在日常使用中,由于nth-child(n)会给所有子元素进行编号(不管是不是E),因此E:nth-child(n) 中 n 的值和 E 作为子元素的位置往往是对应的(这样选择器才会生效)。

3 结构伪类选择器(下)

接着是第二类常用的结构伪类选择器,这类选择器也用于根据父级选择器来选择里面的子元素,但和第一类有些差别。

基础语法如下表:

语法 说明
E:first-of-type 选择父元素中的第一个子元素E
E:last-of-type 选择父元素中的最后一个子元素E
E:nth-of-type(n) 根据n来选择父元素中的子元素E

注意,这类选择器的选择步骤如下:

(1)先给所有子元素E从1开始进行编号;

(2)根据选择器来进行选择。如:E:first-of-type就选择第一个子元素E。

直接上实例:

① div p:first-of-type :选择 div 下的第1个子元素p;

② div p:nth-of-type(2) :选择 div 下的第2个子元素p。

4 结构伪类选择器的比较

  结构伪类选择器 说明
不同点 :first-child、:last-child、:nth-child(n) 先给所有子元素编号,再选择,选中若是E则选择器有效,否则无效
:first-of-type、:last-of-type、:nth-of-type(n) 先给所有子元素E编号,再选择,选中一定是E
共同点 结构伪类选择器(如: first-child)的权重是0,0,1,0 E:first-child的权重是 E 的权重 + 0,0,1,0

5 伪元素选择器

伪元素选择器可以利用css创建新标签,简化HTML结构。

伪元素选择器的基础语法如下表:

语法 说明
E::before 在元素E内部的前面插入内容
E::after 在元素E内部的后面插入内容

需要注意的地方如下:

(1)创建的标签属于行内元素;

(2)新创建的元素在文档树中找不到;

(3)before和after必须有content属性;

(4)伪元素选择器(::before 和 ::after)权重为0,0,0,1。

提供一个实例:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=, initial-scale=1.0">
<title>Document</title>
<style>
div::before{
content: "前面的";
}
div::after{
content: "后面的";
}
</style>
</head>
<body>
<div>
选择器
</div>
</body>
</html>

页面效果如下:

可见,通过伪元素选择器,div元素中的文字“选择器”前后分别添加了文字“前面的”和“后面的”,这就是::before和::after的基础用法。

CSS3新增选择器(属性选择器、结构伪类选择器、伪元素选择器)的更多相关文章

  1. 妙味css3课程---1-2、css3中新增的伪类和伪元素有哪些

    妙味css3课程---1-2.css3中新增的伪类和伪元素有哪些 一.总结 一句话总结: 1.div:target{}是什么意思? 比如a标签的锚点链接到div,div:target{}就可以找到这个 ...

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

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

  3. 以css伪类为基础,引发的选择器讨论 [新手向]

    作为第一篇技术干货,来写哪个方面的内容,我着实考虑了很久. 经过了整整30秒的深思熟虑,我决定就我第一次发现新大陆一样的内容,来进行一次讨论. 伪类:伪类对元素进行分类是基于特征(characteri ...

  4. CSS样式表及选择器相关内容(二)-伪类与伪元素选择器

    伪类与伪元素选择器归纳: 一.伪类选择器(伪类以":"开头,用在选择器后,用于指明元素在某种特殊的状态下才能被选中)    1.a标签伪类选择器,其他标签类似        eg: ...

  5. 【CSS】伪类和伪元素选择器

    伪类 基于当前元素所处的状态或具有的特性,用于设置元素自身的特殊效果. a:link  规定所有未被点击的链接: a:visited  匹配多有已被点击过的链接: a:active  匹配所有鼠标按下 ...

  6. CSS 属性 - 伪类和伪元素的区别

    伪类和伪元素皆独立于文档结构.它们获取元素的途径也不是基于id.class.属性这些基础的元素特征,而是在处于特殊状态的元素(伪类),或者是元素中特别的内容(伪元素).区别总结如下: ①写法不一样: ...

  7. css3 -- 伪类与伪元素

    伪类: 1.结构伪类 A:E : first-child{} E : nth-*(n){} E : first-*(even){}  E : first-*(odd){} B:nth-child 是根 ...

  8. 《转载》详解 CSS 属性 - 伪类和伪元素的区别

    首先,阅读 w3c 对两者的定义: CSS 伪类用于向某些选择器添加特殊的效果. CSS 伪元素用于将特殊的效果添加到某些选择器. 可以明确两点,第一两者都与选择器相关,第二就是添加一些“特殊”的效果 ...

  9. css3的伪(伪类和伪元素)大合集

    本文讲css3的伪,不是讲它有多虚伪,而是说它的伪元素样式.不得不说以前虽知html伪元素,但很少用,后得知借助css3伪元素可以发挥极大的便利.故总结css3的伪如下: CSS中存在一些比较特殊的属 ...

  10. CSS3伪类和伪元素的特性和区别

    前端er们大都或多或少地接触过CSS伪类和伪元素,比如最常见的:focus,:hover以及<a>标签的:link.visited等,伪元素较常见的比如:before.:after等. 其 ...

随机推荐

  1. python播放音频文件

    可在nano或者gax上面使用(已测试过) 将mp3文件转换为wav文件 trans_mp3_to_wav.py from pydub import AudioSegment # 这里filepath ...

  2. 微服务注册到Nacos上的Ip错误,是内网ip不是公网ip

    spring.cloud.nacos.discovery.ip = 本机公网IP spring.cloud.nacos.discovery.port = 服务端口

  3. android charles 抓不到https包,翻了2天资料总算是找到答案了

    问题, android7.0以上有权限限制,导致很多机子无法用Charles 抓ssl的包. 以下是我自己的坑请大家参考 原因一: 用Charles 工具上的地址去安装 chls.pro/ssl 原因 ...

  4. RabbitMq的部署(docker)和操作(python)详解

    一.简介: RabbitMq 是实现了高级消息队列协议(AMQP)的开源消息代理中间件.消息队列是一种应用程序对应用程序的通行方式,应用程序通过写消息,将消息传递于队列,由另一应用程序读取 完成通信. ...

  5. django_url反向解析

    **************************************************************************************************** ...

  6. Java工程结构 应用分层

    (一) 应用分层 1. [推荐]图中默认上层依赖于下层,箭头关系表示可直接依赖,如:开放接口层可以依赖于 Web 层,也可以直接依赖于 Service 层,依此类推: • 开放接口层:可直接封装 Se ...

  7. vue.js拓展无法启用

    vue.js拓展无法启用 这里我以自己的谷歌浏览器演示 C:\Users\维磊\AppData\Local\Google\Chrome\User Data\Default\Extensions\nhd ...

  8. (6) JavaScript - Math对象与日期对象

    1 认识对象 概念:对象就是一种类型,一种引用类型,而对象则是引用类型的实例.在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起,通常它也被称作类. 面向过程思想:只考虑过程 ...

  9. 九九乘法表打印记一次al面试

    for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { System.out.print(i + "x&quo ...

  10. PCB封装设计建议:

    1,通孔型元器件建议孔直径比元器件管脚直径大0.2-0.3mm左右,焊盘铜皮外沿一般是0.3-1mm(相当于直径应该加0.6-2mm)宽大元件可再大一点,对于设计单面板的,则最小铜皮外沿应大于1mm以 ...