整体介绍
传统CSS2.1选择器 1)标签选择器和id选择器 2)class选择器 3)复合选择器 4)伪类 CSS3新增选择器 1)元素关系选择器 2)序号选择器 3)属性选择器 4)CSS3新增伪类 5)伪元素 层叠性和选择器权重计算
标签选择器和id选择器
标签选择器
标签选择器也称元素选择器、类型选择器,它直接使用元素的标签名当做选择器,将选择页面上所有该种标签
标签选择器将选择页面上所有该种标签,无论这个标签所处 位置的深浅
常见作用
标签选择器“覆盖面”非常大,所以通常用于标签的初始化
id选择器
认识id属性
<p id=“para1”>我是一个段落</p> 标签可以有id属性,是这个标签的唯一标识
- id的名称只能由字母、数字、下划线、短横构成,且不能以数字开头,字母区分大小写,但习惯上一般为小写字母
- 同一个页面上不能有相同id的标签
CSS选择器可以使用井号#前缀,选择指定id的标签
如何解决id只能有一个问题?使用class选择器
class选择器
class类名
<p class=“warning”>我是段落</p> class属性表示类名
- 类名的命名规范和id的命名规范相同
class选择器
使用点.前缀选择指定class的标签
class类名非常灵活
- 多个标签可以为相同类名
2. 同一个标签可以同时属于多个类,类名用空格隔开
原子类
在做网页项目前,可以将所有的常用字号、文字颜色、行高、外边距、内边距等都设置为单独的类
HTML标签就可以“择需选择”它的类名了,这样可以非常快速的添加一些常见样式
复合选择器
后代选择器
CSS选择器中,使用空格表示“后代”
“后代”并不一定是“儿子”
后代选择器可以有很多空格,隔开好几代
交集选择器
选择有.spec类的h3标签,此时应该使用交集选择器
并集选择器
并集选择器也叫作分组选择器,逗号表示分组
伪类
伪类是添加到选择器的描述性词语,指定要选择的元素的特殊状态,超级链接拥有4个特殊状态
爱恨准则
a标签的伪类书写,要按照“爱恨准则”的顺序,否则会有伪类不生效
代码
元素关系选择器
子选择器
从IE7开始兼容
当使用>符号分隔两个元素时,它只会匹配那些作为第一个元素的直接后代元素,即两个标签为父子关系
.box>p{ }
后代选择器不一定限制是子元素
.box p{ }
相邻兄弟选择器
也是从IE7开始兼容
相邻兄弟选择器(+)介于两个选择器之间,当第二个元素紧跟在第一个元素之后,并且两个元素都是属于同一个父元素的子元素,则第二个元素将被选中
说白了,a+b就是选择”紧跟在a后面的一个b”
通用兄弟选择器
也是从IE7开始兼容
通用兄弟选择器(~),a~b选择a元素之后所有同层级b元素
序号选择器
:first-child
:first-child表示“选择第一个子元素”,比如下面的例子就表示选择.box1盒子中第一个p
:last-child
:last-child表示”选择最后一个子元素”,比如上面的例子 可以用来选择.box1盒子中最后一个p
:nth-child()
:nth-child()可以选择任意序号的子元素
:nth-child()可以写成an+b的形式,表示从b开始每a个选 一个,注意不能写为b+an n从0、1、2、3…代入选择
拓展:2n+1=odd(奇数) 2n=even(偶数)
:nth-of-type()
:nth-of-type()将选择同种标签指定序号的子元素
:nth-last-child()和:nth-last-of-type()
:nth-last-child()和:nth-last-of-type()都是倒数选择
序号选择器的兼容性
属性选择器
CSS3新增伪类
伪元素
- CSS3新增了“伪元素”特性,顾名思义,表示虚拟动态创建的元素
- 伪元素用双冒号表示,IE8可以兼容单冒号
::befor和::after
::before创建一个伪元素,其将成为匹配选中的元素的第一个子元素,必须设置content属性表示其中的内容
可以用来添加可以点击的前置小圆点 ::after创建一个伪元素,其将成为匹配选中的元素的最后一个子元素,必须设置content属性表示其中的内容
::selection
::selection CSS伪元素应用于文档中被用户高亮的部分( 使用鼠标圈选的部分)
::first-letter和::first-letter
::first-letter会选中某元素中(必须是块级元素)第一行的第一个字母 ::first-line会选中某元素中(必须是块级元素)第一行全部文字
层叠性和选择器权重计算
CSS全名叫做“层叠式样式表”,层叠性是它很重要的性质 层叠性:多个选择器可以同时作用于同一个标签,效果叠加 标签选择器、class选择器、id选择器叠加
层叠性的冲突处理
如果多个选择器定义的属性有冲突呢?CSS有严密的处理冲突的规则
复杂选择器的权重计算
复杂选择器可以通过(id的个数,class的个数,标签的个数)的形式,计算权重
!important提升权重
如果我们需要将某个选择器的某条属性提升权重,可以在属 性后面写!important
很多公司不允许使用!important,因为这会带来不经意的样式冲突