CSS选择器及优先级

css选择器作为网页中我们用来选中样式添加样式的一样利器,掌握好它无疑是我们能够在开发中顺心顺手的前提。这里汇总了CSS和CSS3的选择器,这里有些选择器你可能不常用,但是过一眼还是很有必要的,大家共勉!

一、基本选择器

选择器 含义
* 类似于正则的*,匹配任何元素
E 标签选择器,匹配所有标签名为E的元素
.className 类选择器,匹配标签中含有class=”className”的属性
#idName id选择器,匹配标签中含有id=”idName”的属性

class和id的区别即多和一的区别,希望大家自己查阅资料,。

EXP:

1
2
3
4
*{margin:0;padding:0;}
a{color:#000;}
.form-group{height:150px;}
#nav{backgound:rgba(0,0,0,0.7);}

二、组合选择器

选择器 含义
E1,E2 多元素选择器,同时匹配所有标签名为E1和E2的元素,以逗号分割
E1 E2 后代元素选择器,匹配所有E1元素中的E2元素,以空格作为标识
E1 > E2 子元素选择器,匹配所有E1元素子元素中E2
E1 + E2 邻居选择器,匹配所有与E元素同级且在紧邻其后的元素E2

EXP:

1
2
3
4
html,body{margin:0;padding:0;}
ul li{float:left;}
#nav > div{height:40px;}
p + p{color:#f6c;}

三、CSS2.1属性选择器

选择器 含义
E[attr] 匹配所有具有attr属性的E元素,不考虑它的值(ps:E可以省略,如’[selected],下同’)
E[attr=val] 匹配所有属性attr值等于val的元素E
E[attr~=val] 匹配所有attr属性具有多个空格分割的值,其中一个值等于”val”的E元素
E[attr =val] 匹配所有attr属性具有多个连字号分割的值,其中一个值以”val”开头的E元素,主要用于lang的属性,比如”en”、”en-us”

EXP:

1
2
3
4
p[title]{color:#f6c;}
input[type=button]{width:60px;}
td[headers~=coll]{color:#f6c;}
p[lang|=en]{color:#f6c;}

四、css2.1中的伪类

选择器 含义
E:first-child 匹配父元素E的第一个子元素
E:link 匹配所有未被点击链接的E元素
E:visited 匹配所有已被点击链接的E元素
E:active 匹配鼠标已经按下还没释放的E元素
E:hover 匹配鼠标悬停的E元素
E:focus 匹配获得当前焦点的E元素
E:lang(c) 匹配lang属性等于c的E元素

EXP:

1
2
3
4
5
ul:first-child{background:#000;}
/*hover,link,active,vistied主要匹配的状态不同,感兴趣的可以自行百度*/
a:hover{color:orange;}
input[type=text]:focu[color:#000;]
q:lang(sv){quotes:"\201D" "\201D" "\2019" "\2019"}

五、CSS2.1中的伪元素

选择器 含义
E:first-line  匹配E元素的第一行
E:first-letter 匹配E元素的第一个字母
E:before 在E元素之前插入生成的内容
E:after 在E元素之后插入生成的内容

下一篇博客会说到三角形的生成以及before和after的应用

EXP:

1
2
3
.cbb:before { content:""; display:block; height:17px; width:18px; background:url(top.png) no-repeat 0 0; margin:0 0 0 -18px; }
a:link:after { content: " (" attr(href) ") "; }


六、CSS3的同级元素通用选择器

选择器 含义
E1~E2 匹配E1元素之后的同级E2元素

EXP:

1
p ~ div{background:#fff;}

七、CSS3属性选择器

选择器 含义
E[attr^=”val”] 匹配属性attr的值以“val”开头的元素
E[attr$=”val”] 匹配属性attr的值以”val“结尾的元素
E[attr*=”val”] 匹配属性attr值中包含“val”的元素

EXP:

1
div[id^="nav"]{background:#ff0;}

八、CSS3中与用户界面有关的伪类

选择器 含义
E:enabled 匹配表单中激活的元素
E:disabled 匹配表单中被禁用的元素
E:checked 匹配表单中被选中的radio或checkbox元素
E::selection 匹配用户当前选择的元素

EXP:

1
input[type="text"]:disabled{background:#ddd;}

九、CSS3中的结构性伪类

选择器 含义
E:root 匹配文档的根元素,对于HTML文档,就是HTML元素
E:nth-child(n) 匹配其父元素的第n(起始为1)个子元素
E:nth-last-child(n) 匹配其父元素的倒数第n(起始为1)个子元素
E:nth-of-type(n) 与nth—child作用类似,但是仅匹配使用同种标签的元素
E:nth-last-of-type(n) 与nth-last-child作用类似,但是仅匹配使用同种标签的元素
E:last-child 匹配父元素的最后一个子元素,等同于nth-last-child(1)
E:first-of-type 匹配父元素下使用同种标签的第一个子元素,等同于nth-of-type(1)
E:last-of-type 匹配父元素下使用同种标签的最后一个子元素,等同于nth-last-of-type(1)
E:only-child 匹配父元素下仅有的一个子元素,等同于:first-child:last-child 或 :nth-child(1):nth-last-child(1)
E:only-of-type 匹配父元素下使用同种标签的为一个一个子元素,等同于:first-of-type:last-of-type 或 :nth-of-type(1):nth-last-of-type(1)
E:empty 匹配一个不包含任何子元素的元素,ps:文本节点也被看做子元素

EXP:

1
2
3
4
5
6
7
8
9
10
p:nth-child(3){color:#f6c;}
/*匹配p元素下的奇数位子元素*/
p:nth-child(odd){color:#f6c;}
/*匹配p元素下的偶数数位子元素*/
p:nth-child(even){color:#f6c;}
/*这种用法要了解,灵活匹配中间的元素*/
tr:nth-child(3n+3){background:#f6c;}

十、CSS3的反选伪类

选择器 含义
E:not(s)  匹配不符合当前选择器的任何元素

EXP:

1
2
3
4
5
/*匹配所有不包含class1的元素*/
:not(.class1)
/*匹配所有含有子元素的p元素*/
p:not(:empty)

十一、CSS3中的target伪类

选择器 含义
E:target   匹配文档中特定”id”点击后的效果

更多信息请参照W3C进行阅读,关于伪类的知识点就介绍到这里了!


选择器优先级

页面中我们可能对一个元素应用了多个样式,那它到底会应用那个样式呢,这涉及到了优先级,下面就补充下关于选择器的优先级问题。

选择器的特殊性分为4个权重值a b c d,值分别为1000,100,10,1,从左到右,越左边的越优先。

  • HTML内样式,那么特殊性最优先,权重为1000
  • id选择器的特殊性是b,权重为100
  • 类选择器、伪类选择器、属性选择器为c,权重为10
  • 标签选择器、伪元素选择器为d,权重为1

ps:

  • 比较的过程就是将权重相加,大者优先级高
  • 结果相同的情况下,后定义的样式会覆盖前面的
  • 样式中含有!important,则该样式或者该属性优先级最高,无视其他样式,即使是内联样式

!important特殊性

1
2
#id { color: red }
.class { color: yellow !important }

第二个样式优先于第一个样式,即使id选择器优先级高于类选择器

1
2
3
4
5
div {
color: yellow !important;
color: red;
}

这种情况带!important的属性优先级高,但是在IE6这样会显示为红色,是因为IE6的一点小bug,通过书写格式可以避免,可以参考这篇博文