CSS选择器是我们操作CSS元素的重要方式,它帮我们快速定位到我们想要修改样式的内容上。
选择器类型
通配选择器 Universal selector:*
通配选择器匹配所有的元素。它通常被用来重置浏览器的默认样式。
1 | * { |
通配选择器可以单独使用,也可以用来匹配某一个元素下的所有子元素:
1 | #container # { |
标签/元素选择器 Type selector
通过node节点名称匹配元素。
1 | a { |
类选择器 Class selector
选择class
属性为给定值的元素
1 | .div { |
可以结合元素选择器一起使用:
1 | div.left { |
ID选择器
选择id
属性为特定值的元素。通常文档中的ID是独一无二的,因此ID选择器应该只能选择到一个元素。
1 | #test { |
ID选择器同样可以结合元素选择器一起使用:
1 | div#test { |
属性选择器
1. 简单属性选择器
包含有某个属性的元素,不限定属性的值
1 | a[title] { |
2. 具体属性选择器
包含某个属性,且属性值与指定值一致的元素。
1 | a[href="https://www.google.com"] { |
3. 部分属性选择器
[attr~=value]
包含属性attr
,且属性值包含数个用空格隔开的值,value
是其中一个值的元素
1 | /* lang属性包含en-us的div元素 */ |
[attr|=value]
包含属性attr
,且属性值是value
或以value
开头,紧接-
的元素
1 | /* 匹配中文语音,无论是简体中文zh-CN还是繁体中文zh-TW */ |
[attr^=value]
包含属性attr
,且属性值以value
为前缀的元素
1 | /* 匹配内链元素 */ |
[attr$=value]
包含属性attr
,且属性值以value
为后缀的元素
1 | /* 匹配以'.org'结尾的链接 */ |
[attr*=value]
包含属性attr
,且属性值包含value
的元素
1 | /* 链接中有"insensitive",且不论大小写 */ |
组合选择器
群组选择器 A, B
用逗号隔开,同时选中A
和B
两个元素
1 | .div1, .div2 { |
后代选择器
A B
用空格隔开,B
是A
的后代元素
1 | div p { |
A>B
B
是A
的子元素
1 | ul>li { |
A || B
B
元素是A
的子元素,且A
元素是表格中的列。
1 | col.selected || td { |
兄弟选择器
A + B
相邻兄弟选择器
1 | h2 + p { |
A ~ B
通用兄弟选择器
1 | p ~ span { |
伪类选择器
静态伪类(只用于超链接)
:link
没有被访问的包含href
属性的元素,如<a>
,<area>
,<link>
.
1 | a:link { |
:visited
访问过的链接
1 | a:visited { |
动态伪类(可用于任何元素)
:focus
获得焦点的元素,通常由用户点击或”tab”跳转到该元素触发。
1 | input:focus { |
:hover
鼠标悬停的元素
1 | a:hover { |
:active
被激活的元素,当鼠标正在点击
1 | a:active { |
UI元素伪类
:enabled
状态为可用的元素
1 | input:enabled { |
:disabled
状态为不可用的元素
1 | input:disabled { |
:checked
radio
,checkbox
,option
被选中的元素
1 | :checked { |
结构伪类
first-child
/ last-child
一组兄弟元素中的第一个或最后一个元素
1 | p:first-child { |
最初定义时,所选元素必须有一个父元素,从选择器Level 4开始,父元素不是必须了。
:root
根元素,即<html>
元素
1 | :root { |
nth-child(n)
/ nth-last-child(n)
一组兄弟元素中的第n个或倒数第n个元素
1 | /* 每组兄弟元素中每隔4个元素 */ |
nth-of-type(n)
/ nth-last-of-type(n)
一组兄弟元素中的第n个或倒数第n个符合特定类型的元素
1 | p:nth-of-type(4n) { |
first-of-type
/ last-of-type
符合类型的第一个或最后一个兄弟元素
1 | /* 所有兄弟节点中排列第一个的p元素 */ |
only-child
父元素只包含一个同类型的元素
1 | /* 父元素只要一个子元素p的p元素 */ |
:empty
没有子元素的元素
1 | div:empty { |
伪元素选择器
::first-letter
第一个字母
1 | p::first-letter { |
#####::first-line
元素的第一行
1 | p::first-line { |
:before
/ :after
在元素的开始/末尾插入内容(默认这个伪元素是行内元素,继承元素可继承的属性)
1 | a::before { |
::selection
被用户鼠标选中部分
1 | ::selection { |