几个易混的选择器
div,p
: 所有div和p的元素
div p
:所有div内部的p元素
div>p
: 所有父元素为div的p元素
div+p
: 所有紧邻div的同级p元素
div~p
: 所有前面有div的同级p元素
属性选择器和对比
[target]
: 所有有target属性的元素
[name='huang']
: 所有name属性为huang的元素
属性正则匹配模式
[name~='huang']
: 所有name属性包含huang的元素
[name^='huang']
: 所有name属性以huang开头的元素
[name$='huang']
: 所有name属性以huang结尾的元素
2组易混正则匹配对比
对比 |
[name~='huang'] |
[name*='huang'] |
分别可以匹配 |
huang bin |
huangbin |
name~='huang bin'
: 匹配的是独立的单词,huangbin不能被匹配
*=
: 匹配的是子串
对比 |
[name^='huang'] |
[name|='huang'] |
匹配 |
huang bin |
huang-bin |
name|=huang-bin
: 匹配开头是huang
或huang-单词
name^=huang bin
: 匹配开头包含h
子串的元素
内容选择器
:nth-child(n)
和:nth-of-type(n)
比较
div:nth-child(3)
:父元素的第3个div元素
div:nth-of-type(2)
: 所有type为div的同级的第二个div
- 最大的区别:
nth-of-type
是所有层级的范围,div:nth-child(2)
不仅限制了是父元素的第二个子元素,且类型为div
nth-of-type
: 按照元素的类型来选择,.item:nth-of-type{}
,如果item对应不同的元素类型,则会分别计算个数,详见末尾例子
几个易忘记的
p:first-line
: p元素的首行
p:first-letter
: p元素的首字母
p:first-child
: p元素的首个子元素
p:last-of-type
: 所有层级最后一个p元素
p:first-of-type
: 所有层级第一个p元素
p:only-of-type
: 所有层级中唯一为p的元素
p:only-child
: 父元素只有一个子元素的p元素
p:nth-last-child(2)
: 父元素倒数第二个p元素
p:nth-last-of-type(2)
: 父元素倒数第二个类型为p的元素
:root
: 文档的根元素
p:empty
: 选择没有子元素的每个p元素
input:enable
: 选择每个启用的input元素
input:disabled
: 选择每个禁用的input元素
input:checked
: 选择每个选中的input元素
:not(p)
: 选择非p的每个元素
::selection
: 选择被用户选择元素部分
状态选择器
a:link
: 所有未被访问的链接
- 注意:浏览器默认的给的是hover的样式,因此只有去改变他的href才能显示对应的样式
a:visited
: 选择访问过的链接
a:hover
: 选择悬浮的链接
a:active
: 选择活动的链接
注意事项
- 鼠标经过的“未访问链接”同时拥有a:link、a:hover两种属性,后面的属性会覆盖前面的属性定义
- 鼠标经过的“已访问链接”同时拥有a:visited、a:hover两种属性,后面的属性会覆盖前面的属性定义
- 正确顺序a:link、a:visited、a:hover、a:active
关于nth-of-type(n)比较好的例子
<style>
.item:nth-of-type(3){
color:red;
}
.item:nth-child(2) {
color: yellow
}
</style>
<h1>标题</h1>
<p class="item">第一个.item p</p>
<p>这是锻若</p>
<span>第一个span</span>
<span class="item">第一个.item span</span>
<span class="item">第二个.item span</span> //我是红色
<p class="item">第二个.item p</p> //我是红色
<p class="item">第三个.item p</p>
<p class="item">第四个.item p</p>