一句话说清外部 CSS
外部 CSS 是一个单独的 .css 文件。在每个需要它的页面的 <head> 中引入它:
<head>
<link rel="stylesheet" href="styles.css">
</head>
文件本身只包含纯 CSS 规则,外面没有任何 HTML 标签:
/* styles.css */
body {
font-family: system-ui, sans-serif;
color: #111827;
}
.card {
border: 2px solid #2563eb;
border-radius: 8px;
padding: 12px 16px;
}
下面的预览没有第二个文件可以加载,所以把同样的 CSS 放进了 <style> 元素。这就是内部 CSS,它的渲染效果和引入外部文件完全一样:
内部 CSS:style 元素
内部 CSS(也叫内嵌 CSS)是页面中的一个 <style> 元素。把它放在 <head> 中,这样在渲染 body 之前样式就已经确定了。它作用于整个页面,而且它的规则可以使用选择器,这是行内 style 属性做不到的。
把鼠标悬停在一个标签上::hover 在这里能生效,因为它是一条真正的规则。第三种写法,也就是 style 属性,见行内 CSS 页面。
内部 CSS 与外部 CSS 的区别
外部(<link>) | 内部(<style>) | |
|---|---|---|
| 位置 | 一个 .css 文件 | HTML 页面内部 |
| 作用范围 | 每个引入它的页面 | 一个页面 |
| 缓存 | 下载一次,在各页面间复用 | 每个页面都重新发送一次 |
| 修改网站外观 | 改一个文件 | 改每一个页面 |
| 额外的请求 | 有,每个文件一个 | 没有 |
| 适合 | 正式网站 | 演示、单个页面、HTML 邮件、关键 CSS |
两者的优先级计算方式相同:<style> 元素里的一条规则和外部文件里同样的规则权重完全一样。权重相同时,在文档中靠后的那一条生效。
顺序:靠后的样式表胜出
样式表按文档顺序读取,<link> 和 <style> 都一样。对于优先级相同的两条规则,靠后的那条胜出。下面两个 <style> 块分别模拟一个外部文件和其后页面级别的覆盖:
按钮保留了第一条规则中的内边距和白色文字,只从第二条规则中取了背景色。这就是为什么网站自己的样式表要放在框架的样式表之后:先用 <link> 引入库,再引入你自己的。
href 中的文件路径
<link> 的 href 是一个 URL,相对于 HTML 文件所在的位置解析。
| href | 加载 |
|---|---|
styles.css | 与页面在同一文件夹中的文件 |
css/styles.css | 页面旁边的 css 文件夹 |
../styles.css | 上一级文件夹 |
/styles.css | 从网站根目录开始 |
https://example.com/a.css | 另一台服务器上的完整 URL |
如果网站的页面位于不同层级的目录中,使用相对根目录的写法(/css/styles.css),同一个路径在每个页面上都能用。
用于打印和其他媒体的样式表
media 属性把样式表限制在满足条件时才生效。<link> 和 <style> 都接受它:
<link rel="stylesheet" href="print.css" media="print">
<link rel="stylesheet" href="wide.css" media="(min-width: 900px)">
预览是屏幕,所以横幅会显示出来。在真实页面中,打印出来时横幅会消失;在开发者工具中模拟 print 媒体类型(Rendering 面板),也能看到同样的效果。
常见错误
- 路径写错。
href中的一个拼写错误就会导致什么都加载不了,页面会以无样式的状态显示。打开开发者工具的 Network 面板,查看.css文件是否返回 404。 - 忘记写
rel="stylesheet"。 没有它,<link href="styles.css">不会加载样式表。 - 在
.css文件里写 HTML。.css文件里只能有规则。里面的<style>标签不是有效的 CSS,会破坏紧挨着它的规则。 - 把你的样式表放在框架的样式表之前。 优先级相同时,靠后的文件胜出,所以要最后引入你自己的 CSS。
- 看到的是旧版本。 浏览器会缓存样式表。部署修改后,强制刷新,或者在 URL 中加上版本号(
styles.css?v=2)。
常见问题
外部 CSS 是什么?
外部 CSS 是保存在独立 .css 文件中的样式表,通过页面 <head> 里的 <link rel="stylesheet" href="styles.css"> 加载。每个引入这个文件的页面都会得到相同的样式,而且浏览器会在页面之间缓存这个文件。
内部 CSS 是什么?
内部 CSS 也叫内嵌 CSS,是写在 HTML 文档自身的 <style> 元素里的 CSS,通常放在 <head> 中。它只作用于这一个页面。
如何把 CSS 文件引入 HTML?
在 <head> 中加上 <link rel="stylesheet" href="styles.css">。href 是相对于 HTML 文件的路径,所以 css/styles.css 指向旁边的 css 文件夹,而 /styles.css 从网站根目录开始。
内部 CSS 和外部 CSS 哪个更好?
只要网站不止一个页面,就用外部 CSS:只需编辑一个文件,浏览器下载一次就能重复使用。内部 CSS 适合单个页面、演示,或者希望随首次响应一起发送的一小段关键样式。
为什么我的外部 CSS 不起作用?
常见原因有:href 路径写错(在 Network 面板里查看是否有 404)、漏了 rel="stylesheet"、在 .css 文件里写了 <style> 标签,或者后面的规则覆盖了你的规则。强制刷新可以排除缓存了旧文件的可能。