CSS 教程 / CSS 语法:选择器、声明、注释与常见错误
CSS 规则将选择器与花括号内以属性: 值; 形式书写的声明结合在一起。正确的语法有助于浏览器应用预期的样式,但格式错误的声明可以被忽略,而其他有效声明仍能继续工作。
阅读 CSS 规则的各个部分
.notice {
color: #087f5b;
padding: 16px;
}
| 部分 | 示例 | 含义 |
|---|---|---|
| 选择器 | .notice |
选择具有 notice 类的元素。 |
| 声明块 | { ... } |
将声明组合以应用于此选择器。 |
| 属性 | color, padding |
这些是要更改的特性,例如文本颜色和内边距。 |
| 值 | #087f5b, 16px |
这是你想为该属性指定的内容。 |
| 声明 | padding: 16px; |
这是一个条目,其中属性名和值由冒号连接。 |
每个属性允许不同的值。在 color 中输入颜色值,在 padding 中输入长度值。即使单词拼写正确,也不能将 padding: blue; 用作内边距值。16px 由数字和单位组成。如果像 16 px 那样使用空格,它将无法被读取为单一的长度值。
使用大括号、冒号、分号和空格
换行和缩进有助于人类更容易阅读代码。以下两种写法的效果相同,因为它们具有相同的选择器和相同的声明。当你刚开始学习时,如果将声明逐行分开,会更容易发现缺失的符号。如何根据要装饰的对象选择选择器,在基本 CSS 选择器:类型、类、ID 与属性中进行了比较。
.notice { color: #087f5b; padding: 16px; }
.notice {
color: #087f5b;
padding: 16px;
}
虽然最终的声明可以省略分号,但始终写上分号可以使后续添加更安全。选择器的空格会改变含义:.notice.urgent匹配具有两个类的元素,而.notice .urgent匹配 notice 元素内部带有 urgent 类的后代元素,而不限于直接子元素。移除那个空格会改变选择器。参见MDN:CSS 语法入门。
将选择器分组并编写注释
h1, h2 {
color: #087f5b;
}
/* Apply the background and border only to the notice. */
.notice {
background-color: #e9f7ef;
border: 1px solid #087f5b;
}
用逗号将多个选择器链接到同一个声明块。h1, h2 分别选择 h1 和 h2,而 h1 h2 是另一个选择器,用于查找 h1 内的 h2。使用逗号适合于应用相同的颜色。
CSS 注释以 /* 开始,以 */ 结束。注释中的内容不会作为样式规则生效。它可以用来写解释或暂时排除一条规则,但如果漏掉了结束符号,后面的代码可能会被视作注释。在普通 CSS 中,不像 JavaScript 的 // 那样使用单行注释符号。
比较声明错误和选择器错误
当浏览器遇到 CSS 中的错误时,它会忽略无效的部分并继续处理可能的规则。这并不总是意味着“忽略一行错误”。缺失的分隔符或选择器错误可能会产生很大的影响。
.notice {
color: blue;
padding: blue;
background-color: #e9f7ef;
}
这里只有 padding: blue 是无效的。除非还有其他规则,否则文本颜色和背景颜色会被应用,而内边距不会受到此声明的影响。如果属性名称拼写错误,比如 colro,该声明也不会被识别。
.notice {
color: blue
background-color: #e9f7ef;
padding: 16px;
}
此代码块在第一个声明后缺少分号。浏览器将 blue background-color: #e9f7ef 当作 color 的值来读取,这是无效的。原本想设置的文字颜色和预期的背景声明都不会生效,但 padding: 16px; 仍然生效。在 blue 之后添加缺失的分号。
h1, .notice:made-up-state {
color: blue;
}
一个未知的伪类使这个普通的以逗号分隔的选择器列表无效,因此该规则也无法应用于 h1。某些特殊的选择器列表使用容错解析。因此,此示例并未描述每个选择器列表上下文的行为。请参见 MDN:CSS 错误处理。
运行完整示例
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Small Garden</title>
<style>
body { margin: 24px; font-family: sans-serif; line-height: 1.7; }
h1, h2 { color: #087f5b; }
.notice {
color: #087f5b;
background-color: #e9f7ef;
padding: 16px;
border: 1px solid #087f5b;
}
/* Sentence describing operating hours */
.description { font-size: 18px; }
</style>
</head>
<body>
<h1>Small Garden</h1>
<p class="notice">We open at 9 a.m. every day.</p>
<h2>Visitor Information</h2>
<p class="description">Bring a water bottle and comfortable shoes.</p>
</body>
</html>
如果你将整个代码保存为 index.html 并打开它,h1 和 h2 是相同的绿色,提示信息具有浅色背景、16px 内边距和 1px 边框。描述性句子显示为 18px。font-size 是设置字体大小的属性,line-height 是行高,border 是边框。这里先用这些属性帮助你把语法与显示结果联系起来。
查找并修复语法错误
用下面的代码替换整个示例中的 .notice 块。目标是修复两个语法错误,并使其“蓝色文本、浅绿色背景、16px 内边距”。在修改之前,可以通过将原始文件复制为另一个名字轻松恢复。
.notice {
colro: blue;
background-color #e9f7ef;
padding: 16px;
}
将 colro 改为 color,并在 background-color 之后添加冒号。保存并刷新:提示信息应该是蓝色文字、浅绿色背景,并有 16px 内边距。内边距已经有效,因此即使在语法错误修复之前,某些间距仍可保留。
.notice {
color: blue;
background-color: #e9f7ef;
padding: 16px;
}
如果你的编辑没有更改页面,首先检查是否打开了正确的文件。然后 使用开发者工具检查 CSS:Styles 与 Computed,以查看哪些值实际生效。在修改更多值之前,需要区分语法错误、匹配错误元素的选择器以及规则之间的冲突。




