tt标签已过时,建议用CSS或pre替代
`tt`标签已成历史,现代Web开发拥抱语义化标签和CSS!本文聚焦等宽字体的选择与优化,助你打造更清晰、高效的代码展示。告别过时的``标签,拥抱``、``等语义化标签,并通过CSS的`font-family`属性设置等宽字体,提升代码可读性和语义识别。自定义等宽字体虽美观,但需警惕FOIT、FOUT等性能问题。文章分享字体子集化、WOFF2格式、`font-display: swap`等优化策略,并推荐'Fira Code'、'JetBrains Mono'等字体栈,结合语义化HTML与CSS优化,助你实现兼顾美观与性能的最佳代码展示方案。
不应使用标签,因其已被废弃,现代开发应使用语义化标签如、、、来替代,并通过CSS的font-family属性设置等宽字体;2. 等宽字体对代码可读性、语义识别、跨平台一致性至关重要,能确保字符对齐并提升技术内容的阅读体验;3. 使用自定义等宽字体面临FOIT、FOUT等性能问题,可通过font-display: swap、字体子集化、WOFF2格式和local()检查本地字体来优化加载;4. 最佳字体方案需兼顾字符区分度、行高、字号与连字支持,推荐使用包含'Fira Code'、'JetBrains Mono'等的字体栈,并结合语义化HTML与CSS优化实现清晰、高效、美观的代码展示。
如果你还在考虑使用标签,那我们可能要先聊聊它的“退休生活”了。简单来说,这个标签在现代Web开发中已经不被推荐使用,甚至可以说被废弃了。它曾用于表示电传打字机(teletype)文本,也就是等宽字体文本。现在,要设置等宽字体,我们主要依赖CSS的
font-family
属性,并指定monospace
关键字,或者直接选择特定的等宽字体。

解决方案
关于标签,我的建议是:忘掉它吧。在HTML5时代,语义化标签才是王道。如果你想表达一段代码、键盘输入、程序输出或者变量,都有更恰当的语义标签可以使用,它们通常会默认以等宽字体显示,但更重要的是,它们传递了内容的含义。比如:
:用于表示计算机代码片段。这是最常见也最应该使用的场景。:表示用户输入的文本,比如键盘输入。
:表示程序输出的样本。
:表示程序或数学变量。
这些标签在浏览器中通常会有默认的等宽字体样式,但我们总会需要更精细的控制。

要设置等宽字体文本,核心在于CSS的font-family
属性。最直接有效的方式是指定monospace
关键字:
p { font-family: monospace; /* 浏览器会使用其默认的等宽字体 */ }
但这往往不够,因为不同浏览器、不同操作系统下的默认等宽字体可能千差万别,效果不一定是你想要的。所以,更专业的做法是提供一个字体栈(font stack),优先选择一些知名的、高质量的等宽字体,最后再回退到monospace
:

