CSS选择器

以下大部分内容摘自张永民老师的课堂课件,也有对w3school.com.cn的参考,做了一定的整理和添加了一些自己的内容

选择器

基本选择器

名称例子作用
标签选择器p {font-size: 14px;}选择所有p元素
ID选择器#start {font-weight: bold;}选择id为start的元素
类选择器.even {font-style: italic;}选择所有类为even的元素

复合选择器

名称例子作用
派生选择器p span {font-size: 14px;}选择p元素的所有子孙元素中的span元素
子女选择器p>span {font-size: 14px;}选择p元素的所有子女元素中的span元素
组合选择器p#start {font-size: 14px;}选择id为start的p元素
群组选择器em, .even {font-size: 14px;}选择em元素或者类名为even的元素
相邻兄弟选择器h1 + p {color:red;}如果紧接着h1元素之后的h1的兄弟元素是p元素,它才会被选中
后续兄弟选择器h1 ~ p {color:red;}选择在 h1 元素之后所有h1的兄弟元素中的p元素
否定选择器p:not(#start){ font-size:36px;}选择所有id不是start的p元素

属性选择器

名称例子作用
属性存在选择器[alt] { width:200px; }选择所有具有属性alt的元素
元素属性选择器img[alt] { width:200px; }选择所有具有属性alt的img元素
属性值选择器[alt="fig 2-1"] { width:20px; }选择所有属性alt的值等于"figure 2-1"的元素
属性开头选择器img[alt^="fig"] { width:20px; }选择alt值以“figure”开头的所有img元素
属性结尾选择器img[alt$="2-1"] { width:20px; }选择alt值以“2-1”结尾的所有img元素
属性字符选择器img[alt*="5-"] { width:20px; }选择alt值包含字符串“5-”的所有img元素
属性单词选择器img[alt~="fig"] { width:20px; }选择alt值包含单词“figure”的所有img元素

nth-child子女选择器

名称例子作用
首位子女选择器p:first-child {color:red;}p的双亲的第一个子女
末位子女选择器p:last-child {color:red;}p的双亲的最后一个子女
特定子女选择器p:nth-child(5) {color:red;}p的双亲的第5个子女
偶数子女选择器p:nth-child(even) color:red;}p的双亲的第偶数个子女
奇数子女选择器p:nth-child(odd) {color:red;}p的双亲的第奇数个子女
公式子女选择器p:nth-child(3n+1) {color:red;}p的双亲的选择第3n+1(n>=0)个子女

双亲的各种类型的子女元素均参与计数,但是只有相应位置为元素p才会被选中

nth-of-type选择器

名称例子作用
首位子女选择器p:first-type {color:red;}p的双亲的第一个子女
末位子女选择器p:last-type {color:red;}p的双亲的最后一个子女
特定子女选择器p:nth-type(5) {color:red;}p的双亲的第5个子女
偶数子女选择器p:nth-type(even) color:red;}p的双亲的第偶数个子女
奇数子女选择器p:nth-type(odd) {color:red;}p的双亲的第奇数个子女
公式子女选择器p:nth-type(3n+1) {color:red;}p的双亲的选择第3n+1(n>=0)个子女

双亲的子女元素中只有p元素参与计数

伪元素选择器

名称例子作用
首字母选择器p:first-letter {font-size:2em;}p元素内容的第一个字母
首行选择器p:first-line {color:red;}p元素内容的第一行
末尾选择器p:after {content:"...";}在p元素内容之后插入内容...
开头选择器p:before {content:"***";}在p元素内容之前插入内容***

插入后的内容也算作p元素的内容,能够被javascript代码控制

伪类选择器

名称例子作用
链接选择器a:link {color:blue;}没有访问过的链接
历史选择器a:visited {color:red;}访问过的链接
悬浮选择器a:hover {font-size:2em;}鼠标悬浮下的元素
点击选择器a:active {color:green;}鼠标摁下时的链接
焦点选择器input:focus {background-color:red;}获得焦点的元素
已选选择器::selection为选中的文本设置样式
全局选择器*所有元素

样式层叠

选择器的特殊性的值可以由下面规则确定:

  1. 对于ID选择器,每个特殊性加(0,1,0,0)
  2. 对于类选择器、属性选择器、伪类选择器,每个特殊性加(0,0,1,0)
  3. 对于标签选择器和伪元素选择器,每个特殊性加(0,0,0,1)
  4. 每个元素只能定义一个行内样式,行内样式的特殊性为(1,0,0,0)
  5. 结合符和通配选择器,对特殊性没有任何贡献,即其特殊性为(0,0,0,0)
  6. 继承得来的选择器没有任何特殊性,即其特殊性为(0,0,0,0)
  7. 加上!important的样式具有最高特殊性

特殊性比较:

( 0,1,0,0 ) > ( 0,0,2,0 )

( 0,0,2,1 ) > ( 0,0,2,0 )

例子:

样式特殊性
p {color:blue}(0,0,0,1)
body p {color:red}(0,0,0,2)
h1.hot {color:green}(0,0,1,1)
p#start {color:black}(0,1,0,1)
body>div ul li[] ul li:hover {color:yellow}(0,0,2,6)
p {color:blue!important;}(inf, inf, inf, inf)