在css3提供的新选择器之前,选择一个元素需要借助id或者class,css3新增的选择器可以更灵活的去选择需要的元素,那css3提供了哪些好用的选择器呢?

首先就是属性选择器,我们可以通过属性选择器在同样的标签/类中选择出具有相同属性的元素,不用额外再添加class或者id比如需要选择出input标签中具有value属性的内容,就可以按以下方式

// css
input[value]{
color: #333;
} // html
<input type="text" value="请输入用户名">
<input type="text">

属性选择器还有以下匹配规则(E表示选择器,att表示属性值,val表示匹配的内容)

选择符

简介

E[att]

具有att属性的E元素

E[att=val]

具有att属性且值为val的E元素

E[att^=val]

具有att属性且值以val开头的E元素

E[att$=val]

具有att属性且值以val结尾的E元素

E[att*=val]

具有att属性且值包含val的E元素

选择出input标签中type为password的元素

// css
input[type=password]{
color: #000
}
// html
<input type="text">
<input type="password">

选择出div标签中class以movie开头的元素

// css
div[class^=movie]{
color: brown
} // html
<div class="movie-sky">天空之城</div>
<div class="movie-cat">龙猫</div>
<div class="movie-windy">起风了</div>
<div class="tv">武林外传</div>

按照以上五种属性选择规则,可以自由的选择具有某些特征的元素,那么如果此时我需要选择的元素没有单独的属性呢。
比如我想要在一串列表中选择出奇数项和偶数项元素,分别设置不同的背景颜色,此时就需要结构伪类选择器登场了。
结构伪类选择器可以按下标选出指定项,比如第一项 :first-child,最后一项 :last-child,奇数项 :nth-child(even),偶数项 :nth-child(odd),第任何一项 :nth-child(n)
 

拿上述选择器做一个演示

// html
<ul>
<li>千与千寻的神隐</li>
<li>起风了</li>
<li>龙猫</li>
<li>天空之城</li>
<li>魔女宅急便</li>
</ul> // css
ul :first-child {
color: brown // 选择ul的第一个子元素设置字体颜色为棕色
} ul :last-child {
text-decoration: underline; // 选择ul的最后一个子元素设置下划线
} ul :nth-child(even){
font-weight: bold; // 选择ul的偶数子元素 设置字体加粗(下标从1开始)
}

可以看到,以上每一个伪类选择器与前一个选择器并没有直接连在一起,都有一个空格,那连在一起表示什么意思呢?拿  :first-child来举例,:last-child和 :nth-child都是类似的原理
ul :first-child  表示选择ul里的第一个子元素
ul:first-child 表示选择第一个ul元素

以下为 ul:first-child

如果我们需要对子元素的选择器属性进行校验,希望选择ul里的第一个子元素,并且是li,那么就可以这样定义

ul li:first-child

但是如果第一个元素与选定的元素不匹配,那么设置的样式就不会生效
// css
div p:first-child {
color: brown // 先找到div的第一个子元素,发现它并不是p元素,所以样式不生效
} // html
<div>
<div>div----千与千寻的神隐</div>
<p>p----起风了</p>
<p>p----龙猫</span>
<h6>h6----天空之城</h6>
<div>div----魔女宅急便</div>
</div>

那如果,我们想要选择div下面的第一个p元素呢?此时就可以使用 :first-of-type

// 表示选择div下p元素的第一个子元素
div p:first-of-type {
color: brown
}

那如果没有限定指定的子元素类型,所有的不同类型的子元素都会被设置样式

// css
div :first-of-type {
color: brown
}

与 :first-of-type 类似的还有以下两种选择器,分别是  :last-of-type(选择某种类型的最后一个子元素),:nth-of-type(按指定规则选择元素)

// css
div :first-of-type {
color: brown
} div :last-of-type {
text-indent: 10px;
} div :nth-of-type(2n+1) {
text-decoration: underline;
}

来一个表格总结以下以上六种结构伪类选择器

选择符

简介

备注

E :first-child

选择E元素的第一个子元素

E A:first-child(选择E元素的第一个子元素,且该子元素是A类型元素)

E :last-child