pre, code, kbd, samp { font-family: 'Fira Code', 'JetBrains Mono', Consolas, 'Liberation Mono', Menlo, Courier, monospace; /* 这个顺序很重要: - 'Fira Code', 'JetBrains Mono': 开发者社区非常流行的优秀等宽字体,支持连字(ligatures)。 - Consolas: Windows下非常出色的等宽字体。 - 'Liberation Mono': Linux下常见的替代选择。 - Menlo: macOS下默认的等宽字体。 - Courier: 历史悠久,兼容性好,但可能视觉效果不佳。 - monospace: 作为最终回退,确保无论如何都有等宽字体。 */ font-size: 0.9em; /* 适当调整字号,让代码看起来更舒服 */ line-height: 1.6; /* 增加行高,提升代码可读性 */ tab-size: 4; /* 设置tab宽度,现代浏览器支持 */ -moz-tab-size: 4; /* Firefox的旧写法 */ -o-tab-size: 4; /* Opera的旧写法 */ }
通过这种方式,我们可以确保在多数情况下,用户能看到我们精心挑选的字体,同时也有足够的兼容性兜底。
为什么在网页设计中,等宽字体如此重要?
等宽字体在网页设计中,尤其是在技术内容展示上,简直是不可或缺的存在。它的重要性远不止于“看起来像代码”那么简单,而是直接关乎信息传递的效率和用户体验的质量。
首先,可读性是核心。等宽字体最大的特点就是每个字符占据的宽度是固定的。这对于代码、终端输出、数据表格这类内容至关重要。想象一下,如果代码中的变量名、函数名,或者对齐的括号、缩进,因为字体宽度不一而错位,那简直是灾难。等宽字体能够保证字符的垂直对齐,让代码结构清晰,方便开发者快速扫描、理解逻辑,甚至更容易发现潜在的语法错误。我个人在阅读技术文档时,如果代码块的字体选择不当,哪怕内容再好,也会让我感到眼睛疲劳,甚至直接放弃阅读。
其次,它传递了一种明确的语义信号。当用户看到一段等宽字体文本时,他们的大脑会立刻将其识别为“这是代码”、“这是命令”、“这是某种技术性的、需要精确解读的内容”。这种视觉提示帮助用户快速切换阅读模式,从普通叙述性文本的散读,转变为对技术细节的精读。这是一种无声的交流,提升了用户界面的直观性。
再者,跨平台的一致性。虽然我们总说“像素完美”很难实现,但在等宽字体的世界里,至少在字符布局上,我们能达到高度的一致性。这确保了无论用户在Windows、macOS还是Linux上浏览你的网站,代码示例的视觉呈现都能保持统一,减少因字体差异带来的视觉混乱。对于那些需要展示大量代码或技术数据的网站,这种一致性是专业性的体现。
最后,等宽字体有时也能用于非代码的创意表达,比如模拟旧式终端界面、ASCII艺术,或者某些强调精确对齐的排版风格。它不仅仅是功能性的,也可以是美学和品牌风格的一部分。
使用自定义等宽字体时,会遇到哪些性能挑战?
当你想为你的网站引入那些酷炫的自定义等宽字体,比如Fira Code
或JetBrains Mono
时,性能问题就成了你不得不面对的现实。这就像给你的网站换上了更漂亮的“衣服”,但代价可能是加载时间变长。
主要的挑战在于字体文件加载。自定义字体通常需要通过@font-face
规则从服务器下载。字体文件,尤其是包含多种字重(weight)和样式(italic)的字体家族,体积可能相当庞大。这意味着用户在首次访问你的页面时,浏览器需要额外的时间去下载这些字体文件。如果网络环境不佳,或者字体文件过大,就可能导致:
- FOIT (Flash of Invisible Text):字体文件还没下载好,文本内容就直接不显示了。用户会看到一块空白,直到字体加载完成才突然出现。这体验非常糟糕,让人觉得网站加载缓慢甚至卡顿。
- FOUT (Flash of Unstyled Text):在字体文件下载完成之前,浏览器会先用系统默认的字体来渲染文本。一旦自定义字体加载完毕,文本会突然“闪变”成新的字体样式。虽然比FOIT好一点,但这种视觉上的跳动依然会影响用户体验。
为了缓解这些问题,我们通常会采取一些策略。比如,使用font-display
CSS属性来控制字体加载时的行为。swap
模式允许立即显示系统字体,并在自定义字体加载完成后进行替换,避免了FOIT。optional
模式则更加激进,如果字体加载太慢,它可能直接放弃加载自定义字体,始终使用系统字体,确保内容快速可见。
另一个考量是字体子集化(subsetting)。很多字体文件包含了地球上几乎所有语言的字符,但你的网站可能只需要英文字符、数字和一些标点符号。通过工具对字体进行子集化处理,只保留你需要的字符,可以显著减小字体文件的大小。
此外,字体格式的选择也很关键。WOFF2
是目前压缩率最高、支持最好的Web字体格式,优先使用它能有效减少文件大小。同时,别忘了利用local()
关键字在@font-face
规则中检查用户本地是否已经安装了该字体。如果本地有,浏览器就不用再下载了,这能大大提升加载速度。
@font-face { font-family: 'Fira Code'; src: local('Fira Code'), /* 优先检查本地是否安装 */ url('/fonts/FiraCode-Regular.woff2') format('woff2'), /* WOFF2优先 */ url('/fonts/FiraCode-Regular.woff') format('woff'); /* WOFF作为备用 */ font-weight: 400; font-style: normal; font-display: swap; /* 确保内容尽快可见 */ }
总之,引入自定义等宽字体是提升用户体验的好方法,但一定要权衡其带来的性能开销,并采取相应的优化措施。
如何选择并实现代码示例的最佳等宽字体方案?
选择并实现代码示例的最佳等宽字体方案,这不仅是技术活,更带有一丝艺术审美的成分。我个人觉得,一个好的代码字体,首先要让你看得舒服,其次要能准确区分各种字符,最后才是那些锦上添花的特性。
1. 字体选择的核心原则:清晰可辨与易读性
- 字符区分度高:这是最重要的。优秀的等宽字体会确保
l
(小写L)、1
(数字1)、I
(大写i)之间,以及0
(数字0)、O
(大写O)之间有明显的视觉差异。如果这些字符混淆不清,调试代码时会让你抓狂。 - 字形平衡:字体本身的字重、宽度和高度要适中,不要过瘦或过胖,也不要显得过于拥挤。
- 支持连字(Ligatures):这是现代编程字体的一大特色。比如
->
会变成一个箭头符号,===
会变成一个三横线等。我个人对代码连字是又爱又恨,它们确实能让代码看起来更“优雅”和紧凑,但有时也可能让新手感到困惑,或者在某些特定场景下(比如复制代码到不支持连字的编辑器)出现问题。我的建议是,如果你追求极致美观,可以启用;如果更注重普适性和纯粹的字符呈现,则可以禁用。
我常用的推荐字体栈:
font-family: 'Fira Code', 'JetBrains Mono', Consolas, 'Liberation Mono', 'Source Code Pro', Menlo, Courier, monospace;
这个栈涵盖了不同操作系统下常见的优质等宽字体,并加入了几个社区非常推崇的开源字体。
2. 实现时的最佳实践
- 语义化HTML结构:再次强调,使用
、
</code>、<code><kbd></code>等标签来包裹你的代码或技术文本。<code>pre</code>标签通常用于多行代码块,它会保留空格和换行。</li><li><strong>CSS精细控制</strong>:<ul><li><strong>行高(<code>line-height</code>)</strong>:对于代码,适当增加行高非常重要。<code>1.5</code>到<code>1.6</code>是一个不错的起点,可以避免代码行挤在一起,提升阅读体验。</li><li><strong>字号(<code>font-size</code>)</strong>:相对于正文,代码字号可以略小一点,比如<code>0.9em</code>或<code>0.875em</code>,这样在视觉上能形成区分,但又不会太小而难以辨认。</li><li><strong><code>tab-size</code></strong>:虽然现在编辑器大多能将Tab转为空格,但在Web上显示时,<code>tab-size</code>属性可以控制Tab字符的显示宽度,确保代码缩进一致。</li><li><strong>连字控制</strong>:如果你想启用或禁用连字,可以使用<code>font-feature-settings</code>或<code>font-variant-ligatures</code>。<pre class="brush:css;toolbar:false;">/* 启用连字 (默认通常是开启的,除非字体本身不支持) */ font-feature-settings: "liga" on, "clig" on; /* 禁用连字 */ font-feature-settings: "liga" off, "clig" off; /* 或者更现代的写法 */ font-variant-ligatures: none;
@font-face
时,务必考虑font-display: swap;
或optional;
,并利用local()
和WOFF2
来优化字体加载性能。最终,选择一个好的等宽字体方案,就像是为你的代码内容找到了一双舒适的“鞋子”。它不一定是那种花哨的、一眼惊艳的,但一定是能让你长久阅读而不感疲惫的。
今天关于《tt标签已过时,建议用CSS或pre替代》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

