跳转至

CSS 是什么、为什么重要 — 从骨架到衣服

这一章讲三件事: CSS 这个名字指什么、它和 HTML 是怎么分工的; 样式可以写在哪三个地方、为什么其中一个是正路; 「层叠」这两个字到底是什么意思。 读完你会跑通自己的第一个样式页面——这是后面六章一切内容的起点。 不需要任何基础,遇到的生词都在当场解释。

1. 这一章讲什么

一个网页没有样式时长什么样?为什么「外观」要从「内容」里拆出来单独写? 拆出来之后,样式又能写在几个地方?这一章回答这三个问题, 并顺手把「Cascading(层叠)」这个藏在 CSS 名字里的核心概念讲掉。

它在全书链条里的位置:这是第 ① 级台阶。 第 02 章开始教你怎么写规则, 但「为什么写规则」「写在哪里」这两个问题必须先在这一章落定。

2. 两个词,先说清

HTML 是描述网页内容的语言:标题、段落、图片、链接,全用它写。 它是你打开「查看源代码」时看到的那一层骨架。

CSS 是描述网页外观的语言,全名 Cascading Style Sheets,中文译作「层叠样式表」1。 同一个 HTML 骨架,配不同的 CSS,可以长得完全不一样—— 书里把它俩的关系比作骨架和衣服:HTML 提供结构,CSS 负责让它好看2。

有多重要?书里给了一个对照:没有 CSS,每个网页都会像一个纯文本文档—— 黑字、白底、链接没有样式、没有任何排版;颜色、字体、间距、对齐、布局、动画,全是 CSS 带来的3。 你可以现在就在浏览器里验证:随便打开一个新闻网站,按 F12 打开开发者工具, 把样式全关掉,就能看到那个「纯文本文档」的样子(验证方法不在书里,是我们给的)。

为什么要分成两层,而不是把「好看」直接写进内容里? 这是软件工程里一次影响深远的分层决策,值得在这里想透: 一个网站往往有几十上百个页面;如果外观混在内容里, 「把全站按钮从灰的改成蓝的」就要改几百处。 拆成两层后,外观集中写在一处,内容页面只管内容—— 改样式不动内容,换皮肤不动骨架。(这条理由书里是用「可复用」三个字点到的,见第 3 节;展开是我们补的。)

3. 顶层全景:样式可以写在三个地方

  一个 HTML 页面
      │
      ├─ ① 内联:样式直接贴在某个元素上        ← 快,但乱
      ├─ ② 内部:样式集中写在页面的 <head> 里   ← 适合单页,不能跨页复用
      └─ ③ 外部:样式写在单独的 .css 文件里,页面用一行声明引入  ← 正路

  图说:三种写法浏览器都认,差别只在「样式离内容多远」。
  离得越远,越容易复用,也越不容易乱。

4. 核心原理

写法一:内联——样式贴在元素上

HTML 里每个元素都可以带一个 style 属性,样式直接写在里面:

<p style="color: red;">This is red text.</p>

效果是这行字变红。优点是快——改一处立即生效,不用碰别处。 缺点是乱:样式散落在内容的每个角落,页面大了之后,想统一改一种颜色, 得在几百个元素里翻箱倒柜。书里对它的定语是「small changes」——只适合小改4。

写法二:内部——样式集中在页面头部

HTML 页面有个 <head> 区块,装的是「关于这个页面的信息」而非正文。 在 <head> 里放一个 <style> 标签,里面写样式:

<head>
  <style>
    p { color: blue; }
  </style>
</head>

效果是全页所有 <p> 段落变蓝。比内联进了一步:样式至少聚在一处了。 但书里点出它的硬伤:不能跨页复用——你有第二个页面,就得把这堆样式复制一遍; 以后改颜色,得记住所有复制过的地方5。

写法三:外部——样式写进单独文件(正路)

这是书里标了「Most Common」的一种6。做法分两步:

第一步,建一个后缀为 .css 的纯文本文件(比如 style.css),里面写:

