CSS选择器类型
CSS选择器用于选择要应用样式的HTML元素。以下是常用的选择器类型:
1. 元素选择器
根据元素名称选择元素:
CSS
p {
color: blue;
}
2. 类选择器
根据class属性选择元素:
CSS
.highlight {
background-color: yellow;
}
HTML
<p class="highlight">这个段落有黄色背景</p>
3. ID选择器
根据id属性选择元素:
CSS
#header {
font-size: 24px;
}
HTML
<h1 id="header">网站标题</h1>
注意: ID选择器具有较高的特异性,且一个ID在文档中应该是唯一的。
4. 通用选择器
选择所有元素:
CSS
* {
margin: 0;
padding: 0;
}
5. 属性选择器
根据属性或属性值选择元素:
CSS
/* 选择所有带有title属性的元素 */
[title] {
border: 1px solid gray;
}
/* 选择type属性值为"text"的input元素 */
input[type="text"] {
background-color: #f0f0f0;
}
组合选择器
可以组合多个选择器来选择更具体的元素:
1. 后代选择器
选择指定元素内的所有后代元素:
CSS
div p {
color: red;
}
2. 子元素选择器
选择指定元素的直接子元素:
CSS
div > p {
color: blue;
}
3. 相邻兄弟选择器
选择紧接在另一元素后的元素:
CSS
h1 + p {
font-weight: bold;
}
4. 通用兄弟选择器
选择所有在指定元素之后的同级元素:
CSS
h1 ~ p {
color: green;
}
属性选择器详解
根据属性或属性值选择元素:
| 选择器 | 示例 | 描述 |
|---|---|---|
| [attribute] | [target] | 选择带有target属性的所有元素 |
| [attribute=value] | [target=_blank] | 选择target="_blank"的所有元素 |
| [attribute~=value] | [title~=flower] | 选择title属性包含单词"flower"的所有元素 |
| [attribute|=value] | [lang|=en] | 选择lang属性值以"en"开头的所有元素 |
| [attribute^=value] | a[href^="https"] | 选择其href属性值以"https"开头的每个<a>元素 |
| [attribute$=value] | a[href$=".pdf"] | 选择其href属性值以".pdf"结尾的每个<a>元素 |
| [attribute*=value] | a[href*="dangfa"] | 选择其href属性值中包含"dangfa"的每个<a>元素 |
属性选择器示例
CSS
/* 选择所有外部链接 */
a[href^="http"] {
color: blue;
}
/* 选择所有PDF链接 */
a[href$=".pdf"] {
background-color: yellow;
}
/* 选择包含"dangfa"的链接 */
a[href*="dangfa"] {
font-weight: bold;
}
选择器分组
可以对多个选择器应用相同的样式:
CSS
h1, h2, h3 {
font-family: Arial, sans-serif;
color: #333;
}
选择器分组的最佳实践
- 将具有相同样式的选择器分组,减少代码重复
- 保持选择器分组逻辑清晰,便于维护
- 避免将不相关的选择器分组在一起
伪类选择器
伪类选择器用于选择元素的特定状态:
| 伪类 | 描述 | 示例 |
|---|---|---|
| :hover | 鼠标悬停时的状态 | a:hover { color: red; } |
| :active | 元素被激活时的状态 | button:active { background: blue; } |
| :focus | 元素获得焦点时的状态 | input:focus { border-color: green; } |
| :visited | 已访问的链接 | a:visited { color: purple; } |
| :first-child | 父元素的第一个子元素 | li:first-child { font-weight: bold; } |
| :last-child | 父元素的最后一个子元素 | li:last-child { border-bottom: none; } |
| :nth-child(n) | 父元素的第n个子元素 | tr:nth-child(even) { background: #f2f2f2; } |
伪元素选择器
伪元素选择器用于选择元素的特定部分:
| 伪元素 | 描述 | 示例 |
|---|---|---|
| ::before | 在元素内容前插入内容 | p::before { content: ">> "; } |
| ::after | 在元素内容后插入内容 | p::after { content: " <<"; } |
| ::first-letter | 选择元素的第一个字母 | p::first-letter { font-size: 2em; } |
| ::first-line | 选择元素的第一行 | p::first-line { font-weight: bold; } |
| ::selection | 选择用户选中的文本 | ::selection { background: yellow; } |
伪元素示例
CSS
/* 在链接前添加图标 */
a.external::before {
content: url(external.png);
margin-right: 5px;
}
/* 设置段落首字母样式 */
p::first-letter {
font-size: 2em;
font-weight: bold;
color: #82255E;
}
选择器特异性
当多个选择器应用于同一元素时,CSS使用特异性(specificity)来决定哪个规则优先:
特异性计算规则
特异性由四个值组成,从左到右重要性递减:
- 内联样式:特异性值为 1,0,0,0
- ID选择器:每个ID选择器增加 0,1,0,0
- 类选择器、属性选择器、伪类:每个增加 0,0,1,0
- 元素选择器、伪元素:每个增加 0,0,0,1
特异性示例
特异性计算
/* 特异性: 0,0,0,1 */
p { color: black; }
/* 特异性: 0,0,1,0 */
.intro { color: blue; }
/* 特异性: 0,0,1,1 */
p.intro { color: green; }
/* 特异性: 0,1,0,0 */
#header { color: red; }
/* 特异性: 0,0,2,1 */
div.content p.highlight { color: purple; }
提示: 为了保持代码的可维护性,尽量使用较低特异性的选择器,避免过度使用ID选择器和!important声明。
选择器交互演示
点击下面的按钮来查看不同选择器如何匹配元素,体验CSS选择器的强大功能:
基础选择器
组合选择器
属性选择器
伪类选择器
当前选择器:
无
匹配元素:
0 个
主标题
这是一个普通段落,包含一个示例链接。
这是一个高亮段落,位于容器内。
这是容器内的第二个段落。
这是一个span元素嵌套div中的段落
副标题
另一个段落内容。
特殊高亮段落
- 列表项 1
- 高亮列表项
- 列表项 3
- 列表项 4
最后一个段落,包含高亮文本。
选择器说明
点击上方按钮查看不同选择器的效果。选择器用于精确选择HTML元素并应用样式。