作用:查找标签,设置样式。
为页面中某种元素统一设置样式。
元素选择器选择的是一类元素,而不是单独某一个,因此元素选择器无法实现差异化设置。
元素选择器无论嵌套关系有多深,都能找到对应的元素。
:::
根据元素的 class 值,来选中页面中所有带这个类名的元素。
一个元素可以有多个类名,类名之间以空格隔开。
class值,是我们自定义的,按照标准:不要使用纯数字、不要使用中文、尽量使用英文与数字的组合,若有多个单词组成,使用 -
做连接,例如:left-menu
,且命名要有意义,做到“见名知意”。
:::
根据元素的 id 属性值,来精准的找到页面中带有这个id属性值的元素,设置样式。
id属性值在一个页面中是唯一的,不可重复的。
id属性值:尽量由字母、数字、下划线(_)、短杠(-)组成,最好以字母开头、不要包含空格、区分大小写。
一个标签上只能有一个id属性值,一个id选择器只能选中一个标签。
id选择器通常配合js使用。
:::
可以选中页面中所有的 HTML 元素。
通配符选择器不需要调用,自动就给所有的元素使用样式。
一般用于清除样式。
:::
由两个或多个基础选择器,通过不同的方式组合而成。
作用:更准确、更高效的选择目标元素。
根据html标签的嵌套关系,选择父元素后代中满足条件的元素。
选择器之间用空格隔开
后代选择器,最终选择的是后代,不选中祖先。
儿子、孙子、重孙子,都算是后代
结构一定要符合HTML的嵌套要求,例如:不能 p 中写 h1~h6
:::
元素之间的关系主要有:父元素、子元素、祖先元素、后代元素、兄弟元素。
父元素:直接包裹某个元素的元素。
子元素:被父元素直接包含的元素。
祖先元素:父元素的父元素,...一直往外找都是祖先。
后代元素:子元素的子元素,...一直往里找都是后代。
兄弟元素:具有相同父元素的元素,互为兄弟元素。
根据html标签的嵌套关系,选择父元素子代中满足条件的元素。
子选择器又称「子代选择器」、「子元素选择器」。
选择器之间用 >
隔开
子选择器,最终选择的是子代,不是父级
子、孙子、重孙子、重重孙子....,统称后代,子就是指儿子。
:::
选中指定元素后,符合条件的相邻兄弟元素。
所谓相邻,就是紧挨着它的下一个,简记:睡在我下铺的兄弟。
:::
选中指定元素后,符合条件的所有兄弟元素。
两种兄弟选择器,选择的都是下面的兄弟
:::
同时选择多个选择器对应的元素,设置相同的样式,中间用 ,
间隔,又称「分组选择器」。所谓并集就是或者的含义。
并集选择器,我们一般竖着写
任何形式的选择器,都可以作为并集选择器的一部分。
并集选择器,常用于集体声明,可以缩小样式表体积。
:::
选中页面中同时符合多个条件的元素,交集有「并且」的含义。
交集选择器中如果有元素选择器,元素选择器必须写在最前面。
id选择器理论上可以作为交集的条件,但是实际应用中几乎不用,因为无意义。
交集选择器中不可能出现两个元素选择器,因为一个元素不可能即是p元素又是span元素。
用的最多的交集选择器是:元素选择器配合类选择器,例如:p.one
。
:::
选中特殊状态的元素
伪类:像类(class),但不是类,是元素的一种特殊状态。
动态伪类选择器 | 适用范围 | 描述 |
---|---|---|
:link | a元素 | 超链接未被访问的状态 |
:visited | a元素 | 超链接访问过的状态 |
:hover | 所有元素 | 鼠标悬停在元素上的状态 |
:active | 所有元素 | 鼠标在元素上按下还未弹起的状态 |
:focus | 表单元素 | 获取焦点的元素 |
:link
和 :visited
是a元素独有的两种状态lvha
结构伪类选择器主要根据元素在HTML中的结构关系查找元素
优势:减少对HTML中类的依赖,有利于保持代码整洁
使用场景:常用于查找父级选择器里面的子元素
选择符 | 简介 |
---|---|
:first-child |
所有兄弟元素中的第一个。 |
:last-child |
所有兄弟元素中的最后一个。 |
:only-child |
选择没有兄弟的元素(独生子女) |
:nth-child(n) |
所有兄弟元素中的第n个。 |
:nth-last-child(n) |
所有兄弟元素中的倒数第n个。 |
:first-of-type |
所有同类型兄弟元素中的第一个。 |
:last-of-type |
所有同类型兄弟元素中的最后一个。 |
:only-of-type |
选择没有同类型兄弟的元素 |
:nth-of-type(n) |
所有同类型兄弟元素中的第n个。 |
:nth-last-of-type(n) |
所有同类型兄弟元素中的倒数第n个。 |
:root |
选中的是根元素(html标签) |
:empty |
内容为空的元素(空格也算内容) |
关于 n
的值:
形式:an+b
0
或 不写
:什么都选不中。
n
:选中所有子元素。
1~正无穷的整数
:选中对应序号的子元素。
2n
或 even
:选中序号为偶数的子元素。
2n+1
或 odd
:选中序号为奇数的子元素。
-n+3
:选中的是前3个。
:not(选择器)
:排除满足括号中条件的元素。
:checked
:被选中的复选框或单选按钮。
:disabled
:可用的表单元素(没有 disabled 属性)。
:enabled
:不可用的表单元素(有 disabled 属性)。
:target
:选中锚点指向的元素。
:lang()
:根据指定的语言选择元素(本质是看 lang
属性的值)。
作用:选中属性值符合一定要求的元素。
语法:
选择符 | 简介 |
---|---|
[属性名] | 选中具有某个属性的元素 |
[属性名="值"] | 选中包含某个属性,且属性值等于指定值的元素 |
[属性名^="值"] | 选中包含某个属性,且属性值以指定的值开头的元素 |
[属性名$="值"] | 选中包含某个属性,且属性值以指定的值结尾的元素 |
[属性名*="值"] | 选中包含某个属性,且属性值包含指定值的元素 |
伪元素选择器可以帮助我们利用CSS创建新标签元素,而不需要HTML标签,从而简化HTML结构。
什么是伪元素?很像元素,但不是元素(element),是元素中的一些特殊位置。
::first-letter
:选中元素中的第一个文字。
::first-line
:选中元素中的第一行文字。
::selection
:选中被鼠标选中的内容。
::placeholder
:选中输入框的提示文字。
::before
:在元素最开始的位置,创建一个子元素(必须用 content
属性指定内容)。
::after
:在元素最后的位置,创建一个子元素(必须用 content
属性指定内容)。
!important
> 行内样式
> ID选择器
> 类选择器
> 元素选择器
> *
> 继承的样式
计算方式
每个选择器,都可以计算出一组权重,格式为:(a, b, c)
a
:ID选择器的个数。
b
:类、伪类、属性选择器的个数。
c
:元素、伪元素选择器的个数。
例如:
选择器 | 权重 |
---|---|
#code-better | (1, 0, 0) |
.code-better | (0, 1, 0) |
a | (0, 0, 1) |
比较规则
按照从左到右的顺序,依次比较大小,当前位胜出后,后面的不再对比,例如:
(1, 0, 0) > (0, 1, 0)
特殊规则
行内样式权重大于所有选择器
!important
的权重,大于行内样式,大于所有选择器,权重最高!
计算权重时需要注意:并集选择器的每一个部分是分开算的。