CSS选择器
基本规则
CSS的一个核心特性是能向文档中的一组元素类型应用某些规则
规则结构
每个规则分为两部分:选择器(selector)和声明块(declaration block)
选择器定义了将影响文档中的哪些部分。
元素选择器
文档的元素就是最基本的选择器
1 | <h1>大学</h1> |
1 | html { |
声明和关键字
声明格式:
属性 + ':' + 值 + ';'
值可以是一个关键字,也可以是该属性可取关键字的一个列表,关键字之间用空格分开;唯一的例外是font
属性,可以使用/
分隔字体大小和行高
1 | p { |
分组
选择器分组
若想同时改变不同选择器的属性,可以将不同的选择器放在一起,以,
分隔
1 | h1, h2 { |
通配选择器(*)
这个选择器可以与任意元素匹配
1 | * { |
声明分组
对同一选择器设置多个样式
1 | h1 { |
类选择器和ID选择器
类选择器(class selector)
1 | <h1>大学</h1> |
对于HTML文档,可以使用点号.
加类名的方式表示类选择器,并且可以结合简单选择器
1 | h3.warning, span.warning { |
如果想选择所有类名相同的元素,可以在类选择器中忽略通配选择器
1 | .warning { |
多类选择器
在HTML中,一个class值可能包含一个词列表,各词之间用空格分隔,没有顺序
1 | <h3 class="warning urgent">软件学院</h3> |
通过把两个类选择器链接在一起,仅可以选择同时包含这些类名的元素
1 | .warning.urgent { |
ID选择器(ID selector)
ID选择器类似于类选择器,用#
标记,同样可以忽略通配选择器
比较
可以为任意多个元素设定相同的
class
,但是一个id
只能对应一个元素ID选择器不能结合使用,因为ID属性不允许有以空格分隔的词列表
如果想确定应向一个给定元素应用哪些样式,ID能包含更多含义
属性选择器
根据元素的属性来选择元素
1 | <h1>大学</h1> |
简单属性选择
如果希望选择有某个属性的元素,而不论该属性的值是什么,则可以用方括号
1
2
3*[class] {
color: red;
}可以根据多个属性进行选择,只需将属性选择器链接在一起
1
2
3*[class][id] {
color: red;
}
根据具体属性值选择
只选择有特定属性值的元素,必须与属性值完全匹配,如果属性值是列表,必须一一匹配
1 | *[class="warning urgent"] { |
根据部分属性值选择
如果属性能接受词列表,使用~=
可以根据其中的任意一个词进行选择
1 | span[class~="urgent"] { |
子串匹配属性选择器
类型 | 描述 |
---|---|
[att^="value"] |
选择att属性以"value" 开头的所有元素 |
[att$="value"] |
选择att属性以"value" 结尾的所有元素 |
[att*="value"] |
选择att属性包含子串"value" 的所有元素 |
1 | span[class^="war"] { |
特定属性选择器
[att|="val"]
可以匹配属性值等于val
或以val-
开头的所有元素
使用文档结构
后代选择器(descendant selector)
1 | <h1>数学</h1> |
在一个后代选择器中,规则左边的选择器一端包括两个或多个用空格分隔的选择器
1 | #numbers ul li ul li { |
选择子元素
1 | <p>There is an <strong>apple</strong> on the table.</p> |
如果只想选择一个元素的子元素(不包含后代元素),可以使用子结合符>
,子结合符两边可以有空白符,可以结合后代选择器
1 | p>strong { |
选择相邻兄弟元素
1 | <div> |
要选择紧接在一个元素后的元素,而且二者有相同的父元素,可以使用相邻兄弟结合符+
,邻兄弟结合符两边可以有空白符
1 | ol+ul { |
伪类和伪元素
伪类选择器和伪元素选择器可以:
为文档中不一定具体存在的结构指定样式
为某些元素(甚至是文档本身)的状态所指示的幻想类指定样式
会根据另外某种条件而非文档结构向文档中的某些部分应用样式
无法通过研究文档的标记确切地推断出采用何种方式应用样式
伪类选择器
链接伪类
伪类名 | 描述 |
---|---|
:link | 指示作为超链接并指向一个未访问地址的所有锚 |
:visited | 指示作为已访问地址超链接的所有锚 |
动态伪类
伪类名 | 描述 |
---|---|
:focus | 指示当前拥有输入焦点的元素,也即是可以接受键盘输入或者能以某种方式激活的元素 |
:hover | 指示鼠标指针停留在哪个元素上 |
:active | 指示被用户输入激活的元素 |
1 | <a href="http://www.xjtu.edu.cn">西安交通大学</a> |
1 | a:link { |
1 | <h1>Input your infomation</h1> |
1 | input:focus { |
选择第一个子元素
element:first-child
选择可以作为首个子元素的element
元素
1 | <p>Universities:</p> |
1 | p:first-child { |
结合伪类
可以在同一个选择器中结合使用伪类,顺序不影响,不能把互斥的伪类放在一起
伪元素选择器
伪元素能在文档中插入假想的元素,所有伪元素必须放在出现该伪元素的选择器的最后面
设置首字母样式
:first-letter
用于设置一个块级元素首字母的样式,而且仅对该首字母设置样式
1 | <h1>You are my sunshine!</h1> |
1 | h1:first-letter { |
设置第一行样式
:first-line
可以用来设置元素中的第一个文本行
1 | <p>HTML (HyperText Markup Language) is the most basic building block of the Web....</p> |
1 | p:first-line { |
:first-letter
和:first-line
的CSS属性有一些限制
设置之前和之后样式
允许插入生成的内容,然后使用伪元素:before
和:after
设置样式
1 | <p>You are my sunshine</p> |
1 | p:before { |