选择E元素的最后第一个子元素

E A:last-child(选择E元素的最后第一个子元素,且该子元素是A类型元素)

E :nth-child(n)

选择E元素的指定规则元素,比如 1、2、3这样的数字,

even(偶数)、odd(基数)这样的关键字,n或者2n+1这样的表达式

E A:nth-child(n)(选择E元素中符合指定规则的子元素,

且该子元素是A类型的元素)

E :first-of-type

选择E元素中不同类型的子元素中的第一个

E A:first-of-type(选择E元素中子元素为A,A元素中的第一个)

E :last-of-type

选择E元素中不同类型的子元素中的最后一个

E A:last-of-type(选择E元素中子元素为A,A元素中的最后一个)

E :nth-of-type(n)

选择E元素的不同类型的指定规则

E A:nth-of-type(选择E元素中子元素为A,A元素的指定规则)

以上的属性选择器和结构伪类选择器都是操作元素本身,那接下来这个选择器就很神奇,它会添加一个新的不存在的元素,并操作,一起来看看伪元素选择器。

设置伪元素,必须的属性是 content,其它的属性可以根据自己的需要设置,它常见的有以下几种用途,添加一个小图标,比如圆点,箭头

实现代码如下

// css
div {
position: relative;
} div::after {
position: absolute;
top: 7px;
left: 70px;
content: '';
display: block;
width: 7px;
height: 7px;
border-right: 1px solid #333;
border-top: 1px solid #333;
transform: rotate(45deg)
} // html
<div>查看更多</div>

或者设置鼠标滑动后添加一个遮罩层,效果显示

实现代码如下

// css
div{
position: relative;
width: 200px;
height: 200px;
margin-right: 60px;
} img {
width: 100%;
height: 100%;
} div::after {
display: none;
position: absolute;
top: 0;
left: 0;
content: '';
width: 100%;
height: 100%;
background: url(./src/broadcast.png) rgba(0,0,0,.5) center center no-repeat
} div:hover::after{
display: block;
} // html
<div>
<img src="./src/pig.jpg">
</div>

