CSS 教程 / 内联、内部与外部 CSS:应用方法和路径排错

您可以通过元素的 style 属性、HTML 文档中的 style 元素,或链接的外部样式表来应用 CSS。外部样式表通常更容易在多个页面之间维护,而其他方法适用于较小的特定用途。

比较三种应用 CSS 的方法

方法 书写在 适用情况 管理时需要注意的事项
内联 HTML 元素的 style 属性 临时检查单个元素的外观 在多个元素中重复相同的设计会使修改变得繁琐。
内部 HTML head 中的 style 元素 单页示例或特定页面的样式 如果复制到多个 HTML 文件,你将不得不编辑每个文件。
外部 单独的 .css 文件和 HTML 中的 link 元素 多页面的通用设计 您需要检查文件路径和连接状态。

三种方法都应用 CSS。普通的内部和外部规则根据层叠规则竞争,包括它们的选择器和来源顺序;外部文件本身并不天然较弱。内联声明通常优先于普通作者样式表声明,但像 !important 这样的条件会改变这种比较。有关更多详细信息,请参见 CSS 继承、选择器优先级与层叠。

编写内联和内部样式

在内联样式中,你将声明写在要装饰的元素的style属性中。不包括选择器或外部大括号。下面的代码只为一段提示文字指定了颜色和背景。

<p style="color: #087f5b; background-color: #e9f7ef;">
  We open at 9 a.m. every day.
</p>

在内部样式表中,包括选择器和大括号的规则写在head中的style元素中。具有相同类名的多个元素可以用一个规则进行装饰。在下面的示例中,HTML类值是notice,CSS选择器是.notice。

<head>
  <style>
    .notice {
      color: #087f5b;
      background-color: #e9f7ef;
    }
  </style>
</head>
<body>
  <p class="notice">We open at 9 a.m. every day.</p>
</body>

这两个示例都是 HTML 片段,用于比较它们的书写位置。在此练习中更改方法时,请移除之前方法中设置的相同属性声明。同时保留多种方法会使区分连接失败和规则冲突变得困难。

链接外部样式表

创建一个空的 garden 文件夹,并保存以下三个文件:CSS 文件只包含 CSS,不包括 <style> 标签。两个 HTML 文件都链接同一文件夹中的 style.css。

garden/
├─ index.html
├─ visit.html
└─ style.css

index.html

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Small Garden</title>
  <link rel="stylesheet" href="style.css">
</head>
<body>
  <h1>Small Garden</h1>
  <p class="notice">We open at 9 a.m. every day.</p>
  <a href="visit.html">View visitor information</a>
</body>
</html>

visit.html

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Visitor Information</title>
  <link rel="stylesheet" href="style.css">
</head>
<body>
  <h1>Visitor Information</h1>
  <p class="notice">Bring a water bottle and comfortable shoes.</p>
  <a href="index.html">Return to the garden introduction</a>
</body>
</html>

style.css

body {
  margin: 24px;
  font-family: sans-serif;
  line-height: 1.7;
}
h1 { color: #087f5b; }
.notice {
  padding: 16px;
  border: 1px solid #087f5b;
  background-color: #e9f7ef;
}

rel="stylesheet" 表示连接的文件是一个样式表,href="style.css" 是要读取的文件的位置。在 HTML5 文档中,在常规 CSS 连接中无需单独写 type="text/css"。这个直接打开本地文件的练习,不需要服务器或额外的库。

当你在浏览器中打开 index.html 时,你会看到一个绿色的标题和一个浅色的信息框。点击 View visitor information(查看访客信息)即可进入 visit.html,虽然内容不同,但标题颜色和信息框的样式相同。如果将 style.css 的标题颜色改为 #1d4ed8,然后重新加载两个页面,两个标题都会变为蓝色。这就是使用公共文件的优势。

为文件夹结构选择一个路径

下面的路径是根据 HTML 文档的位置来读取的。如示例所示,前提是一个普通文档,其基础 URL 尚未被 base 元素替换。如果你移动 CSS 文件,你必须不仅更改文件名,还要更改 href。

文件放置 index.html 中的链接代码 读取位置
index.html 和 style.css 在同一个文件夹中 href="style.css" style.css 在包含 HTML 文件的文件夹中
garden/index.html, garden/css/style.css href="css/style.css" HTML 文件夹下的 css 文件夹
garden/pages/index.html, garden/css/style.css href="../css/style.css" 先返回上一级 garden 文件夹,再进入 css 子文件夹。
garden/
├─ pages/
│  └─ index.html
└─ css/
   └─ style.css

对于最后一个文件夹的排列,在 pages/index.html 中编写 <link rel="stylesheet" href="../css/style.css">。../ 路径片段表示向上一级目录。网页路径使用正斜杠。像 /css/style.css 这样的前导斜杠从站点根目录解析,并且与此本地文件的相对路径含义不同。参见 MDN:开始使用 CSS。

诊断加载、匹配和级联问题

  1. 首先,检查文件连接。检查扩展名是否未保存为 .css.txt,并确保 href 与实际文件夹位置匹配。部署到服务器时,路径中的文件名还可能区分大小写,应与实际文件保持一致。如果页面在 Web 服务器上打开,可以在开发者工具的 Network(网络)面板中检查 CSS 请求和响应。本地文件可能不会显示相同的 HTTP 状态码。
  2. 验证目标元素是否正确。在 HTML 中是 class="notice",但如果在 CSS 中写为 .notcie,即使文件正常读取,提示文字的样式也不会改变。在开发者工具的 Elements(元素)面板中查看实际类名,再到 Styles(样式)面板确认匹配的规则。
  3. 检查规则是否被覆盖。如果之后另一个颜色声明生效,原始声明可能会在 Styles 中显示删除线。请单独检查最终应用的规则,而不要与缺失的 CSS 文件问题混淆。

要检查样式表是否加载,请暂时在其末尾添加 body { background-color: #fff4cc; } 并刷新页面。黄色页面表示文件已连接。然后检查提示文字的选择器是否匹配,以及是否有其他声明生效。之后请删除临时规则。!important 无法修复缺失的文件或拼写错误的选择器。更多详情,请参见 使用开发者工具检查 CSS:Styles 与 Computed。