text-transform仅改变文本显示样式,不修改实际内容;对无大小写概念的字符(如中文、数字)无效,且不影响可访问性与SEO。

text-transform 不改内容,只改显示——这是它最常被误用的起点。你不能靠它修复表单提交的大写问题,也不能指望它让中文拼音自动首字母大写;它只是 CSS 渲染层的一次视觉重映射。
uppercase 和 lowercase 只作用于有大小写的字符
这两个值对英文字母生效,对数字、标点、中文、日文、阿拉伯数字等完全无影响。比如 "User123@domain.com" 加 text-transform: uppercase 后显示为 "USER123@DOMAIN.COM",但 "张三" 还是 "张三","123" 还是 "123"。
- 浏览器不会把中文“张”转成某种“大写形式”,因为中文没有大小写概念
- 连字符、下划线、点号等分隔符原样保留,不参与转换
- 在 Turkish、Greek、German 等语言中,大小写映射可能不符合直觉(如
ß → SS,i → İ),需配合lang属性才可能触发正确行为
capitalize 的“单词”切分逻辑很朴素
text-transform: capitalize 不是“每个英文单词首字母大写”,而是按空白符(空格、换行、制表)和常见标点(如 -、_、')切分“词”,再把每段的**第一个字母**转大写,其余字母不强制小写。
-
"hello-world"→"Hello-world"(不是"Hello-World") -
"user_name_123"→"User_name_123"(下划线后不提升) -
"jAvAsCrIpT"→"JavasCrIpT"(只动首字母,其余大小写照旧) -
"中文 hello world"→"中文 Hello world"(中文不动,英文部分仅首词首字母大写)
别在可访问性或 SEO 场景里依赖它
屏幕阅读器读的是原始 HTML 文本,不是渲染后的视觉结果。如果源码写的是 hello world,即使加了 text-transform: uppercase,读出来仍是 “hello world”,不是 “HELLO WORLD”。搜索引擎索引的也是源码内容。
立即学习“前端免费学习笔记(深入)”;
- 按钮文案用
text-transform: uppercase没问题,但别指望它提升关键词权重 - 表单输入框里显示大写,但
input.value仍是小写——想提交大写得用 JavaScript 转换value -
inherit在 IE8 及更早版本完全不支持,若还需兼容老环境,避免使用
真正容易被忽略的点:它不改变 DOM 文本节点内容,也不触发 input 或 change 事件;所有转换都在渲染管线末端完成,且无法通过 getComputedStyle 反向还原原始值——你只能拿到计算后的样式,但不知道原始字符串长什么样。



















