lang属性必须按元素粒度显式声明,根节点lang值不自动覆盖子元素;未声明或写错会导致语音朗读、拼写检查、css :lang() 匹配及字体回退异常,需在语义边界处精准标注并同步更新动态内容。

lang 属性必须按元素粒度显式声明,不能只靠根节点
页面里混用中、英、日、阿语时,document.documentElement.lang设成 zh-CN 并不等于所有文字都按中文渲染。浏览器、屏幕阅读器、字体回退引擎全看每个元素自己的 lang 值——没写,就默认继承根语言;写错,就直接跳过拼写检查、语音切换、CSS :lang() 匹配。
常见错误现象:<p>参见 RFC 9110</p> 中的 RFC 9110 被读成中文发音;<pre class="brush:php;toolbar:false;">curl -X POST</pre> 在 Safari 里标点间距异常;阿拉伯语段落左对齐、光标反向。
- 中文主站中嵌法语引文:必须写
<blockquote lang="fr">C’est la vie.</blockquote> - 技术文档里的代码片段:用
<code lang="en">useState或<pre class="brush:php;toolbar:false;" lang="bash">npm run dev</pre>,lang="bash"虽非标准 BCP 47,但被主流高亮工具识别为上下文 - 避免给每个单词加
lang:DOM 膨胀、可访问性树构建变慢,只需在语义边界处标注(如整段引文、独立术语、代码块)
:lang() 伪类才是控制多语言排版的核心 CSS 工具
[lang="ja"] 和 :lang(ja) 行为完全不同:[lang="ja"] 只匹配显式写了属性的元素;:lang(ja) 能穿透继承链,匹配自身或任意祖先有 lang="ja" 的元素——这对嵌套结构(如 <div lang="ja"><p>こんにちは</p></div>)至关重要。
不同语言对断行、字距、标点、方向的需求差异极大,靠全局样式硬套必然出问题。
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
- 中日韩统一处理:
:lang(zh), :lang(ja), :lang(ko) { word-break: keep-all; } - 阿拉伯语右对齐+字体链:
:lang(ar) { text-align: right; font-family: "Tajawal", sans-serif; } - 德语长词防溢出:
:lang(de) { overflow-wrap: break-word; } - 注意:
:lang()不会自动触发字体 fallback,它只是样式钩子;真正触发日文字体加载的是元素自身的lang="ja"
inputmode + autocomplete 必须和 lang 配合使用,否则表单输入体验断裂
仅写 <input type="text" lang="ja">,iOS/Android 软键盘不会自动切到日文输入模式。浏览器需要明确的 inputmode 指令才能调起对应键盘类型,autocomplete 则决定是否从地址簿/历史记录中拉取本地化字段(如「山田 太郎」而非「Yamada Tarou」)。
-
inputmode="text"→ 中文拼音 / 日文罗马字 / 韩文输入 -
inputmode="numeric"→ 数字键盘(金额、电话) -
autocomplete="given-name"→ 触发浏览器本地姓名字段填充逻辑 - 错误组合:
<input lang="ar" dir="rtl">缺少inputmode="text",软键盘仍为英文 QWERTY
SPA 切换语言时,documentElement.lang 更新只是起点
执行 document.documentElement.lang = "en-US" 后,新挂载的组件能读对语言,但已存在的 DOM 节点(尤其是第三方库插入的富文本、动态 Toast、SVG 文本)仍按旧 lang 解析——语音朗读错、字体 fallback 失效、CSS :lang() 不生效。
- 必须同步遍历并重置所有含语言信息的节点:
document.querySelectorAll("[lang]"),逐个更新其lang属性 - 若用了
data-i18n翻译方案,需重新运行替换逻辑,否则内容仍是中文,哪怕lang值已改 - 动态插入的内容(如
confirm()提示、<svg><text>下载</text></svg>)要单独处理,不能只依赖静态 HTML 扫描 - 别忽略
Intl实例:日期/数字格式化对象不可复用,切换语言后需重建Intl.DateTimeFormat和Intl.NumberFormat
最易被忽略的其实是字体链与 lang 的耦合关系:Chrome 对 lang="ja" 元素会优先加载系统日文字体,而 lang="zh-Hans" 触发的是中文字体 fallback 逻辑;混排时一个 lang 写错,整段文字可能意外换字体,导致字重、字号、基线全部错位。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










