如何实现打字机字体效果_TT标签展示等宽字符排版样式

风宇大大_2895

风宇大大_2895

2026-05-24

379人浏览

原创

应使用css动画+等宽字体栈+ch单位实现打字机效果,因标签已废弃、无语义、不支持动画、可访问性差且字体渲染不可控。

如何实现打字机字体效果_tt标签展示等宽字符排版样式

别用 <tt></tt> 标签实现打字机效果——它已废弃,且根本不能可靠控制“打字”动画,只能勉强撑出等宽字体。 真正要实现逐字显现的打字机效果,必须靠 CSS 动画 + 等宽字体 + 字符宽度单位(ch)协同控制,<tt></tt> 连基础排版都语义错位,更别说动画逻辑。

为什么 <tt></tt> 根本不能做打字机效果

<tt></tt> 只是一个纯样式标签,HTML5 明确标记为 obsolete。浏览器渲染它仅出于兼容容忍,不保证行为一致:

  • 它没有语义,屏幕阅读器完全忽略,对可访问性零支持
  • 它不参与任何 CSS 动画触发机制——width、opacity、clip-path 对它都不起作用,除非你额外套一层容器
  • Lighthouse、axe 等工具会直接报 error,CI/CD 流程可能因此失败
  • 它的默认样式只是 font-family: monospace,但连这个都不是规范强制,而是浏览器“顺手加的”

font-family: monospace 必须显式设置,且不能只写 monospace

打字机效果依赖每个字符视觉宽度严格一致,而 monospace 是通用关键字,不同系统 fallback 差异极大:

  • Windows 上可能映射到 Courier New(偏粗、字距松)
  • macOS 可能用 Menlo(偏细、字距紧),导致 12ch 实际像素宽度偏差 ±8px
  • Linux 下可能是 DejaVu Sans Mono,连连字处理都不同

正确写法是明确指定字体栈,并以 monospace 收尾保底:

.typewriter {
  font-family: 'Fira Code', 'Source Code Pro', 'Consolas', monospace;
  font-variant-ligatures: none; /* 防止 fi/fl 连字破坏 ch 计算 */
}

打字机动画必须用 width + steps() + ch 单位

这是目前唯一能在 Chrome、Firefox、Safari 中稳定按字符步进的方案。关键不是“让字出来”,而是“裁剪可见区域并卡帧推进”:

  • 文字必须完整写死在 HTML 中,不能靠 JS 拼接或伪元素生成(否则无法精确计数)
  • 容器需设 display: inline-block 或 block,white-space: nowrap,overflow: hidden
  • @keyframes 中 width 必须从 0ch 到 Nch(N = 字符总数,含空格)
  • animation 中 steps(N, end) 的 N 必须与字符数完全一致,少 1 就丢最后一个字
  • 若文本含中文或 emoji,ch 单位会失效(它们不是等宽),此时应改用 JS 方案或手动拆分 <span></span>

光标闪烁必须用 border-right 或 box-shadow,不能靠伪元素模拟

很多教程用 ::after 做光标,但在 Safari 和旧版 Firefox 中易出现定位漂移或动画撕裂:

  • 推荐用 border-right: 0.1em solid currentColor 直接附着在文本容器右侧
  • 动画用 @keyframes blink-caret { 50% { border-color: transparent; } },配合 step-end 避免频闪
  • 注意 border-box 盒模型:如果容器有 padding,需用 calc(100% - padding) 校准 width 终点,否则光标错位
  • 移动端需加 -webkit-transform: translateZ(0) 强制 GPU 加速,防止光标卡顿

真正难的不是写出第一版打字机,而是让它在中英文混排、响应式缩放、深色模式切换、以及读屏软件聚焦时都保持字符对齐和节奏稳定——这些细节里,<tt></tt> 连入场券都没有。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

60

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

40

10

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

2026.10.22

40

15

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

2026.10.22

20

10

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

2026.10.22

20

25

Golangci-lint配置文件与规则设置
Golangci-lint配置文件与规则设置

本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。

2026.10.22

20

15

Golangci-lint安装与入门教程
Golangci-lint安装与入门教程

本专题讲解Golangci-lint的安装、初始化、基础命令和首次代码检查,覆盖本地环境、Docker及多平台用法,帮助Go开发者快速上手。

2026.10.22

20

15

PHP2Shell高危漏洞修复教程
PHP2Shell高危漏洞修复教程

PHP2Shell漏洞是什么,哪些PHP版本和运行环境会受到影响,服务器应该如何检测与修复?本专题提供版本自查脚本、Linux与Docker升级命令、PHP-FPM和Apache排查步骤,以及修复验证、临时缓解和应急响应方案。

2026.10.22

160

12

剧云人物设定与关系管理教程
剧云人物设定与关系管理教程

本专题介绍剧云人物设定与关系管理,讲解角色小传、性格职业、人物目标、背景资料和关系网络的创建及维护方法。

2026.10.22

20

16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134万人学习