HTML 元素 — 文字、表格、链接与列表¶
这一章讲一件事: 把最常用的 HTML 积木全部拿到手。文字怎么强调、菜单怎么排成表格、 页面之间怎么互相链接、清单怎么缩进——全部用一家虚构餐厅「Anna's Kitchen」的页面当例子1。 这一章积木密度高,但有一条暗线把它们串起来:每个标签都在回答「这段内容是什么」, 而不是「这段内容看起来怎样」。 生词都在当场解释。
1. 先看现象:同样一段字,「是什么」和「什么样」是两回事¶
菜单上一行字「今日特价:烤牛肉 $15」。你可以把它写成普通段落,也可以写成表格的一行, 还可以写成列表的一项——三种写法在屏幕上可能长得差不多,但对机器来说是三种完全不同的内容: 表格意味着「这是有行列关系的数据」,列表意味着「这是并列的几项」,段落意味着「这是一段连续的话」。
这一章教的所有积木,本质上都是这道选择题的不同选项:先判断内容的身份,再挑标签。
2. 顶层全景:元素、标签、属性——三个词先钉死¶
第 03 章用过标签,现在把三个容易混的词一次分清(这是原书给的结构2):
<a href="/menu">看看完整菜单</a>
└┬┘ └────┬───┘ └────┬────┘
开始标签 属性 内容
└──────────────┬──────────────┘
元素 = 开始标签 + 属性 + 内容 + 结束标签(</a>)
图说:整个这一行叫「元素」;<a> 和 </a> 是「标签」,成对出现;href 是「属性」,
只在开始标签里,写法是 名字="值"。
元素(element)是完整的单元;标签(tag)是元素的边界记号;属性(attribute)是写在开始标签里、
给这个元素的补充信息3。书的例子是锚元素 <a>(anchor,锚):<a href="/menu"> 是开始标签,
href="/menu" 是属性(它指定链接的目标地址),「看看完整菜单」是显示在页面上的可见内容,
</a> 收尾4。
这一章的每一个机制,都可以回到这张图上认位置。
3. 主线例子:给 Anna's Kitchen 写「今日菜单」¶
这一章的主线例子是餐厅页面的「今日菜单」区块——每个机制都在它身上走一步, 从一行字长成一张完整的菜单页:
① <h1>Anna's Kitchen</h1> ← 页面主标题
② <p>Every day, our expert chefs prepare … ← 一段介绍文字
③ <strong>beef, turkey, pork …</strong> ← 文字里圈出重点
④ <table> 三行两列:菜名 | 价格 ← 菜单排成表格
⑤ <a href="menu.html">Click here for full menu</a> ← 链到完整菜单页
⑥ <ol><li>…</li></ol> 与 <ul><li>…</li></ul> ← 两种列表收尾
图说:①–③ 是文字层,④ 是数据层,⑤ 是页面之间的桥,⑥ 是并列信息层。
② 段落与①标题(第 03 章已学,这里进正文)¶
书里给 Anna's Kitchen 写的第一段介绍,从 <p> 到 </p> 整整一段烤牛肉、约克郡布丁的宣传词5。
存盘、刷新,浏览器把整段当作一个块,段间自动留白。记住:HTML 源码里的换行和缩进,浏览器一律忽略;
页面上的「段」只由 <p> 划定。 这是初学者最常见的误会之一——「我明明在代码里空行了,为什么页面不换行」。
③ 强调文字:语义化分叉点¶
书里圈出了菜名那一串「beef, turkey, pork and marmalade-glazed gammon」,
给了两对看上去一模一样的标签:<b>/<i> 和 <strong>/<em>67:
| 标签对 | 视觉效果 | 语义(对机器说什么) |
|---|---|---|
<b> / <i> |
加粗 / 斜体 | 没有——纯视觉,「这段换个样式」 |
<strong> / <em> |
默认也是加粗 / 斜体 | 「这重要」/「这被强调」 |
为什么要分?书里点破:<em> 的主要目的不是斜体,而是告诉屏幕阅读器等辅助技术「这段更重要」7。
搜索引擎读页面时同样吃这一套——<strong> 里的词在排名里权重更高。
判断(我们的,不是书里的): 这是 HTML 哲学的一句话版本:「是什么」优先于「什么样」。 视觉上你随时可以拿 CSS 把任何文字弄粗;但「重要」这层意思只有标签能表达。 这一行的现行最佳实践是:默认用
<strong>/<em>,只有纯粹装饰(比如图标字体、产品名样式)才用<b>/<i>。 如果错,会错在: 个别老代码库大量用<b>/<i>,并不犯法——浏览器渲染没问题,只是语义丢了。 这是「旧代码能跑」和「新代码该这么写」的区别,别把前者当错误去改。
②½ 内联样式:临时化妆师,先上场再退场¶
这一章还教了怎么直接往标签上写样式——style 属性,书里叫内联样式(inline styles)8:
<h1 style="color:Yellow;">The Home of the Roast!</h1> <!-- 标题变黄色 -->
<h2 style="font-family:Helvetica;">The Home of the Roast!</h2> <!-- 字体换 Helvetica -->
<body style="background-color:Orange;"> <!-- 整页橙底 -->
<p style="background-color:Gold">…</p> <!-- 段落金底 -->
写法永远是 style="属性名:值;",多条用分号隔开。书里给的字体候选表(Arial、Verdana、Georgia、Times New Roman 等)9有一个要点:字体名写一串时,后面的当备胎——font-family: Arial, sans-serif; 的意思是「有 Arial 用 Arial,没有就随便哪种无衬线字体顶上」。
但内联样式是临时工。 它把「内容」和「样子」又焊回了同一行——正是 CSS 要拆开的那种耦合。 书里用它是因为此时还没教 CSS(第 07 章接管);学完全书要养成的心智是:样式能进 .css 文件就不进标签。 现在先记住它的语法,因为第 06 章给表格单元格调内边距、第 13 章之前你都会一直用它。
4. 表格:四种标签,一套俄罗斯套娃¶
菜单要有菜名和价格——这是「有行列关系的数据」,表格是它在这个星球上存在了三十年的答案。 HTML 表格是四层套娃,每层一个标签10:
<table> ← 整张表(还有样式:金色底、1 像素边框)
<tr> ← 一行(table row)
<th>菜名</th> ← 表头单元格(table header,默认加粗居中)
<th>价格</th>
</tr>
<tr>
<td>Roast Beef</td> ← 普通单元格(table data)
<td>$15</td>
</tr>
…再两行:Turkey & Stuffing $14、Gammon & Marmalade $13
图说:table 套 tr,tr 套 th 或 td——数据从“行”的角度写,列是行里单元格的副产品。
书里有个细节值得单独说:每个 <th> 和 <td> 上都写了 style="padding: 10px;"11——
内边距(padding),内容到边框之间的空隙。没有它,字会贴着线,没法看。
这是全书第一次实际使用盒模型的零件(第 07 章会系统讲),先用起来再补课,是这本书一贯的节奏。
表格的边界: 不要拿表格做页面布局。书里没明说,但这是这一行的铁律(④ 类通用知识,补充): 表格是「给数据用的」,拿它排页面会把阅读顺序和可访问性一起毁掉。页面布局是第 08 章 flexbox/grid 的活。
5. 超链接:Web 之所以是 Web 的那个标签¶
<a>(anchor)是万维网的命名来源之一——超文本(hypertext)就是「能跳到别处的文本」。
书里给了它的完整写法12:
href是属性,值是目标地址——可以是另一个网站(https://…),可以是同项目的另一个文件(menu.html),也可以是一个锚点(#section2,跳到本页某处);- 标签之间的文字是显示给用户的部分,浏览器默认给它蓝色加下划线(又是「浏览器默认样式」,第 07 章接管)。
主线例子的第 ⑤ 步:在菜单表格下面加一句 <a href="menu.html">Click here for full menu</a>13。
书里还特意演示了链接断掉的状态:点了没反应,因为 menu.html 这个文件还不存在14——
然后当场新建 menu.html,链接活了。这就是相对路径的实感:链接的目标就是项目文件夹里的另一个文件,
文件不在,链接就是死的。
6. 列表:三种,加一个套娃规则¶
菜单页底部常有「我们的承诺」这类并列条目——列表的地盘。书里教了三种15:
有序列表 <ol>(ordered list):条目前有编号,顺序有含义(步骤、排名)。
每个条目用 <li>(list item)包。编号样式可用 type 属性换:1 数字(默认)、A 大写字母、
a 小写、I/i 罗马数字16。
无序列表 <ul>(unordered list):条目前是符号点,顺序无含义(菜单、特性清单)。
符号样式同样用 type 换:disc 实心圆(默认)、circle 空心圆、square 方块17。
嵌套列表(nested lists):一个列表整体塞进另一个列表的某个 <li> 里18——
比如主列表第 2 项下面再展开两个子项。嵌套的 <ol> 或 <ul> 必须放在外层 <li> 的内部、
</li> 之前;浏览器会自动给内层换一套编号/符号样式并缩进。
<ol>
<li>Main item 1</li>
<li>Main item 2
<ol>
<li>Sub-item 1</li>
<li>Sub-item 2</li>
</ol>
</li> ← 注意:内层列表在外层 </li> 之前结束
<li>Main item 3</li>
</ol>
图说:嵌套的位置规则只有一条——内层必须完整躺在某个 <li> 里面。
7. 作者的判断与证据¶
书内作为事实给出的(可直接照用): 元素/标签/属性的结构定义3、表格四层套娃10、 链接的 href 语义12、列表的 type 值表1617、嵌套的位置规则18。
作者的取舍,值得意识到: 书里对内联样式的态度是「先用着」——它没有在这一章就警告内联样式的坏味道, 而是等到第 07 章用外部 CSS 形成对照。我们认可这个教学顺序,但在 ③ 节提前把「临时工」的性质点明了, 免得读者养成习惯再戒。
一处行业惯例,书里没解释为什么: 链接文字「Click here for full menu」——这一行的写作规范其实反对 「点这里」这种链接文字(屏幕阅读器用户听到的只是「链接:点这里」,毫无信息量)。 书是入门教材没提这一层,我们做拆解的补上:写链接文字时,让它脱离上下文也能听懂。
8. 边界与局限¶
- 语义化只开了个头。 这一章的
<strong>/<em>只是语义化最小的一课;真正的语义化大军是第 08、13 章的<header>、<nav>、<main>、<footer>等「结构化标签」,这一章还没出场。 - 表格样式靠内联,很快会被取代。
style="padding: 10px;"重复写在每个单元格上,是 CSS 最擅长收拾的重复——第 07 章会收拾它。 - type 属性换编号/符号是「老式但有效」的写法,CSS 的
list-style-type是更现代的对应物,本书没展开。 <img>、<video>、<audio>这些媒体标签不在本章——它们是第 05 章的主角。
9. 可带走的¶
全章主线例子,一行写完: Anna's Kitchen 页面 = 标题 + 段落(strong 圈重点)→ 三行两列表格(菜名|价格)→ 链到 menu.html 的链接 → 有序、无序、嵌套列表各一段。
- 元素 = 开始标签 + 属性 + 内容 + 结束标签;属性只写在开始标签里,格式
名字="值"3; <strong>/<em>说「重要/被强调」,<b>/<i>只说「换个样式」——默认用前者;- 内联样式(
style="…")语法现在就要会,但它是临时工——第 07 章起样式进 .css 文件; - 表格四层套娃:
<table>→<tr>→<th>(表头)/<td>(数据)10; <a href="目标">文字</a>;href 可以是网址、项目里的文件名、页内锚点;文件不存在,链接就是死的14;<ol>编号(顺序有含义)、<ul>圆点(顺序无含义)、<li>是它们的条目;- 嵌套列表的唯一规则:内层列表完整放在外层某个
<li>里面; - HTML 源码里的换行缩进浏览器全忽略;「段」只由
<p>划定。
10. 原文地图¶
| 主题 | 原书章 | 原文位置 |
|---|---|---|
| Anna's Kitchen 贯穿例子 | HTML Elements and Attributes | text/10-fm-introduction.txt:9(搜「fictional restaurant」) |
| 元素/标签/属性结构 | HTML Elements and Attributes | text/10-fm-introduction.txt:45(搜「opening and closing tags」) · text/10-fm-introduction.txt:49(搜「anchor element」) |
| 语义化强调 vs 纯视觉 | HTML Elements and Attributes | text/10-fm-introduction.txt:33(搜「semantic」) · text/10-fm-introduction.txt:105(搜「screen readers」) |
| 段落示例 | HTML Elements and Attributes | text/10-fm-introduction.txt:75(搜「marmalade-glazed」) |
| 内联样式(颜色/字体/背景) | HTML Elements and Attributes | text/10-fm-introduction.txt:123(搜「color:Yellow」) · text/10-fm-introduction.txt:173(搜「background-color:Orange」) |
| 表格四种标签 | HTML Elements and Attributes | text/10-fm-introduction.txt:201(搜「table row」) · text/10-fm-introduction.txt:203(搜「table header」) |
| 单元格内边距 | HTML Elements and Attributes | text/10-fm-introduction.txt:217(搜「padding: 10px」) |
| 超链接写法 | HTML Elements and Attributes | text/10-fm-introduction.txt:263(搜「url to page」) · text/10-fm-introduction.txt:267(搜「/menu」) |
| 链接断掉与补建 menu.html | HTML Elements and Attributes | text/10-fm-introduction.txt:271(搜「will not work until」) |
| 有序列表 type 值 | HTML Elements and Attributes | text/10-fm-introduction.txt:313(搜「uppercase letters」) |
| 无序列表 type 值 | HTML Elements and Attributes | text/10-fm-introduction.txt:365(搜「filled circle」) |
| 嵌套列表 | HTML Elements and Attributes | text/10-fm-introduction.txt:393(搜「placing one list inside another」) |
-
出处:「HTML Elements and Attributes」第 9 段(
text/10-fm-introduction.txt:9,搜「fictional restaurant」)。原话:「We will demonstrate this by creating a simple static website for a fictional restaurant called Anna's Kitchen.」 ↩ -
出处:「HTML Elements and Attributes」第 45 段(
text/10-fm-introduction.txt:45,搜「opening and closing tags」)。原文把「开始标签」「结束标签」「内容」三者的关系讲得完整,并以 anchor 的a为例。 ↩ -
出处:「HTML Elements and Attributes」第 49 段(
text/10-fm-introduction.txt:49,搜「anchor element」)。原文:「the whole element consists of an opening tag and a closing tag. In the opening tag, we can include attributes, and between the opening and closing tags, we include the visible content.」 ↩↩↩ -
出处:「HTML Elements and Attributes」第 49 段(
text/10-fm-introduction.txt:49,搜「visible content」)。 ↩ -
出处:「HTML Elements and Attributes」第 75 段(
text/10-fm-introduction.txt:75,搜「marmalade-glazed」)。这段烤牛肉宣传词后面还会在第 07 章被 CSS 反复改造,是全书的「常客文本」。 ↩ -
出处:「HTML Elements and Attributes」第 89、91 段(
text/10-fm-introduction.txt:89,搜「marmalade-glazed gammon」;:91,搜「」)。两对标签包住同一段文字,渲染结果一致。 ↩ -
出处:「HTML Elements and Attributes」第 105 段(
text/10-fm-introduction.txt:105,搜「screen readers」)。原文:「its main purpose is to signal that the text is more important or emphasized, which can be useful for screen readers and other assistive technologies.」 ↩↩ -
出处:「HTML Elements and Attributes」第 33 段(
text/10-fm-introduction.txt:33,搜「inline styles」)。 ↩ -
出处:「HTML Elements and Attributes」第 147–163 段(
text/10-fm-introduction.txt:147,搜「variety of fonts」)。书里列了 Arial、Verdana、Tahoma、Georgia、Times New Roman、Courier New、Trebuchet MS、Lucida Sans 八种「多数系统都有」的字体。 ↩ -
出处:「HTML Elements and Attributes」第 199–203 段(
text/10-fm-introduction.txt:201,搜「table row」;:203,搜「table header」)。四个标签的全称:table、tr = table row、td = table data、th = table header。 ↩↩↩ -
出处:「HTML Elements and Attributes」第 217 段(
text/10-fm-introduction.txt:217,搜「padding: 10px」)。 ↩ -
出处:「HTML Elements and Attributes」第 263 段(
text/10-fm-introduction.txt:263,搜「url to page」)。原书模板:<a href= "url to page"> Link name to display on page </a>。 ↩↩ -
出处:「HTML Elements and Attributes」第 267 段(
text/10-fm-introduction.txt:267,搜「/menu」)。 ↩ -
出处:「HTML Elements and Attributes」第 271 段(
text/10-fm-introduction.txt:271,搜「will not work until」)。原文:点了链接「will not work until we create the menu.html file」。 ↩↩ -
出处:「HTML Elements and Attributes」第 289、343 段(
text/10-fm-introduction.txt:289,搜「numbered sequentially」;:343,搜「bullet points」)。 ↩ -
出处:「HTML Elements and Attributes」第 309–323 段(
text/10-fm-introduction.txt:313,搜「uppercase letters」)。四种取值:1 / A / a / I / i。 ↩↩ -
出处:「HTML Elements and Attributes」第 363–373 段(
text/10-fm-introduction.txt:365,搜「filled circle」)。三种取值:disc(默认实心圆)/ circle(空心圆)/ square(方块)。 ↩↩ -
出处:「HTML Elements and Attributes」第 393–395 段(
text/10-fm-introduction.txt:393,搜「placing one list inside another」)。 ↩↩