HTML怎么设置lang属性_html lang语言属性设置方法(建议收藏)

作者:袖梨 2026-06-28
lang属性必须写在html根标签上,如<html lang="zh-CN">,写在body或子元素无效;多语言局部切换可用子元素lang;JS动态修改document.documentElement.lang对已加载内容基本无效。

lang 属性必须写在 html 标签上,其他位置基本无效

浏览器、屏幕阅读器、搜索引擎都只认根元素上的 lang 声明,写在 bodydiv 或任何子元素上,主体语言就等于没声明。

常见错误现象:

  • <body lang="zh-CN"> → 读屏软件仍按系统默认语言朗读
  • <meta http-equiv="Content-Language" content="zh-CN"> → 浏览器忽略,HTML5 已明确弃用
  • <html lang=""><html lang="xx">(非法值)→ 被视为“未知语言”,比不写还糟

正确做法是服务端根据用户请求头 Accept-Language 或路由路径(如 /en/about)直接输出带对应 lang 的 HTML。硬编码最稳,比如:<html lang="zh-CN">

选哪个语言代码:优先用 zh-CN,别用 zhzh-Hans

zh-CN 是事实标准,兼容性最好;zh 过于宽泛,不指明简繁体和地域,部分辅助技术可能降级处理;zh-Hans 强调简体字但未绑定地域,某些旧版读屏或 SEO 工具识别不稳定。

立即学习“前端免费学习笔记(深入)”;

所有值必须符合 BCP 47 规范,大小写不敏感但惯例小写。不要拼错,比如 zh-chinazh_CNZH-CN 都是无效值。

多语言页面中,局部切换可用子元素 lang,例如:<p>这句中文<span lang="en">and this is English</span></p> —— 这样 :lang(en) CSS 才能精准命中。

JS 动态改 document.documentElement.lang 几乎没用

页面加载完成后用 JS 修改 lang,对已激活的屏幕阅读器、已索引的搜索引擎、已解析的 CSS :lang() 规则均无实际影响。

如果你真需要运行时语言切换(比如 demo 页),至少做到:

  • 同步更新 document.documentElement.lang
  • 遍历并重设所有已渲染元素的 lang 属性(尤其是 body 下带 lang 的容器)
  • 手动触发 aria-live 提示,告知读屏用户语言已变

但请注意:组件内部逻辑(比如日期格式、翻译弹窗)不会因 lang 变化而自动响应——它只管语义和可访问性,不管业务逻辑。

:lang() CSS 选择器怎么写才真正生效

:lang(zh) 只匹配 lang="zh" 的元素,不匹配 lang="zh-CN";想覆盖更广,用 :lang(zh-CN), :lang(zh-Hans), :lang(zh-Hant) 显式列举,或退而求其次用属性选择器 [lang^="zh"](但注意它会误伤 lang="zh-XX-YY" 这类非常规值)。

一个实用技巧:q:lang(ja) { quotes: "「" "」" "『" "』"; } 可让日文引用自动套用日式引号,但前提是 HTML 中对应 <q> 元素确实有 lang="ja"

记住::lang() 匹配的是元素自身或其祖先的 lang 值,不是内容检测结果——哪怕你把整段英文塞进 <p lang="zh-CN">,它也不会被 :lang(en) 选中。

相关文章

精彩推荐