CSS3 选择器总览
关于浏览器支持:若未特别标明则主流浏览器都支持,其中以IE作为重点关注(IE8以下不考虑)。
选择器 | 例子 | 例子描述 | 版本 |
---|---|---|---|
.class | .a | 选择 class=“a” 的所有元素 | CSS1 |
#id | #box | 选择 id=“box” 的元素 | CSS1 |
* | * | 选择所有元素 | CSS2 |
element | p | 选择所有 p 元素 | CSS1 |
elementelement | div.a | 选择class="a"的div | CSS2 |
element,element | div,p | 选择所有 div 元素和所有 p 元素 | CSS1 |
element element | div p | 选择 div 元素内部的所有 p 元素 | CSS1 |
element>element | div>p | 选择 div 元素内的子元素 p | CSS1 |
element~element | div~p | 选择同层级中在div之后的所有 p | CSS3 |
element+element | div+p | 选择同层级中紧接在div之后 p | CSS2 |
[attribute] | [target] | 选择带有target属性所有元素 | CSS2 |
[attr=value] | [name=box] | 选择name="box"的所有元素 | CSS2 |
[attr~=value] | [title~=air] | 选择title属性包含单词"air"的所有元素 | CSS2 |
[attr|=value] | [lang|=en] | 选择lang属性值以"en"开头的所有元素 | CSS2 |
[attr^=value] | a[src^=“ht”] | 选择src属性值以"ht"开头的所有 a | CSS3 |
[attr$=value] | a[src$=".f"] | 选择src属性以".f"结尾的所有 a | CSS3 |
[attr*=value] | a[src*=“ab”] | 选择src属性中包含"ab"子串的所有 a | CSS3 |
:link | a:link | 选择所有未被访问的链接 | CSS1 |
:visited | a:visited | 选择所有已被访问的链接 | CSS1 |
:hover | a:hover | 选择鼠标指针位于其上的链接 | CSS1 |
:active | a:active | 选择活动链接 | CSS1 |
:focus | input:focus | 选择获得焦点的 input 元素 | CSS2 |
:target | #news:target | 选择当前活动的 #news 元素 | CSS3 |
:lang(language) | p:lang(it) | 选择带有以"it"开头的lang属性值的p | CSS2 |
:checked | input:checked | 选择每个被选中的 input 元素 | CSS3 |
:enabled | input:enabled | 选择每个启用的 input 元素 | CSS3 |
:disabled | input:disabled | 选择每个禁用的 input 元素 | CSS3 |
:out-of-range | :out-of-range | 匹配值在指定区间之外的input元素 | CSS3 |
:in-range | :in-range | 匹配值在指定区间之内的input元素 | CSS3 |
:read-write | :read-write | 选择可读及可写的元素 | CSS3 |
:read-only | :read-only | 选择设置 "readonly"只读属性的元素 | CSS3 |
:optional | :optional | 选择可选的输入元素 | CSS3 |
:required | :required | 选择设置了 “required” 属性的元素 | CSS3 |
:valid | :valid | 选择输入值为合法的元素 | CSS3 |
:invalid | :invalid | 选择输入值为非法的元素 | CSS3 |
:first-child | p:first-child | 同级别中第一个p | CSS2 |
:first-of-type | p:first-of-type | 同级别中同类型中第一个p | CSS3 |
:last-child | p:last-child | 同级别中最后一个p | CSS3 |
:last-of-type | p:last-of-tpye | 同级别中同类型中最后一个p | CSS3 |
:nth-child(x) | p:nth-child(3) | 同级别中第3个p | CSS3 |
:nth-of-type(x) | p:nth-of-type(3) | 同级别中同类型中第3个p | CSS3 |
:nth-last-child(x) | p:nth-last-child(3) | 同级别中倒数第3个p | CSS3 |
:nth-last-of-type(x) | p:nth-last-of-type(3) | 同级别中同类型中倒数第3个p | CSS3 |
:only-child | p:only-child | 同级中只有唯一元素且该元素是p | CSS3 |
:only-of-type | p:only-of-type | 同级中只有一个p元素 | CSS3 |
:nth-child(even) | p:nth-child(even) | 同级中偶数项中的p | CSS3 |
:nth-of-type(odd) | p:nth-of-type(odd) | 同级所有p中的奇数项中的p | CSS3 |
:nth-child(xn+y) | p:nth-child(2n+1) | 等同p:nth-child(odd) | CSS3 |
:root | :root | 选择文档的根元素 | CSS3 |
:empty | p:empty | 选择没有子元素的p(包括文本节点) | CSS3 |
:not(selector) | :not(div) | 选择非 div 元素 | CSS3 |
::first-letter | p::first-letter | 选择每个 p 元素的首字母 | CSS1 |
::first-line | p::first-line | 选择每个 p 元素的首行 | CSS1 |
::before | p::before | 在每个 p 元素的内容之前插入内容 | CSS2 |
::after | p::after | 在每个 p 元素的内容之后插入内容 | CSS2 |
::selection | ::selection | 选择被用户选取的元素部分 | CSS3 |
基本选择器
选择器 | 例子 | 例子描述 | 版本 |
---|---|---|---|
.class | .a | 选择 class=“a” 的所有元素 | CSS1 |
#id | #box | 选择 id=“box” 的元素 | CSS1 |
* | * | 选择所有元素 | CSS2 |
element | p | 选择所有 p 元素 | CSS1 |
element,element | div,p | 选择所有 div 元素和所有 p 元素 | CSS1 |
类选择器: .
设置 class="box"
元素的字体为红色。
.box{ color:red; }
id选择器: #
设置 id="box"
元素的字体为红色。
#box{ color:red; }
通配选择器: *
设置所有元素的字体为红色。
*{ color:red; }
元素选择器:
设置 <p>
元素的字体为红色。
p{ color:red; }
群组选择器: ,
设置 <p>
和 <div>
元素的字体为红色。
设置 <div>
和 class="box"
的元素的字体为红色。
p,div{ color:red; }
div,.box{ color:green; }
组合:
设置 class="box"
的 <div>
元素字体为红色,设置 id="log"
的 <div>
元素字体为绿色。
div.box{ color:red; }
div#log{ color:green; }
层次选择器
选择器 | 例子 | 例子描述 | 版本 |
---|---|---|---|
element element | div p | 选择 div 元素内部的所有 p 元素 | CSS1 |
element>element | div>p | 选择 div 元素内的子元素 p | CSS1 |
element~element | div~p | 选择同层级中在div之后的所有 p | CSS3 |
element+element | div+p | 选择同层级中紧接在div之后 p | CSS2 |
后代选择器:
设置 <div>
里面(后代元素)的 <p>
元素字体为红色。
div p{ color:red; }
子元素选择器: >
设置 <div>
子元素里面的 <p>
元素字体为红色。
div p{ color:red; }
通用兄弟选择器: ~
用于选择某元素后面的所有兄弟元素,它们具有相同的父元素。
例:设置 <div>
同层级后面所有的 <p>
元素字体为红色。
div~p{ color:red; }
相邻兄弟选择器: +
用于选择紧接在一个元素后的元素,它们具有一个相同的父元素。
例:设置 <div>
同层级且紧跟后面的 <p>
元素字体为红色。
div+p{ color:red; }
属性选择器
选择器 | 例子 | 例子描述 | 版本 |
---|---|---|---|
[attr] | [target] | 选择带有target属性所有元素 | CSS2 |
[attr=value] | [name=box] | 选择name="box"的所有元素 | CSS2 |
[attr~=value] | [title~=air] | 选择title属性包含单词"air"的所有元素 | CSS2 |
[attr|=value] | [lang|=en] | 选择lang属性值以"en"开头的所有元素 | CSS2 |
[attr^=value] | a[src^=“ht”] | 选择src属性值以"ht"开头的所有 a | CSS3 |
[attr$=value] | a[src$=".f"] | 选择src属性以".f"结尾的所有 a | CSS3 |
[attr*=value] | a[src*=“ab”] | 选择src属性中包含"ab"子串的所有 a | CSS3 |
具有某属性: [attr]
, [attr=value]
具有 attr
属性的元素,具有 attr="value"
属性的元素。
[target]{ color:red; }
[target=_blank]{ color:green; }
/*属性值带引号和省略引号效果一样*/
[target="_blank"]{ color:green; }
属性值包含单词: [attr~=value]
属性值 value
是一个单词,前后存在其它字符时应该是用空格隔开的。
<style>
[class=air]{ color:red; }
</style>
<span class="air">yes字体红色</span>
<span class="airk">no</span>
<span class="kair">no</span>
<span class="k air">yes字体红色</span>
<span class="air k">yes字体红色</span>
<span class="m air k">yes字体红色</span>
属性值开头CSS2: [attr|=value]
属性值是 value
或以 "value-"
开头的元素
<style>
[class|=air]{ color:red; }
</style>
<span class="air">yes字体红色</span>
<span class="airk">no</span>
<span class="air k">no</span>
<span class="air-k">yes字体红色</span>
<span class="m air-k">no</span>
属性值开头CSS3: [attr^=value]
属性值是 value
或以 "value"
开头的元素
<style>
[class^=air]{ color:red; }
</style>
<span class="air">yes字体红色</span>
<span class="airk">yes字体红色</span>
<span class="air k">yes字体红色</span>
<span class="air-k">yes字体红色</span>
<span class="m air-k">no</span>
属性值结尾CSS3: [attr$=value]
属性值是 value
或以 "value"
结尾的元素
<style>
[class$=air]{ color:red; }
</style>
<span class="air">yes字体红色</span>
<span class="airk">no</span>
<span class="kair">yes字体红色</span>
<span class="k air">yes字体红色</span>
<span class="m air k">no</span>
属性值包含子串: [attr*=value]
属性值包含字符 value
的元素。
<style>
[class*=air]{ color:red; }
</style>
<span class="air">yes字体红色</span>
<span class="airk">yes字体红色</span>
<span class="kair">yes字体红色</span>
<span class="k air">yes字体红色</span>
<span class="m air k">yes字体红色</span>
<span class="m a k">no</span>
伪类选择器
css3中的伪类选择器可以分成6种:动态伪类选择器,目标伪类选择器,语言伪类选择器,UI状态伪类选择器,结构伪类选择器和否定伪类选择器。伪类选择器语法书写时和其他的CSS选择器写法有所区别,都以冒号(:)开头。
动态伪类选择器
选择器 | 例子 | 例子描述 | 版本 |
---|---|---|---|
:link | a:link | 选择所有未被访问的链接 | CSS1 |
:visited | a:visited | 选择所有已被访问的链接 | CSS1 |
:hover | a:hover | 选择鼠标指针位于其上的链接 | CSS1 |
:active | a:active | 选择活动(鼠标按下时)链接 | CSS1 |
:focus | :focus | 选择获得焦点的元素 | CSS2 |
例:<a>
链接初始颜色设置为 red
,鼠标悬停时 pink
,鼠标按下不放时 yellow
,点击跳转时 green
,点击过后为 black
<style>
a:link{ color:red; }
a:hover{ color: pink; }
a:active{ color:yellow; }
a:focus{color:green;}
a:visited{ color:black; }
</style>
<a href="###">链接</a>
目标伪类选择器
选择器 | 例子 | 例子描述 | 版本 |
---|---|---|---|
:target | #news:target | 选择当前活动的 #news 元素 | CSS3 |
例:选中的锚点显示,其他的隐藏。
<style>
.box{ display: none; }
.box:target{ display: block; }
.box:target span{ color: red; }
</style>
<a href="#aaa">项目1</a>
<a href="#bbb">项目2</a>
<div id="aaa" class="box">
项目1的详细内容
</div>
<div id="bbb" class="box">
项目2的详细内容
<span>注意点...</span>
</div>
语言伪类选择器
语言伪类选择器是根据元素的语言编码匹配元素。
选择器 | 例子 | 例子描述 | 版本 |
---|---|---|---|
:lang(language) | p:lang(it) | 选择 lang 属性值为 it 的p | CSS2 |
例:设置 lang="a"
的元素字体为红色。
<style>
div:lang(a){ color: red; }
</style>
<div lang="a">yes字体红色</div>
<div lang="ab">no</div>
<div lang="a r">no</div>
<div lang="da">no</div>
UI元素状态伪类选择器
主要用于form表单元素上,UI元素的状态一般包括:启用,禁用,选中,未选中,获得焦点,失去焦点,锁定和待机等。
选择器 | 例子 | 例子描述 | 版本 |
---|---|---|---|
:checked | input:checked | 选择每个被选中的 input 元素 | CSS3 |
:enabled | input:enabled | 选择每个启用的 input 元素 | CSS3 |
:disabled | input:disabled | 选择每个禁用的 input 元素 | CSS3 |
:out-of-range | :out-of-range | 匹配值在指定区间之外的input元素 | CSS3 |
:in-range | :in-range | 匹配值在指定区间之内的input元素 | CSS3 |
:read-write | :read-write | 选择可读及可写的元素 | CSS3 |
:read-only | :read-only | 选择设置 "readonly"只读属性的元素 | CSS3 |
:optional | :optional | 选择可选的输入元素 | CSS3 |
:required | :required | 选择设置了 “required” 属性的元素 | CSS3 |
:valid | :valid | 选择输入值为合法的元素 | CSS3 |
:invalid | :invalid | 选择输入值为非法的元素 | CSS3 |
例1::checked
匹配设置了 “checked” 或 “selected” 属性的元素。
<style>
:checked{
width: 40px;
height: 40px;
background: red;
}
</style>
<input type="radio" checked>
<input type="checkbox" checked>
<select>
<option>a</option>
<option selected>b</option>
</select>
显示结果:
例2::enabled
与 :disabled
针对于是否设置 “disabled” 属性。
<style>
:enabled{ color: green; }
:disabled{ color: red; }
</style>
<input type="text" value="绿色">
<input type="text" value="红色" disabled>
例3::out-of-range
与 :in-range
针对于 “min” 和 “max” 属性值范围检测。
<style>
:in-range{ color: green; }
:out-of-range{ color: red; }
</style>
<!-- 绿色字体 -->
<input type="number" max="10" min="5" value="8">
<!-- 红色字体 -->
<input type="number" max="10" min="5" value="20">
例4::read-write
与 :read-only
针对于是否设置 “readonly” 属性。
<style>
:read-write{ color: green; }
:read-only{ color: red; }
</style>
<input type="text" value="绿色">
<input type="textr" value="红色" readonly>
例5::optional
与 :required
针对于是否设置 “required” 属性。
<style>
input:optional{ background: yellow; }
input::required{ background: red; }
</style>
<!-- 背景色黄色 -->
<input type="text" >
<input type="text" readonly>
<input type="text" disabled>
<!-- 背景色红色 -->
<input type="text" required>
例6::valid
与 :invalid
表单验证是否通过检测。
<style>
input:valid{ background: green; }
input:invalid{ background: red; }
</style>
<!--邮箱输入框:
valid: 当输入空值或是正确的邮箱地址时背景色时绿色
invalid: 当输入非空结果不是邮箱格式时背景变红色
-->
<input type="email">
<!--必填输入框:
valid: 当值不为空值时背景色时绿色
invalid: 当值为空值时背景变红色
-->
<input type="text" required>
结构伪类选择器
根据元素在文档树中的某些特性(如相对位置)定位到它们。
选择器 | 例子 | 例子描述 | 版本 |
---|---|---|---|
:first-child | p:first-child | 同级别中第一个p | CSS2 |
:first-of-type | p:first-of-type | 同级别中同类型中第一个p | CSS3 |
:last-child | p:last-child | 同级别中最后一个p | CSS3 |
:last-of-type | p:last-of-tpye | 同级别中同类型中最后一个p | CSS3 |
:nth-child(x) | p:nth-child(3) | 同级别中第3个p | CSS3 |
:nth-of-type(x) | p:nth-of-type(3) | 同级别中同类型中第3个p | CSS3 |
:nth-last-child(x) | p:nth-last-child(3) | 同级别中倒数第3个p | CSS3 |
:nth-last-of-type(x) | p:nth-last-of-type(3) | 同级别中同类型中倒数第3个p | CSS3 |
:only-child | p:only-child | 同级中只有唯一元素且该元素是p | CSS3 |
:only-of-type | p:only-of-type | 同级中只有一个p元素 | CSS3 |
:nth-child(even) | p:nth-child(even) | 同级中偶数项中的p | CSS3 |
:nth-of-type(odd) | p:nth-of-type(odd) | 同级所有p中的奇数项中的p | CSS3 |
:nth-child(xn+y) | p:nth-child(2n+1) | 等同p:nth-child(odd) | CSS3 |
:root | :root | 选择文档的根元素 | CSS3 |
:empty | p:empty | 选择没有子元素的p(包括文本节点) | CSS3 |
结构伪类选择器中的参数 x, y
可以是整数,关键词或公式。
- 整数:nth-child(3),选择第3个子元素。
- 关键词:odd代表奇数子元素,even代表偶数子元素。
例1:不区别类型
<style>
.box :first-child{ color: red; }
.box :nth-child(2){ color: green; }
.box :nth-child(odd){ background: pink; }
.box :nth-child(even){ background: blue; }
</style>
<div class="box">
<div>字体red,背景pink </div> <!-- 1 -->
<p>字体green,背景blue </p> <!-- 2 -->
<div>背景pink </div> <!-- 3 -->
<div>背景blue </div> <!-- 4 -->
</div>
例2:区别类型
<style>
.box :first-of-type{ color: red; }
.box :nth-of-type(2){ color: green; }
.box :nth-of-type(odd){ background: pink; }
.box :nth-of-type(even){ background: blue; }
</style>
<div class="box">
<div>字体red,背景pink </div> <!-- div(1) -->
<p>字体red,背景pink </p> <!-- p(1) -->
<div>字体green, 背景blue</div> <!-- div(2) -->
<div>背景pink </div> <!-- div(3) -->
</div>
例3:表达公式,n 的值默值为0,然后自增。
p:nth-child(2n+0){...}
选中偶数项p
p:nth-child(2n+1){...}
选中奇数项p
p:nth-child(2n+2){...}
选中偶数项p
p:nth-child(2n+3){...}
选中从第三项开始的奇数项
p:nth-child(2n+4){...}
选择从第四项开始的偶数项
p:nth-child(3n+0){...}
选择3的倍数项(3,6,9…)
p:nth-child(3n+1){...}
选中3的倍数+1项(4,7,10…)
......
例4:包含关系
<style>
div:empty{ background: pink; }
span:only-child{ color: red; }
p:only-of-type{ color: green; }
</style>
<!-- 下面 div 中的 p 元素满足 p:only-of-type -->
<div>
<p>11</p>
<span>22</span>
</div>
<!-- 下面 div 中的 span 元素满足 span:only-child -->
<div>
<span>33</span>
</div>
<!-- 下面 div 元素不含任何节点,满足 div:empty -->
<div></div>
<!-- 下面 div 元素含有文本节点: 空格 -->
<div> </div>
例5:根元素 :root
,在网页中就是 <html>
元素。
:root{ background: pink; }
/*等同*/
html{ background: pink; }
否定伪类选择器
选择器 | 例子 | 例子描述 | 版本 |
---|---|---|---|
:not(selector) | :not(div) | 选择非 div 元素 | CSS3 |
例:设置 div 后代元素中非 p 的元素字体为红色。
<style>
div :not(p){ color: red; }
</style>
<div>
<p>no</p>
<span>yes红色</span>
<div>yes红色</div>
</div>
伪元素选择器
伪元素可用于定位文档中包含的文本,但无法在文档树中定位。伪元素早在css中就存在了,
:first-letter,:first-line,:before,:after
。在css3中对伪元素进行了一定的调整,在以前的基础上增加了一个冒号,相应的变成了::first-letter,::first-line,::before,::after
,还增加了一个::selection
。
选择器 | 例子 | 例子描述 | 版本 |
---|---|---|---|
::first-letter | p::first-letter | 选择每个 p 元素的首字母 | CSS1 |
::first-line | p::first-line | 选择每个 p 元素的首行内容 | CSS1 |
::before | p::before | 在每个 p 元素的内容之前插入内容 | CSS2 |
::after | p::after | 在每个 p 元素的内容之后插入内容 | CSS2 |
::selection | ::selection | 选择被用户选取的元素部分 | CSS3 |
示例1:
<style>
.box::first-letter{
color: red;
background: pink;
}
.box::first-line{
background: #ccc;
}
</style>
<div class="box">
<span>Abcd</span>
仍是第一行内容
<span>仍是第一行内容</span>
<p>第二行内容</p>
</div>
显示结果:
示例2:
<style>
.box::before{
content: "LEE";
display: inline-block;
border:1px solid red;
background: green;
}
.box::after{
content: 'class="'attr(class)'"';
color: red;
}
::selection{
color: blue;
background: red;
}
</style>
<div class="box">好好学习, 天天向上, 奋发图强.</div>
显示结果(选中"天天向上"):