实体:需要显示「标签字符」本身时

只要内容里有 <、>、&,就必须写成实体,否则浏览器会把它当标签解析。

写法渲染结果说明
&lt; &gt;< >小于号 / 大于号,写代码示例必备
&amp;&与符号。&ampnbsp; 这类写错会产生奇怪文本
&quot;"双引号,属性值里嵌套时用
&apos;'单引号(注意:旧 IE 不支持,用 &#39; 更稳)
&nbsp;A   B不换行的空格,四个连着才留得住三个空格
&copy; / &reg; / &trade;© ® ™版权 / 注册 / 商标
&mdash; / &ndash;— –长破折号 / 短连接号
&middot;·中点,面包屑分隔符常用
&#20195;代十进制数字实体,任意 Unicode 都能这么写
&#x4EE3;代同一字的十六进制写法

今天还要不要为中文用实体?

不需要。只要页面声明了 <meta charset="UTF-8"> 且文件真的存成 UTF-8,中文、emoji(😀)、数学符号(∑)都可以直接写。实体的现代用途只剩两类:展示标签语法的教程页,以及不确定文件编码的旧环境。

反过来,内容里出现用户输入的 <script> 之类文本时,要在输出到 HTML 时做转义(这是防 XSS 的关键一步,和「模板里写 {{ }} 时 Vue/React 已自动转义」是同一件事的两面)。

注释

<!-- 普通注释 -->

<!--[if IE]> 条件注释:IE 10+ 已彻底废弃,别再用 <![endif]-->

<!-- 注意:注释里不能再出现连续的两个减号 --
     也不要试图注释掉一段含 -- 的脚本,解析会提前结束 -->

三条现状:① 注释会随 HTML 一起发给用户,别写内部接口地址、密钥、 TODO 里的客户名字;② 浏览器不会执行注释里的脚本,但「注释掉密码」这种写法每年都会被扫到一次;③ 大段被注释的死代码请删掉,交给版本控制。

书写约定

项目现代约定说明
标签大小写全部小写<DIV> 合法但罕见;HTML 不区分大小写,XHTML 和 Vue 模板区分,混写最容易出问题
属性值引号始终加引号值里含空格、& 时不加就错;统一加引号最省心
布尔属性required 直接写,不用 required="required"同理 disabled、checked、autoplay;注意 JS 里 el.getAttribute('disabled') 拿到的是 "" 而不是 "true"
自闭合标签<meta charset="UTF-8">,不写 /><br/> 是 XHTML 遗产,HTML5 里那个斜杠被忽略;void 元素(br、img、input、hr、meta、link、source)永远没有结束标签
缩进两个空格(本站与 Vue 官方风格一致)制表符也合法,同一个项目里别混用;交给 Prettier/编辑器统一
DOCTYPE 与首行第一行 <!DOCTYPE html>前面有空行会让浏览器进入怪异模式(第二章)