- 上一篇
- PHP表单处理与数据验证技巧

- 下一篇
- HTML多文件上传与列表展示技巧
-
- 文章 · 前端 | 43秒前 |
- HTML5实现AR的四种方法解析
- 270浏览 收藏
-
- 文章 · 前端 | 1分钟前 |
- CSS伪元素内容插入方法解析
- 241浏览 收藏
-
- 文章 · 前端 | 3分钟前 | 自适应 CSSGrid grid-template fr单位 九宫格布局
- CSSGrid布局实用技巧详解
- 272浏览 收藏
-
- 文章 · 前端 | 3分钟前 |
- Webpack插件功能与使用场景详解
- 102浏览 收藏
-
- 文章 · 前端 | 5分钟前 |
- HTMLbody标签的作用:文档主体的3大功能
- 138浏览 收藏
-
- 文章 · 前端 | 6分钟前 | CSS JavaScript Transition HTML温度计 汞柱动画
- HTML温度计制作与汞柱动画实现
- 447浏览 收藏
-
- 文章 · 前端 | 11分钟前 |
- HTML表格动态搜索实现方法
- 354浏览 收藏
-
- 文章 · 前端 | 17分钟前 |
- HTML中aria-orientation属性使用详解
- 253浏览 收藏
-
- 文章 · 前端 | 24分钟前 |
- HTML路径怎么写?相对与绝对路径区别详解
- 250浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 511次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 498次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 484次学习
-
- 千音漫语
- 千音漫语,北京熠声科技倾力打造的智能声音创作助手,提供AI配音、音视频翻译、语音识别、声音克隆等强大功能,助力有声书制作、视频创作、教育培训等领域,官网:https://qianyin123.com
- 165次使用
-
- MiniWork
- MiniWork是一款智能高效的AI工具平台,专为提升工作与学习效率而设计。整合文本处理、图像生成、营销策划及运营管理等多元AI工具,提供精准智能解决方案,让复杂工作简单高效。
- 161次使用
-
- NoCode
- NoCode (nocode.cn)是领先的无代码开发平台,通过拖放、AI对话等简单操作,助您快速创建各类应用、网站与管理系统。无需编程知识,轻松实现个人生活、商业经营、企业管理多场景需求,大幅降低开发门槛,高效低成本。
- 167次使用
-
- 达医智影
- 达医智影,阿里巴巴达摩院医疗AI创新力作。全球率先利用平扫CT实现“一扫多筛”,仅一次CT扫描即可高效识别多种癌症、急症及慢病,为疾病早期发现提供智能、精准的AI影像早筛解决方案。
- 168次使用
-
- 智慧芽Eureka
- 智慧芽Eureka,专为技术创新打造的AI Agent平台。深度理解专利、研发、生物医药、材料、科创等复杂场景,通过专家级AI Agent精准执行任务,智能化工作流解放70%生产力,让您专注核心创新。
- 180次使用
-
- 优化用户界面体验的秘密武器:CSS开发项目经验大揭秘
- 2023-11-03 501浏览
-
- 使用微信小程序实现图片轮播特效
- 2023-11-21 501浏览
-
- 解析sessionStorage的存储能力与限制
- 2024-01-11 501浏览
-
- 探索冒泡活动对于团队合作的推动力
- 2024-01-13 501浏览
-
- UI设计中为何选择绝对定位的智慧之道
- 2024-02-03 501浏览