CSS 选择器
CSS选择器是CSS规则的第一部分,它能帮助我们精确地选择要样式化的HTML元素。掌握选择器的使用对于编写高效的CSS代码至关重要。
基础选择器
1. 通用选择器 (*)
选择页面上的所有元素。
css
* {
margin: 0;
padding: 0;
}
2. 元素选择器
直接使用HTML标签名称作为选择器。
css
p {
color: blue;
}
h1 {
font-size: 24px;
}
3. 类选择器 (.)
使用点号(.)选择特定class的元素。
css
.highlight {
background-color: yellow;
}
.text-center {
text-align: center;
}
4. ID选择器 (#)
使用井号(#)选择特定id的元素。
css
#header {
background-color: black;
color: white;
}
5. 属性选择器
选择具有特定属性或属性值的元素。
css
/* 选择所有具有title属性的元素 */
[title] {
cursor: help;
}
/* 选择所有href属性值以https开头的链接 */
[href^="https"] {
color: green;
}
/* 选择所有href属性值以.pdf结尾的链接 */
[href$=".pdf"] {
background: url('pdf-icon.png') no-repeat;
padding-left: 20px;
}
组合选择器
1. 后代选择器(空格)
选择某个元素的所有后代元素。
css
div p {
margin-bottom: 10px;
}
2. 子元素选择器(>)
只选择直接子元素。
css
ul > li {
list-style: square;
}
3. 相邻兄弟选择器(+)
选择紧接在某个元素后的元素。
css
h2 + p {
font-size: 1.2em;
}
4. 通用兄弟选择器(~)
选择某个元素后的所有兄弟元素。
css
h2 ~ p {
color: gray;
}
伪类选择器
伪类用于定义元素的特殊状态。
1. 链接伪类
css
/* 未访问的链接 */
a:link {
color: blue;
}
/* 已访问的链接 */
a:visited {
color: purple;
}
/* 鼠标悬停状态 */
a:hover {
text-decoration: underline;
}
/* 激活状态(鼠标点击时) */
a:active {
color: red;
}
2. 结构性伪类
css
/* 第一个子元素 */
li:first-child {
font-weight: bold;
}
/* 最后一个子元素 */
li:last-child {
border-bottom: none;
}
/* 奇数项 */
tr:nth-child(odd) {
background-color: #f2f2f2;
}
/* 偶数项 */
tr:nth-child(even) {
background-color: #ffffff;
}
3. 状态伪类
css
/* 禁用的输入框 */
input:disabled {
background-color: #eee;
}
/* 选中的复选框 */
input:checked {
border-color: blue;
}
/* 获得焦点的输入框 */
input:focus {
outline: 2px solid blue;
}
伪元素选择器
伪元素用于创建一些不在DOM树中的元素。
css
/* 第一行 */
p::first-line {
font-size: 1.2em;
}
/* 第一个字母 */
p::first-letter {
font-size: 2em;
float: left;
}
/* 在元素之前插入内容 */
.quote::before {
content: "「";
color: #666;
}
/* 在元素之后插入内容 */
.quote::after {
content: "」";
color: #666;
}
选择器优先级
CSS选择器的优先级(从上到下优先级逐级降低):
- 内联样式
- ID选择器
- 类选择器、属性选择器
- 素选择器、伪元素
- 通用选择器(*)
例如:(1最大)
css
/* 优先级:4 */
p { color: red; }
/* 优先级:3 */
.text { color: blue; }
/* 优先级:1 */
#unique { color: green; }
/* 优先级:2 */
p.text { color: yellow; }
最佳实践
- 避免过度使用ID选择器
- 优先使用类选择器
- 避免选择器嵌套过深
- 使用有意义的类名
- 保持选择器的可维护性和重用性
示例
下面是一个综合运用各种选择器的实例:
css
/* 基础样式 */
.container > * {
margin-bottom: 1em;
}
/* 文章标题 */
article h1:first-child {
font-size: 2em;
color: #333;
}
/* 列表样式 */
.content-list > li:nth-child(odd) {
background-color: #f5f5f5;
}
/* 表单元素 */
input[type="text"]:focus {
border-color: #007bff;
box-shadow: 0 0 5px rgba(0,123,255,0.5);
}
/* 链接样式 */
.nav-links a:not(:last-child)::after {
content: " |";
color: #ccc;
}
参考
MDN CSS 十分详细