p { color: green; }

第二步,在 HTML 页面的 <head> 里用一行声明把它引进来:

<link rel="stylesheet" href="style.css">

这行的意思拆开看:link 是「我要引用一个外部资源」; rel="stylesheet" 说明这个资源的角色是样式表(stylesheet 就是「一张样式表」); href="style.css" 给出文件的位置7。 从此这个样式文件可以被任意多个页面引用——改一处,全站生效。

主线例子:一个页面从头走到尾

书里给了一个可以直接照做的完整流程,我们把它当本章的主线例子走一遍。 你有两个文件,浏览器打开 HTML 文件后发生的事,一步一步是这样:

文件一 index.html:

<!DOCTYPE html>
<html>
<head>
  <title>My First Styled Page</title>
  <link rel="stylesheet" href="style.css">
</head>
<body>
  <h1>Welcome!</h1>
  <p>This page uses CSS.</p>
</body>
</html>

文件二 style.css:

body {
  background-color: #e0f7fa;
  font-family: Georgia, serif;
  text-align: center;
}
h1 { color: #00796b; }
p  { color: #004d40; }

浏览器从上到下读 HTML,读到一个元素就去看样式表里有没有管它的规则:

步骤 读到的内容 应用到页面上的效果
1 <head> 里的 <link ... href="style.css"> 浏览器先去把 style.css 整个读进来,记成一张「规则清单」
2 <body> 开始 清单里有一条管 body 的:背景 #e0f7fa(一种很浅的青色)、字体 Georgia、文字居中 → 整页立即换底、换字体、所有内容居中
3 <h1>Welcome!</h1> 清单里有一条管 h1 的:颜色 #00796b(深青绿)→ 标题变色
4 <p>This page uses CSS.</p> 清单里有一条管 p 的:颜色 #004d40(更深的青绿)→ 正文变色
5 页面读完 你看到一个浅青底、居中、标题和正文两种深青绿的页面——而不是黑字白底

(以上代码和颜色值全部来自原书本章的练习;#e0f7fa 这类「井号加六个字符」的颜色写法, 第 04 章会专门讲清它怎么读。)

为什么这条路径有效? 因为它把「外观」彻底搬出了内容文件: HTML 里没有一个字在说「我是什么颜色」,它只报自己的身份(body、h1、p); 颜色全在另一个文件里,按身份对号入座。这就是「分层」在浏览器里的真实工作方式。

「层叠」是什么意思:三个发号施令的人,谁说了算

这是全书第一个概念难点,书里用了一个场景来讲8。 想象有三个人先后对同一个按钮下指令:

  1. 浏览器自带的默认规则说:「所有按钮做成灰色。」
  2. 你在外部 CSS 文件里写:「按钮做成蓝色。」
  3. 你又在这个按钮自己的标签上写了内联样式:「这个按钮做成红色。」

最后按钮是红的。 因为浏览器拿规则时按「谁更具体、谁更靠近这个元素」排优先级: 写在元素身上的(内联)比写在外部文件里的具体,外部文件里的又比浏览器默认的具体—— 越具体、越靠近的指令,覆盖越笼统的。 这种「按优先级从高到低应用规则」的机制, 就是 CSS 名字里那个 Cascading(层叠)9。

这里只讲直觉版——「更具体者赢」。两条规则具体程度一样时怎么分胜负? 有一套精确的计算规则(行话叫优先级,specificity),这本书没有展开, 我们在第 5 节「边界」里如实标注。日常使用里,「内联 > 外部文件 > 浏览器默认」 这条直觉足够应付。

5. 作者的判断与证据

这一章基本没有「证据」性质的内容——它是概念与操作章,作者的判断都写在推荐里:

  • 判断:外部 CSS 是正路。 依据是「clean, organized, and reusable」(干净、有组织、可复用); 代价是要多管一个文件,但作者补了一句「it's worth it」——值得10。
  • 判断:默认用类、慎用 ID 的习惯从第一天就要养。 这条出现在章末的练习说明里, 第 02 章会展开成正式的规矩。
  • 事实性陈述(可直接验证):没有 CSS 的网页是纯文本文档的样子;样式三种写法浏览器都支持。 这两条在任何浏览器里都能当场验证,不需要信作者。

6. 边界与局限

  • 「层叠」只给了直觉。 「更具体者赢」在两条规则同样具体时会失灵—— 那时浏览器有一套分数化的优先级计算,这本书全文没有讲。 靠这本书入门后,迟早要在别处补上这一课(MDN 的 specificity 一篇即可)。
  • #e0f7fa 这类颜色代码没有当场解释。 第 1 章就出现了 HEX 颜色, 但「井号加六个字符怎么读」要等到第 04 章才讲。阅读时只需知道「它是一种颜色的编码」。
  • <link> 那一行没有逐个部分讲。 原书只让你照抄。我们在第 4 节补了逐部分的解释(标明为补充)。
  • 练习假设你用「双击文件」的方式打开页面。 这在你自己电脑上成立; 将来把网站放到网上托管,路径问题会复杂一些——超出本书范围。

7. 可带走的

本章主线例子,一行写完: 两个文件(.html + .css)放在同一个文件夹 → 浏览器读 HTML,遇到 <link> 先去读样式表 → 之后每读到一个元素, 就照样式表里管它的规则上色 → 浅青底、居中、标题正文两个深青绿。

  1. CSS 管外观,HTML 管内容和结构——这一句是全书的地基;
  2. CSS 全名 Cascading Style Sheets(层叠样式表),「层叠」= 规则按优先级应用;
  3. 样式三种写法:内联(贴在元素上,快而乱)、内部(聚在页面头部,不可跨页)、外部(单独文件,正路);
  4. 引入外部样式用 <link rel="stylesheet" href="...">,一个文件可被任意多页共用;
  5. 冲突时谁赢:元素身上的 > 外部文件里的 > 浏览器默认的——越具体越赢;
  6. 书里给的颜色写法(#e0f7fa)是 HEX 编码,第 04 章才讲怎么读,现在照抄即可;
  7. 只需要文本编辑器 + 浏览器就能开始,不需要装任何东西。

8. 原文地图

主题 原书章 原文位置
CSS 定义、骨架与衣服的比喻 Chapter 1: What is CSS and Why It Matters text/02-ch01-chapter-1-what-is-css-and-why-it-matters.txt:5(搜「Cascading Style Sheets」) · text/02-ch01-chapter-1-what-is-css-and-why-it-matters.txt:5(搜「skeleton」)
没有 CSS = 纯文本文档 同上 text/02-ch01-chapter-1-what-is-css-and-why-it-matters.txt:9(搜「plain Word document」)
HTML/CSS 分工表(菜谱/房子/摆盘) 同上 text/02-ch01-chapter-1-what-is-css-and-why-it-matters.txt:35(搜「work together」)
三种写法、内联快而乱 同上 text/02-ch01-chapter-1-what-is-css-and-why-it-matters.txt:50(搜「three main ways」) · text/02-ch01-chapter-1-what-is-css-and-why-it-matters.txt:57(搜「hard to maintain」)
内部写法不可跨页复用 同上 text/02-ch01-chapter-1-what-is-css-and-why-it-matters.txt:83(搜「Not reusable」)
外部写法是正路 同上 text/02-ch01-chapter-1-what-is-css-and-why-it-matters.txt:84(搜「Most Common」) · text/02-ch01-chapter-1-what-is-css-and-why-it-matters.txt:104(搜「Clean, organized」)
层叠:三个人下指令 同上 text/02-ch01-chapter-1-what-is-css-and-why-it-matters.txt:109(搜「how rules are applied」) · text/02-ch01-chapter-1-what-is-css-and-why-it-matters.txt:118(搜「most specific rule」)
建文件夹、两个文件、双击打开 同上 text/02-ch01-chapter-1-what-is-css-and-why-it-matters.txt:126(搜「my-first-website」) · text/02-ch01-chapter-1-what-is-css-and-why-it-matters.txt:137(搜「stylesheet」) · text/02-ch01-chapter-1-what-is-css-and-why-it-matters.txt:169(搜「Double-click」)
主线例子的全部代码与颜色 同上 text/02-ch01-chapter-1-what-is-css-and-why-it-matters.txt:153(搜「e0f7fa」)

  1. 出处:「Chapter 1: What is CSS and Why It Matters」第 5 段(text/02-ch01-chapter-1-what-is-css-and-why-it-matters.txt:5,搜「Cascading Style Sheets」)。原文:「CSS stands for Cascading Style Sheets.」中文版读者注意:本书库一律用英文原名 CSS,不译。 ↩

  2. 出处:「Chapter 1: What is CSS and Why It Matters」第 6–8 段(text/02-ch01-chapter-1-what-is-css-and-why-it-matters.txt:5,搜「skeleton」)。原文:「If HTML is the skeleton of a webpage … then CSS is the clothing and makeup.」 ↩

  3. 出处:「Chapter 1: What is CSS and Why It Matters」第 9–11 段(text/02-ch01-chapter-1-what-is-css-and-why-it-matters.txt:9,搜「plain Word document」)。原文:没有 CSS,「every website would look like a plain Word document: black text, white background, unstyled links, and no layout」。 ↩

  4. 出处:「Chapter 1: What is CSS and Why It Matters」第 51–57 段(text/02-ch01-chapter-1-what-is-css-and-why-it-matters.txt:52,搜「style attribute」;:57,搜「hard to maintain」)。原文对内联写法的评价:Pros 是「Quick and easy for small changes」,Cons 是「Messy and hard to maintain for bigger projects」。 ↩

  5. 出处:「Chapter 1: What is CSS and Why It Matters」第 59–83 段(text/02-ch01-chapter-1-what-is-css-and-why-it-matters.txt:83,搜「Not reusable」)。原文对内部写法的评价:Pros 是「Good for small pages or single files」,Cons 是「Not reusable across multiple pages」。 ↩

  6. 出处:「Chapter 1: What is CSS and Why It Matters」第 84 段(text/02-ch01-chapter-1-what-is-css-and-why-it-matters.txt:84,搜「Most Common」)。小节标题原文:「3. External CSS (Most Common)」。 ↩

  7. 出处:「Chapter 1: What is CSS and Why It Matters」第 98–100 段(text/02-ch01-chapter-1-what-is-css-and-why-it-matters.txt:100,搜「stylesheet」)。原文给出 <link rel="stylesheet" href="style.css"> </head>。逐字段解释(rel 是 relationship、href 是文件地址)是我们补的,原书没有展开。 ↩

  8. 出处:「Chapter 1: What is CSS and Why It Matters」第 112–120 段(text/02-ch01-chapter-1-what-is-css-and-why-it-matters.txt:112,搜「giving instructions」)。原文:「Imagine three people giving instructions to style a button」——默认灰色、外部蓝色、内联红色。 ↩

  9. 出处:「Chapter 1: What is CSS and Why It Matters」第 109–110 段(text/02-ch01-chapter-1-what-is-css-and-why-it-matters.txt:109,搜「how rules are applied」)。原文:「The ‘Cascading’ in CSS refers to how rules are applied in order of importance.」按钮最终变红见第 118 段(搜「most specific rule」):浏览器采用最具体的规则,按钮变红。 ↩

  10. 出处:「Chapter 1: What is CSS and Why It Matters」第 102–106 段(text/02-ch01-chapter-1-what-is-css-and-why-it-matters.txt:104,搜「Clean, organized」;:106,搜「worth it」)。原文对外部写法的评价:Pros 是「Clean, organized, and reusable」,Cons 是「Requires managing multiple files (but it’s worth it!)」。 ↩