css选择器
基本的元素、id、类选择器等就不讲了,主要总结css3选择器。
一、基本选择器
1.子元素选择器
格式:父元素 > 子元素
兼容性:IE8+、FireFox、Chrome、Opera、Safari
注意:子元素和后代的区别,子元素选择器是选择直接后代,就是它的儿子,而不是孙子、曾孙子。
2.相邻兄弟选择器
格式:元素 + 相邻兄弟元素
兼容性:IE8+、FireFox、Chrome、Opera、Safari
注意:兄弟即为有共同父元素的元素。相邻兄弟只选择紧挨着元素的下一个兄弟元素。
3.通用兄弟选择器
格式:元素 ~ 后面的兄弟元素
兼容性:IE8+、FireFox、Chrome、Opera、Safari
注意:选择后面的所有兄弟元素!
4.群组选择器
格式:元素1,元素2,…,元素n
兼容性:IE6+、FireFox、Chrome、Opera、Safari
注意:即为选择器的组合,用逗号隔开!
二、属性选择器
1.Element[attribute]
选择包含某属性的元素 eg.a[href]
兼容性:IE8+、FireFox、Chrome、Opera、Safari
2.Element[attribute=“value”]
选择包含某属性且为某属性值的元素 eg.a[href="…"]
兼容性:IE8+、FireFox、Chrome、Opera、Safari
3.Element[attribute~=“value”]
选择包含某属性且其属性值包含value的元素
兼容性:IE8+、FireFox、Chrome、Opera、Safari
<div class="aaa bbb"></div>
// div[class~="aaa"]
4.Element[attribut^=“value”]
选择包含某属性且其属性值以value开头的元素
兼容性:IE8+、FireFox、Chrome、Opera、Safari
<div class="#1"></div>
<div class="#2"></div>
// div[class^="#"]
5.Element[attribut$=“value”]
选择包含某属性且其属性值以value结尾的元素
兼容性:IE8+、FireFox、Chrome、Opera、Safari
6.Element[attribut*=“value”]
选择包含某属性且其属性值包含value字符串的元素
兼容性:IE8+、FireFox、Chrome、Opera、Safari
注意:不要跟~=的包含搞混了!
<div class="aa#aa"></div>
// div[class*="#"]
7.Element[attribut|=“value”]
选择包含某属性且其属性值为value或value开头的元素
兼容性:IE8+、FireFox、Chrome、Opera、Safari
三、伪类
1.动态伪类选择器
锚点伪类选择器
:link
选择匹配的element元素,而且匹配元素被定义了超链接并未被访问过。常用于链接描点上。
:visited
选择匹配的element元素,而且匹配元素被定义了超链接并已被访问过。常用于链接描点上。
用户行为选择器
:active
选择匹配的element元素,且匹配元素被激活。常用于链接描点和按钮上.
hover
选择匹配的element元素,且用户鼠标停留在元素element上。IE6及以下浏览器仅支持a:hover
:focus
选择匹配的element元素,而且匹配元素获取焦点。
注意:a:hover 必须被置于 a:link 和 a:visited 之后,a:active 必须被置于 a:hover之后,才是有效的。
即:a:link 、a:visited 、a:hover 、a:active 或 a:visited 、a:link 、a:hover 、a:active
2.UI元素状态伪类
兼容性:IE9+、FireFox、Chrome、Opera、Safari
- :enabled 匹配表单中激活的元素
- :disabled 匹配表单中禁用的元素
- :checked 匹配表单中被选中的radio(单选框)或checkbox(复选框)元素
3.结构类(:nth选择器)
:root
匹配文档的根元素,对于HTML文档,就是HTML元素
兼容性:IE9+、FireFox、Chrome、Opera、Safari
:first-child
匹配属于其父元素的首个子元素的每个Elenment元素,等同于:nth-child(1)
上面这句话听起来有点拗口,拿div元素举例,先找到div的父元素的第一个子元素,如果这个子元素是div,则选择,如果不是则不匹配。
兼容性:IE8+、FireFox、Chrome、Opera、Safari
:last-child
匹配属于其父元素的首个子元素的每个Elenment元素,等同于:nth-last-child(1)
与:first-child相同,当其父元素的最后一个子元素为该Elenment时才选择!
兼容性:IE8+、FireFox、Chrome、Opera、Safari
:nth-child(n)
匹配属于其父元素的第n个子元素,当这个子元素为该Elenment元素时选择。
关于参数:
- 从1开始计数!
- 也可以传入n(但只能是n,不能是其他字母),且n从0开始计数。如2n,选择第2、4、6…个;但不能传入 n*n,不能传入*这个字符!
- :nth-child(odd)匹配奇数项,:nth-child(even)匹配偶数项
兼容性:IE9+、FireFox4+、Chrome、Opera、Safari
:nth-last-child(n)
匹配属于其父元素的第n个子元素,当这个子元素为该Elenment元素时选择,从最后一个子元素开始计数。其他和:nth-child(n)相同。
兼容性:IE9+、FireFox4+、Chrome、Opera、Safari
:nth-of-type(n)
匹配属于其父元素的特定类型的第n个子元素的每个元素。比如div:nth-of-type(2),就是选择div的父元素的第二个div元素,而:nth-child(2)匹配的是第二个子元素,仅当这个子元素为div时才选择。
兼容性:IE9+、FireFox4+、Chrome、Opera、Safari
:nth-last-of-type(n)
匹配属于其父元素的特定类型的第n个子元素的每个元素,从最后一个开始计数。不再赘述。
兼容性:IE9+、FireFox4+、Chrome、Opera、Safari
:first-of-type
匹配属于其父元素的特定类型的首个子元素的每个元素,等同于:nth-of-type(1)
兼容性:IE9+、FireFox、Chrome、Opera、Safari
:last-of-type
匹配属于其父元素的特定类型的最后一个子元素的每个元素,等同于:nth-last-of-type(1)
兼容性:IE9+、FireFox、Chrome、Opera、Safari
:only-child
匹配父元素下仅有的一个子元素,当这个唯一子元素为该Elenment时选择。等同于:first-child:last-child或 :nth-child(1):nth-last-child(1)
兼容性:IE9+、FireFox、Chrome、Opera、Safari
:only-of-type
匹配属于其父元素的特定类型的唯一子元素的每个元素,等同于:first-of-type:last-of-type或 :nth-of-type(1):nth-last-of-type(1)
注意:其父元素只含有一个该element元素,但它可以有其他的子元素。
兼容性:IE9+、FireFox4+、Chrome、Opera、Safari
:empty
匹配一个不包含任何子元素(包括文本节点!)的元素
兼容性:IE9+、FireFox、Chrome、Opera、Safari
4.否定类:not(selector/element)
匹配不符合当前选择器的任何元素
语法:父元素:not(子元素/子选择器)
兼容性:IE9+、FireFox、Chrome、Opera、Safari
四、伪元素
语法:元素::伪元素
兼容性:IE9+、FireFox、Chrome、Opera、Safari
我们经常可以可见一个冒号版本的伪元素,并且它们也是可以起作用的。一个冒号的伪元素是在之前的css中定义的。在css3中,则规定了伪类用一个冒号来表示,而伪元素则用两个冒号来表示。
1. ::first-line
选择文本中的第一行,只用于块级元素,因为内联元素被当成只有一行,而在块级元素中才能识别出第一行。
2 ::first-letter
选择文本首字母,只用于块级元素
3. ::before
在元素的内容前面插入新内容,配合content使用。特点:
- 为第一个子元素,也就是会在最前面插入
- 为行级元素
- 内容通过content写入
- 支持css设置其样式
- 在html中不会找到对应的标签
4. ::after
与::before类似,在元素的内容最后面插入新内容。常用于“清除浮动”。注意在清除浮动的时候,要加上content:"";虽然其内容为空,但如果不加上,浏览器会忽略它,毕竟它没有内容,从而也就达不到清除浮动的效果了。
5. ::selection
用于设置在浏览器中选中文本后的背景色和前景色,在FireFox中要加前缀"-moz"。
权重
css有层叠性,用权重来解决冲突,权值越大权重越高。
权值计算:行内样式(1000)> id选择器(100)> 类、伪类、属性选择器(10)> 元素、伪元素选择器(1)> *(0)
如:.a #b{} 的权值为110,注意:
- 权值不可进位,因此,无论多少元素组成的选择器都没有一个class选择器权重高。
- 权重一样时,就近原则。后定义的规则会覆盖前面与之冲突的规则。
- 带有上下文关系的选择器比单纯的元素选择器权重要高。比如section > article {} 的权重比 article{}高。
- 被继承的css属性也带有权重,为0。