css3增加的以上选择器可以减少html的结构,更加灵活的获取需要的元素

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

  1. css伪类伪元素

    在CSS中,模式(pattern)匹配规则决定哪种样式规则应用于文档树(document tree)的哪个元素.这些模式叫着选择符(selector). 一条CSS规则(rule)是选择符{属性:值; ...

  2. 3 CSS 定位&浮动&水平对齐&组合选择符&伪类&伪元素

    CSS Position(定位):元素的定位与文档流无关 static定位: HTML元素的默认值, 没有定位,元素出现在正常的流中 静态定位的元素不会受到top,bottom,left,right影 ...

  3. css中伪类/伪元素详解

    一.伪类和伪元素 伪类和伪元素都是用来修饰不在文档树中的部分,区别在于, 伪类用于当已有元素处于的某个状态时,为其添加对应的样式,这个状态是根据用户行为而动态变化的(如:hover/:active). ...

  4. 前端笔记之HTML5&CSS3(中)选择器&伪类伪元素&CSS3效果&渐变背景&过渡

    一.CSS3选择器 CSS3是CSS的第三代版本,新增了很多功能,例如:强大的选择器.盒模型.圆角.渐变.动画.2D/3D转换.文字特效等. CSS3和HTML5没有任何关系!HTML5骨架中,可以用 ...

  5. HTML5--(2)属性选择器+结构性伪类+伪类

    一.属性选择器 [att] 匹配所有具有att属性的 [att=val] 匹配所有att属性等于“val”的 [att~=val] 匹配所有att属性包含“val”或者等于“val”的(val必须是一 ...

  6. CSS3——对齐 组合选择符 伪类 伪元素 导航栏 下拉菜单

     水平&垂直对齐 元素居中对齐 .center { margin: auto; width: 50%; border: 3px solid green; padding: 10px; } 文本 ...

  7. css3选择器的比较(三) -- 元素选择器 (+, ~)

    元素选择器中w3cschool中有些翻译不太准确 比如 +:其实是与element1元素同级,位于element1元素之后的第一个element2元素 ~:其实是与element1元素同级,位于ele ...

  8. css伪类 伪元素

    之前写了一篇 <详解 CSS 属性 - :before && :after> 的博文,当时自己没分清楚伪元素和伪类,所以在文章内把概念混淆了,庆幸 @riophae 兄指正 ...

  9. 伪类&伪元素

    刚开始学习伪类和伪元素的时候,觉得好混乱呀,分不清有什么区别,用的时候也没注意对比.现在总结一下他们的区别吧. w3c中对它们的定义分别为: css伪类用于向某些选择器添加特殊的效果. css伪元素用 ...

  10. css样式(二)(伪类 | 伪元素 | 导航 | 图像拼合 | 属性选择器 )

    一.rgb值: RGBA 颜色 RGBA 颜色值得到以下浏览器的支持:IE9+.Firefox +.Chrome.Safari 以及 Opera +. RGBA 颜色值是 RGB 颜色值的扩展,带有一 ...

随机推荐

  1. CentOS 8 部署 ELK 8.7真的是方便呀

    之前装过一次 ELK 7.7,相比之下装 8.7可方便太多了~ CentOS版本 CentOS-8.5.2111-x86_64-dvd1 JAVA ELK会自己使用内置版本的JDK ElasticSe ...

  2. office办公套件基础教程

    正文 1.网页端的应用-office全家桶 这里我选择先聊web端的应用,首先,我们来想象一下,只要你有网络,有浏览器,就能打开一个网页,在网页上进行编辑.处理一些word.报表.ppt等,你不需要复 ...

  3. 音视频八股文(11)-- ffmpeg avio 内存输入和内存输出。内存输出有完整代码,网上很少有的。

    1.avio介绍 avio是FFmpeg中的一个模块,用于实现多种输入输出方式的封装. avio提供了一系列API,可以将数据从内存读取到缓冲区中,也可以将缓冲区中的数据写入到内存中.其实现依赖于IO ...

  4. 2020-09-17:arp协议缓存过程是怎样的?

    福哥答案2020-09-17:#福大大架构师每日一题# [答案来自此链接](https://www.zhihu.com/question/421513153) ARP(Address Resoluti ...

  5. 2022-07-05:给定一个数组,想随时查询任何范围上的最大值。 如果只是根据初始数组建立、并且以后没有修改, 那么RMQ方法比线段树方法好实现,时间复杂度O(N*logN),额外空间复杂度O(N*

    2022-07-05:给定一个数组,想随时查询任何范围上的最大值. 如果只是根据初始数组建立.并且以后没有修改, 那么RMQ方法比线段树方法好实现,时间复杂度O(NlogN),额外空间复杂度O(Nlo ...

  6. 【C++】requires关键字简介

    requires 是 C++20 中引入的一个新关键字,用于在函数模板或类模板中声明所需的一组语义要求,它可以用来限制模板参数,类似于 typename 和 class 关键字. requires关键 ...

  7. vue全家桶进阶之路43:Vue3 Element Plus el-form表单组件

    在 Element Plus 中,el-form 是一个表单组件,用于创建表单以便用户填写和提交数据.它提供了许多内置的验证规则和验证方法,使表单验证更加容易. 使用 el-form 组件,您可以将表 ...

  8. 【Vue2.x源码系列08】Diff算法原理

    什么是虚拟DOM DOM是很慢的,其元素非常庞大,当我们频繁的去做 DOM更新,会产生一定的性能问题,我们可以直观感受一下 div元素包含的海量属性 在Javascript对象中,虚拟DOM 表现为一 ...

  9. Golang扫盲式学习——GO并发 | (一)

    并发与并行 并发与并行的概念和区别 并行:同一个时间段内多个任务同时在不同的CPU核心上执行.强调同一时刻多个任务之间的"同时执行". 并发:同一个时间段内多个任务都在进展.强调多 ...

  10. The shell

    The shell shell是什么? 如今的计算机有着多种多样的交互接口让我们可以进行指令的的输入,从炫酷的图像用户界面(GUI),语音输入甚至是 AR/VR 都已经无处不在. 这些交互接口可以覆盖 ...