
1. 从一次“丑到不行”的排版事故说起为什么要重视文本格式化先讲个我早年间亲身经历的事儿。当时帮一个朋友的公司做内部通知页面内容很简单就是把新发布的办公室管理制度发布到内网上。我拿到手的原始素材是一份Word文档里头有标题、有正文、有强调条款还有几条带特殊符号的注意事项。我当时“偷懒”直接把Word里的文本连同格式一起复制粘贴进了HTML文件里想着“能用就行”。结果页面一打开那叫一个惨不忍睹。标题字体大小不一正文的换行全部乱套长句挤成一团着重强调的文字因为缺失标签视觉上跟普通正文完全没区别。最要命的是有几处引用的编码符号在网页上直接变成了乱码方块。我当时花了将近两个小时去排查最后发现根本不是编码问题而是我在粘贴时引入了大量Word多余的内部样式和特殊字符而这些“脏数据”在没有正确格式化标签支撑的HTML页面里被浏览器解读得乱七八糟。那次之后我就想明白了一件事HTML里的文本格式化绝不只是给文字加加粗、变变颜色那么简单。它决定了你的内容在浏览器里呈现出来的结构、层次感、可读性和专业度。它就是网页的“装修工”把一堆纯文本变成有主次、有逻辑、有强调、让读者一眼就能抓住重点的信息层级。这篇文章我就把自己这些年用HTML做文本格式化积累下来的经验、踩过的坑、以及压箱底的小技巧一次性分享给各位。不管你是刚接触前端的新手还是已经写了一段时间页面、想系统梳理一下基础的老手这篇文章都值得你花十分钟看完。2. 重新认识格式化标签先看懂“标签”这件事本身2.1 为什么说格式化标签是页面的“骨架贴纸”很多教材会把HTML格式化标签简单定义成“让文本变样子的标签”比如加粗用b、倾斜用i。这么理解不能说错但它忽略了一个关键前提在HTML的世界里标签从来不只是“样式”的外壳更是“语义”的载体。浏览器、搜索引擎、屏幕阅读器等等它们都不是通过“看”字体是否粗黑来理解网页内容的而是通过解析标签来“读”内容结构的。打个比方你就懂了。你在Word里把一段话手动调成加粗、加大字号、变个颜色Word只知道“这段文字被赋予了某些显示属性”。但如果你在HTML里给一段文字套上h1标签那浏览器的理解就完全不一样了它会认为这是整份内容的“第一级标题”权重最高甚至会影响搜索引擎对页面内容的抓取排序。这就是“物理样式”和“语义结构”的天壤之别。文本格式化标签的意义在于用一个统一的、标准化的“骨架”把内容之间的关系说清楚。哪部分是标题、哪部分是强调、哪部分是引述、哪部分是代码、哪部分是删除的旧内容清清楚楚。浏览器拿到这套骨架就知道应该用什么样默认的、或你自定义的样式去呈现它。这就是为什么很多人说HTML是“内容的结构化标记语言”而不是“排版语言”。2.2 常见文本标签的“门派”划分与核心逻辑为了不被一堆标签搞晕我自己习惯把常用的文本格式化标签分成三大“门派”这样记起来特别清晰用的时候也不容易混乱。第一派块级结构化标签。这派是管“段落级”结构的它们的核心特点是默认占据整行前后都会自动换行。代表就是标题家族h1到h6以及段落标签p。这一派负责把内容切分成一个个“大块”。第二派行内语义化标签。这派是管“句子内部”结构的它们只影响包含在标签范围内的文本不会强制换行代表就是strong、em、mark、del、ins、sub、sup这些。这派负责在“大块”内部再标出哪些词、哪句话需要被特殊对待。第三派内容嵌入型标签。严格说这派不完全属于“文本格式化”范畴但在实际排版中又和文本紧密相关比如code代码片段、blockquote块级引用、pre预格式化文本。它们管的是特殊内容在文本流中的呈现方式。记住这个划分你在面对一堆文本时思路就会非常清晰先分块再标重点最后处理特殊内容。顺序对了页面效果基本不会差到哪里去。2.3 格式化标签与HTML版本迭代的关系很多时候新手会困惑有的教程说加粗用b有的说用strong到底听谁的这里有必要说清楚HTML版本的迭代逻辑。在HTML 4时代b、i、u这些标签是纯粹的“显示样式标签”浏览器看到b就直接渲染成粗体。但在W3C推动语义化改革之后的新时代理念里前端开发更强调的是“样式与结构分离”——样式的事情交给CSS结构的事情交给HTML。于是strong、em这些带语义的标签被推到了前台。strong表达的是“内容上很重要”em表达的是“语气上需要强调”。虽然视觉上它们和b、i默认效果一样但含义完全不同。在实际开发里我的建议是在HTML5标准下新写的页面一律优先使用带语义的strong和em把b和i留给那些“仅仅是样式需要而无实际语义强调”的场景。比如你想让某个图标文字变粗但不想强调它用b没毛病但如果你想告诉屏幕阅读器“这句话特别重要”那就必须用strong。这个习惯越早养成越好后面要做的无障碍适配会让你省很多力。3. 逐个拆解常用格式化标签从基础到进阶一次说透3.1 标题与段落页面层级的“地基工程”一个信息结构清楚的页面第一步永远是标题和段落的合理划分。标题标签从h1到h6一共有六级不要小看这六个层级它们直接决定了页面的“信息地形图”。当初我帮朋友公司改那个通知页面时第一件事就是把整个页面的标题层级梳理了一通。制度名称用h1各个大章节用h2章节下的小条目用h3做到“一山不容二虎”——h1全页只有一个用于最高级别的主题h2是各区块的枢纽h3负责细分。这之后页面才真正有了“骨架”。段落标签p是文本格式化里最常用的标签没有之一。有相当一部分新人会忽略一个细节在HTML里你在代码里按了多少次“回车换行”浏览器都会自动忽略掉。如果你想让文本真正在视觉上分段就必须用p把它们包起来。这不是多此一举而是因为p自带“段落间距”的默认样式margin让内容读起来更透气。经常有人问我为什么自己复制进HTML里的文章首尾相连挤成一团十有八九就是没用p包段落。关于标题有个容易被忽略的技术细节值得单独提一句标题默认的font-size是从大到小递减的但不同浏览器对h1默认字号的定义略有差异。所以如果项目对视觉尺寸要求比较严格我习惯在CSS里显式定义h1到h6的字号大小而不是去依赖浏览器的默认值。否则同一个页面在Chrome里正常到Safari里可能标题就“缩”了一圈这种跨平台的差异最坑人。3.2 强调与语气决定“重音”落在哪里文本里总有需要重点突出的关键词、警示语、术语定义。这时候就需要用到strong和em。我打个比方如果你把一段文字想象成一句台词那么strong就是“字正腔圆的重音”而em则是“语气上扬的强调”两者都重要但用法截然不同。strong适合标注像“截止日期”“严禁”“必须”这类需要读者高度警惕的内容默认样式是加粗em适合标注字面意思上需要人特别体会的词比如“这已经是第三次出现问题了”中的“第三次”默认样式是倾斜。有些人混用这两者觉得反正都是“强调”但我说实话在语义化的大前提下这两个标签各自承担着不同的“职责”滥用会导致网页结构信息失效。尤其是对依赖屏幕阅读器的用户来说em会被读屏软件用特殊的语调朗读出来而strong则会用增强音量的方式表现出来。你选哪个标签直接影响别人“听到”的是什么样的内容。再补充一个mark标签这个在HTML5里才被正式明确。它默认的样式是黄色荧光笔背景最适合用来标记“检索命中的关键词”或是“临时需要高亮标出的文本”。我写项目文档需要给用户标出重点修改内容时经常用它比自己去写background-color要方便得多而且语义上也明确得多。3.3 上下标与删除线最容易被低估的“小透明”有一组标签在整个文本格式化家族里戏份不多但用到时极其好使就是sub下标和sup上标。化学式里的下标数字、数学公式里的幂指数、脚注编码、单位符号这些都离不开它们。例如Hsub2/subO就是水的化学式Xsup2/sup则是X的平方。这俩标签是行内标签不会打断句子的流动非常自然。另一个容易被忽略的是del和ins。del默认效果是删除线用于表达“该内容已被移除或不再有效”ins默认效果是下划线表达“内容被新插入进来”。它俩在团队协作编辑文档、展示版本变更记录、或在线的批注系统中特别有用。如果你在一个页面的段落里想直观地表达“这部分要删掉换成后面这个新的”用这对组合再合适不过。而且它们的语义很轻不会像strong那样霸占注意力非常适合做润色和修订类的场景。顺带说一句u这个标签虽然在老版本里常被当“下划线”用但它在HTML5 里其实已经被重新定义为“非文本注解”的意思了不再推荐用于单纯的下划线效果。如果只是为了给文字加一条下划线别图省事用u老老实实交给CSS的text-decoration去处理才是正路。3.4 特殊文本类型的呈现代码、引用与预格式化这部分是我自己在博客写作中性价比最高的一环。写技术文章离不开贴代码而HTML里的code标签就是为此而生的。code用来标识内联代码片段比如在正文里提到“用div包裹内容”这里的div就应该包上一个code标签。它的默认样式是等宽字体让代码在文本流里一眼就能被分辨出来。但注意code默认不会保留空格和换行。当你需要展示一段多行完整代码、并且要求保留代码里的缩进和换行时就得靠pre标签了。pre的全称是 preformatted它的核心能力就是让浏览器原样保留你写在HTML里的空格、制表符和换行符。最常用的经典组合就是precode嵌套在一起用外层pre保住代码的排版格式和换行结构内层code标出代码的语义是“代码内容”。我每次在博客里贴大段代码用的都是这个组合。需要提醒一句的是pre块里的文本默认使用等宽字体而且不会像普通段落那样自动换行长行容易横向溢出所以在用的时候记得配合CSS的overflow-x: auto来处理移动端的横向滚动问题。这个坑我踩过好几次页面上一条长代码直接把布局撑爆了后来强制给所有pre加上横向滚动样式才彻底解决。与之相似的还有blockquote这是块级引用标签专门用来独立成段地放长引用语。和它在行内版本q短引用会给内容自动加引号不同blockquote默认会有缩进效果无论是放名人名言、引用公告原文还是展示一块来自别处的通知文字都非常合适。每当你需要“引用某段已有文本”时千万别只丢个引号进去用blockquote才是把结构表达清楚的正规做法。4. 实操现场如何用格式化标签完成一段“看得舒服”的正文排版4.1 一个完整的排版流程演示光讲理论没意思咱们直接上一段实际操作的例子。假设我现在要排版一段包含安全通知、化学式、代码行、引用语和修订记录的复杂文本我会这么做。原始文本是这样的未格式化重要安全生产通知!截止日期为本月25日。所有生产车间必须完成设备检修。请特别注意车间的消毒液浓度为0.05%不可随意调整。关于操作规程请参考下方示例if (status ok) { runAll(); } 上次会议提到该流程务必在月底前落地。“安全第一”不仅是一句口号更是整个生产流程的生命线。原第3条规程已废弃替换为第4条新规程。这个文本如果直接放进HTML里那真是灾难级体验。长句连在一起重点不突出专业术语混在普通文字里完全没有层次。用我之前说的“顺序”处理我会这么改造。第一步切分块级结构。先把整段文字按照逻辑拆成两个自然段落加上一个二级标题h2安全生产关键通知/h2 p截止日期为本月25日。所有生产车间必须完成设备检修。请特别注意车间的消毒液浓度为0.05%不可随意调整。/p p关于操作规程请参考下方示例if (status ok) { runAll(); }/p这样页面瞬间有了骨架分隔清晰阅读不再疲劳。第二步标记句内重点。接下来把哪些词是必须让读者一眼看到的重点标出来。“截止日期”和“25日”是核心时间信息必须用strong“特别注意”是要加重语气的引导词用strong没问题浓度为“0.05%”属于关键数字给上strong。第三步处理特殊文本。化学式里的“0.05%”可以不做上下标因为是无量纲但“消毒液”如果涉及化学式的话可以考虑用sub。这段里把 “if (status ok) { runAll(); }” 用code包起来变成行内代码样式和正文区分开。最后的“安全第一”引语如果是要独立成段的话我会用blockquote包一层。被废弃的第3条规程加个del划线再配合ins标记新的第4条规程。最终排完的HTML大概是这个思路的呈现这里给一个简化示例h2安全生产关键通知/h2 pstrong截止日期/strong为本月strong25日/strong。所有生产车间必须完成设备检修。strong请特别注意/strong车间消毒液浓度为0.05%不可随意调整。/p p关于操作规程请参考下方示例codeif (status ok) { runAll(); }/code/p blockquote安全第一不仅是一句口号更是整个生产流程的生命线。/blockquote p原第3条规程已del废弃/del替换为ins第4条新规程/ins。/p视觉上整个页面就从“一大坨字”变成了“有标题有段落、有重点有补充、有引用有修订记录”的规范页面。这段逻辑走一遍之后你会发现格式化标签其实就是一组“排版决策”这里是不是该分段这里是不是该加重这里的术语需不需要特殊样式每一个决策背后都有清晰的理由做多了就变成肌肉记忆了。4.2 组合使用时的嵌套顺序与注意事项组合使用标签时嵌套顺序是最容易出错的点。我总结出一个非常容易记忆的经验法则块级标签永远在外面行内标签往里面钻特殊内容按照“整体是块、局部是行”的规律嵌套。比如代码块必须是precode代码/code/pre而不是反过来blockquote里如果需要高亮某句话那strong必须放在blockquote内部而不是外部。括号式包裹要特别小心一个经典错误!-- 错误强调内容里再嵌套块级段落浏览器会直接给拆开 -- pstrong注意/strongp禁止在该区域内停留/p/p标签是不能交叉嵌套的。p里面不能再放p就像盒子不能套比自己还大的盒子。浏览器遇到这种嵌套会自动拆分成多个独立段落页面结构直接跑偏。正确写法是pstrong注意/strong禁止在该区域内停留/p把强调放在段落内部。我自己写页面时会养成一个习惯完成一版排版后会打开浏览器的开发者工具按CtrlShiftC检查一遍DOM结构树——看看有没有浏览器“自动纠正”过的标签错位。很多时候你以为排版没问题但浏览器已经悄悄帮你做了一轮“结构修复”到时候查样式查半天找不到原因就是没注意到这一步。4.3 默认样式与CSS覆盖策略什么时候可以“偷懒”很多初学者一开始会想这些标签都有默认样式那我直接用不就行了为什么还要写CSS去重定义我的回答是默认样式只是“保底”真正决定美观的永远是CSS。默认样式最大的价值在于当你的CSS文件还没加载出来时比如网络慢页面依然有一个最低限度的可读性。这也是为什么哪怕你什么样式都不写纯HTML文档放在浏览器里标题和段落依然能看出层级来。这就是格式化标签自带的“安全网”。但在实际项目中默认样式通常不满足设计需求。比如h1默认字体往往过大过粗很多设计稿里的标题需要用更克制的字号blockquote默认的左缩进在各个浏览器里也不统一strong默认加粗但在某些设计里字重可能是“半粗”而不是“全粗”。所以我在实际开发里的做法通常是HTML端只管用正确的语义化标签把结构搭对CSS端专门写一个基础样式重置reset或者通用排版样式把这些标签的margin、font-size、font-weight、line-height统一调整到与设计稿匹配。比如我常用的一个基础CSS片段h1, h2, h3, h4, h5, h6 { margin: 0.5em 0 0.8em; font-weight: 700; line-height: 1.4; } p { margin: 0 0 1.2em; line-height: 1.75; } strong { font-weight: 600; } blockquote { margin: 1.5em 0; padding-left: 1em; border-left: 4px solid #ccc; } pre { padding: 1em; overflow-x: auto; background: #f6f8fa; border-radius: 6px; }这套代码的核心思路就是把标签的语义身份保留住但把视觉表现全权接管过来。这样页面不管在什么样的内容组合下都能保持视觉一致性和良好的阅读体验。5. 格式化标签背后的深层能力从“显示正确”到“语义正确”5.1 为什么要用“语义”的视角看格式化写到这里我特别想强调一个认知转变纠结于标签“长什么样”是初学者的视角关注标签“意味着什么”才是真正入行的标志。我们看到strong的第一反应不应该是“哦这是加粗”而应该是“哦这里的内容需要被着重理解”。看到blockquote的第一反应不应该是“哦这边会缩进”而应该是“哦这里引用了别处的文字”。这个转变之所以重要是因为网页的消费者远不止“肉眼看到的用户”。搜索引擎爬虫需要靠HTML结构来判断页面主题和关键词权重无障碍工具如屏幕阅读器需要靠语义标签来为视障用户朗读内容的结构甚至一些自动化测试脚本也依赖稳定的语义结构来定位页面元素。如果你只用“样式”的视角去写HTML那你交付的页面可能在普通用户眼里“看起来正常”但在搜索引擎、无障碍工具眼里却是“一片混沌”。举一个很现实的例子。一个新闻页面如果把新闻标题全部用div加大字号模拟标题效果那么搜索引擎就无法把标题识别成“标题”也就无法在搜索结果中给你的页面赋予更高的权重。同时屏幕阅读器会把所有标题段落当作普通正文逐字朗读用户根本分不清哪里是标题哪里是正文阅读体验极差。反过来仅仅是把div换成h2什么都不用做SEO基础和无障碍基础就都立住了。这就是语义化标签的隐形价值它看不见摸不着但影响深远。5.2 无障碍阅读技术与格式化文本的配合具体说无障碍这一块。WAI-ARIA无障碍富互联网应用规范里有一整套角色role、状态state和属性property体系但它并不是要替代HTML的语义标签而是要“增强”语义标签表达不充分的部分。文本格式化标签在无障碍工具面前是天然的“结构路标”。比如屏幕阅读器用户可以通过快捷键跳转浏览页面上的h1到h6标题快速了解页面大纲这是最基础、最常用的无障碍导航方式之一。要是标题标签缺失或者错用视障用户想找到某个章节就只能逐字逐句往下听效率极低strong在部分屏幕阅读器里会用“提高音量”的方式读出让重音信息有效传达em会用“特殊语调”读出让语气重点不至于被忽略del在部分读屏软件里会被读作“删除内容...”让用户知道这段文字的历史状态。这意味着你写下的每一个格式化标签不仅仅是给浏览器看的样式指令更是给每一种“消费你内容的方式”发去的语义信号。你的标签用得越准确你的内容被理解得就越透彻。我之前给一个政务类网站做无障碍改造印象太深了。那是一个面向市民的通知公告平台有一批历史页面用的全是span和div加类名控制样式。改造的时候很多地方要做“语义化还原”——哪些是真实的标题层级、哪些是段落、哪些需要强调都得对照原稿一个一个重新梳理。这个工程量可比写新页面麻烦多了。所以我会劝所有正在学HTML的朋友从写第一行代码开始就用对标签否则“欠下的语义债”迟早要加倍偿还。6. 进阶心得日常工作里怎么用格式化标签提升效率6.1 小心Word粘贴带来的“富文本污染”回到文章开头提到的那段“事故”。那次之后我特别关注一个话题从富文本编辑器Word、WPS、网页编辑器复制粘贴内容会把一堆冗余格式带进HTML。你看着只是复制了一段文字实际上连带着复制了无数内联样式、嵌套标签、特殊字符而这些东西混合进代码里之后轻则让页面样式失控重则直接破坏原有的结构化标签。我处理过太多这样的案例了。现在我的经验是从Word里粘贴内容到HTML编辑器时永远选择“纯文本粘贴”或“无格式粘贴”模式。很多可视化编辑器都有这个选项通常是一个写着“T”的按钮或者右键菜单里的“粘贴为纯文本”。先把所有格式剥掉再在HTML代码里手动加格式化标签这样虽然刚开始有点麻烦但换来的是完全可控的代码结构。你永远不希望Word里的隐藏字体设置比如 Times New Roman、宋体渗透到你精心维护的CSS体系中那简直是给自己埋定时炸弹。如果真的有些内容已经是“富文本”了又不想手动重新排可以使用一些HTML整理工具来清洗。我推荐过不少同事用自定义的正则表达式批量清理多余的内联样式style...和span包裹比如在代码编辑器里搜索style[^]*并替换为空可以快速剔除绝大部分的垃圾样式。不过这么做有个前提确认你的CSS体系足够支撑标签默认效果否则清完样式页面反而“裸奔”。现在的做法是把清理和重建变成一套固定流程比手动一个个改高效太多。6.2 语义标签与SEO的隐藏关联做前端的人如果完全没有SEO意识会很吃亏。搜索引擎对页面内容的理解很多时候依赖于HTML标签传递的“语义线索”。在文本格式化这个范畴里直接影响SEO的就是标题标签的层级排布。我自己的经验是每个页面最好只保留一个h1它承载整个页面的最核心关键词。h1以下用h2划分各个主题板块每个板块内部可以用h3进一步细分。这样的层级结构对搜索引擎是非常友好的爬虫很容易据此理解页面内容的主次关系。有些页面为了视觉效果把好几个区块都设成了h1这种做法相当于告诉搜索引擎“我有好几个主题”结果就是权重被分散哪些也想不起来。这事听起来是SEO的范畴但它本质上还是HTML语义化的使用规范。格式化标签体系不仅仅是“让排版不丑”还是“让内容更有可能被更多人看到”的钥匙。另外一个容易被忽略的小细节是strong与搜索关键词的关系。有些SEO做法喜欢用strong高亮页面里的关键词从纯粹语义角度讲这确实能让搜索引擎更加重视该关键词但如果毫无节制地到处strong反而会起到反作用甚至可能被判定为关键词堆砌。我的建议是核心关键词只在标题h1和正文首段里用一次strong足矣其余的强调留给用户真正需要视觉重音的内容。不为SEO牺牲阅读体验才是做页面的正确姿态。6.3 场景化搭配文本格式化不是独立环节最后我想分享一个心得文本格式化标签永远不是孤立存在的它总是要跟其他HTML能力配合使用才能真正体现价值。比如你写一套文章页模板里不仅要有文本格式化标签还要配合article文章容器、header页眉、footer页脚、nav导航这些HTML5结构性标签你还得配合CSS的排版能力比如text-align、letter-spacing、word-break来优化中文排版的细节如果内容是动态渲染的比如从后端接口拉回来的Markdown文本渲染成HTML那各种标记语言转HTML的工具像 marked.js、markdown-it 这类其实内部也是依赖同一套语义化标签体系来输出结构的。我曾经帮人做过一个Markdown转HTML的博客系统开始时我天真地以为只要找个支持Markdown的解析库就能一步到位。后来发现真正影响博客页面质量的不是解析库本身而是它生成的HTML结构里使用了哪些格式化标签以及这些标签和我的CSS是否能匹配。比如解析库默认输出的code块如果没套pre那多行代码就会挤成一坨解析库生成的blockquote如果没配合CSS边框样式引用区域就完全看不出是“引用”。这些细节最后都要回到我们前面讨论的标签使用与样式覆盖的基本功上。所以文本格式化这一段基本功几乎是所有网页开发场景的“底座”。不管是纯静态页面、前端框架模板、还是后端模板渲染你写出来的HTML里只要涉及正文内容就离不开这套标签体系。把它吃透收益是长期的、复利的。7. 常见问题与排查技巧实录我在实操中踩过的坑7.1 为什么我按了回车页面还是没有换行这个话题我已经被问过几十次了。原因前面提到过HTML里连续的空白字符空格、换行符会被浏览器默认合并成一个空格。你在源代码里按一百个回车浏览器只会当成一个空格处理。想让文本在段落内强制换行但不新开一个段落可以用br标签比如地址、诗行、通讯信息里常用。但注意br是空标签没有闭合标签也不要用它来制造“段落间距”——那是p标签的职责用br刷间距是新手非常容易犯的毛病未来维护起来会很痛苦。如果你想彻底保留源代码里的空格和换行就用之前提到的pre标签。但pre会连空格也一并原样保留所以如果你只是想要“换行”而不想要“保留多个空格”那pre有时反而会带来意外的缩进效果要谨慎使用。我的经验是使用场景推荐标签/写法段落间分块p段落标签段内强制换行br标签展示代码并保留缩进precode嵌套展示音乐歌词/诗行p内配合br这个表是我在实战中反复验证过的选型逻辑拿去可以直接用。7.2 为什么我的strong加粗效果在手机上不明显这个问题很微妙和字体有关。很多中文字体在移动端默认并没有“加粗”的视觉表现或者加粗幅度很小。特别是系统默认字体“PingFang SC”它的字重体系里“半粗”和“粗”的区别很细微默认的font-weight: bold也就是 700 在部分系统渲染下远没有桌面端明显。所以我会在CSS里给需要强调的文本不仅仅是font-weight: 700还考虑颜色变化比如加深文字颜色或字号微调来强化对比感。另一个技巧是配合mark的高亮背景视觉上比单纯加粗抢眼得多。同样的道理也适用于em的斜体中文字体几乎没有“斜体”变体浏览器经常会“伪造”一个倾斜效果观感反而不自然。所以面对中文内容时你的强调策略要主动从“依赖标签默认样式”转向“依赖CSS设计的对比方案”。7.3 粘贴代码进HTML后符号被吞掉了怎么办这个坑我估计写过代码的人都遇过。在HTML里小于号是标签的开始标志如果你在正文或代码示例中直接写div浏览器会尝试把它解析成一个标签然后整个代码示例就“消失”了。正确的方式是用HTML实体字符来替代原字符HTML实体编码说明lt;小于号gt;大于号amp;和号quot;双引号apos;单引号我有一个习惯在代码里展示任何HTML标签本身时比如写“用div包一层”我都手动把所有尖括号替换成实体。这算是格式化标签的“元操作”——你连“展示标签”这件事本身都要格式化。如果内容特别多也可以借助工具或代码段自动完成转义。这个细节没处理好简直是公开处刑级别的错误。7.4 为什么格式化标签在某些浏览器里样式不一样浏览器兼容性问题是老生常谈了但在格式化标签方面确实存在一些差异。比如blockquote在不同浏览器里的默认 margin 值不一样有的浏览器上下margin是1em有的是0.4em 0mark的默认背景色在个别浏览器里不是黄色而是淡橙色。解决方案也很简单在项目初始化阶段把所有会用到的格式化标签默认样式做一遍“清零或统一定义”。我之前给过一个简单的CSS重置思路加上article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section { display: block; }这种兼容性兜底基本不会出大问题。写代码时多花一分钟做初始化省下的是未来跨浏览器调试的两小时。7.5 中文排版场景里还有什么细节要注意说个容易忽略的中英文混排的时候空格的处理很重要。HTML里多个空格会被合并所以如果你想在中文和英文之间插入一个“看似空格”的间隔直接敲空格是有效的会被渲染成一个空格但如果觉得间距太窄或太宽就不能靠空格来调节了要交给CSS的白空间属性word-spacing或直接在HTML里加一个thinsp;窄空格实体。我排版中文内容时习惯在中文和英文、数字之间保留一个半角空格阅读体验会好很多。但这个空格一定是在“内容”层面加好的不能依赖格式化标签去“制造”空隙。格式化标签管的是结构不是间距细节。8. 最后一块拼图让格式化思维教你“如何阅读HTML”写到这里我想聊点代码之外的东西。很多人在学HTML的时候总是急着去记标签、写页面但真正让我水平突飞猛进的反而是“大量阅读别人的HTML”这个习惯。你会发现一个懂格式化的人写出来的HTML代码结构非常“清爽”一眼扫过去就能看出内容的主次、逻辑的先后。而一个不懂格式化的人写出来的HTML即便渲染出来效果差不多代码里也往往是一堆无意义的div、一堆内联样式、一堆嵌套混乱的标签。有经验的前端拿到一段HTML打开源代码扫一眼标签的使用基本就能判断出这个作者有没有受过正规训练。这不是玄学因为标签的使用直接反映了一个人的结构化思维。你会不会用h2分节你会不会在用strong时克制你会不会在代码块外面套pre每一点小细节都在暴露你的设计思路。所以我特别建议学习HTML的朋友平时可以多去查阅一些优秀网站的源代码比如你看它的文章页里标题标签是怎么排布的、引用是怎么处理的、代码块是怎么实现的从这些细节里去体会“格式化思维”的实际落地。看得多了你自己写的时候自然就会形成肌肉记忆遇到一段文字先想清楚结构再动笔写标签。这套思维模式比记住一百个标签都管用。我回过头再看当年那次“丑到不行”的排版事故其实还挺感激的。没有那次踩坑我可能很长时间都不会认真思考“文本格式化”这件事的份量。现在我看任何一段待处理文本都会条件反射般地开始“格式化拆解”哪里是标题哪里是段落哪里需要强调哪里要特殊呈现。这套流程一旦跑顺了写出来的页面不仅好看而且结构清晰、易于维护后期改样式也好、优化SEO也好、做无障碍适配也好都能省下大把时间。这就是文本格式化给我带来的最实在的收益希望这篇文章也能让各位感受到同样的价值。