是仅在 中生效的硬编码指令,必须写为 ,且需满足 https/localhost、位置靠前、合法十六进制值、未被 manifest 覆盖四条件,ios safari 完全不支持。

name="theme-color" 不是 HTML 元素的通用 name 属性用法,而是 <meta> 标签中一个**固定命名、仅在此处生效**的特定值。直接给任意元素(比如 <div name="theme-color">)设这个属性,完全无效。
<h3>必须用 <meta name="theme-color">,且只能在 里</h3>
<p><a style="color:#f60; text-decoration:underline;" title="浏览器" href="https://m.php.cn/zt/16180.html" target="_blank">浏览器</a>只识别这一种写法:<code><meta name="theme-color" content="#4285f4">。它不是“给某个元素加 name 属性就能触发效果”,而是一个硬编码的 meta 指令,且只在 解析阶段被 Chromium 内核读取一次。
- 写在
里 → 浏览器压根不看 - 写成
name="themeColor"或name="themecolor"→ 不匹配,静默忽略 - 用了
property="theme-color"(Open Graph 风格)→ 无效,必须是name - 多个
<meta name="theme-color">标签 → 只取第一个,后面全丢弃
content 值只认纯十六进制,其他全失效
哪怕格式只差一点点,content 值就会被整个跳过:
-
content="#4285f4"✅(标准六位) -
content="#45f"✅(简写三位) -
content="rgb(66,133,244)"❌(Chromium 不解析) -
content="#4285f480"❌(带 alpha,十六进制透明度不被支持) -
content="blue"❌(命名色,不支持) -
content=" #4285f4 "❌(前后空格导致解析失败)
Android Chrome 生效的四个硬性条件缺一不可
写了标签 ≠ 地址栏变色。以下四点必须同时满足:
- 页面运行在 HTTPS 或 localhost 上;HTTP 下直接跳过
-
<meta name="theme-color">必须静态写死在**最靠前位置**(建议紧贴<title></title>后) -
content值为合法十六进制,无空格、无引号外字符、无透明度 - 没注册 PWA 或 manifest.json 中未定义
theme_color;否则后者会覆盖前者
iOS Safari 完全无视 theme-color,别白费力气
无论你怎么调 content、怎么改位置、怎么清缓存,在 iPhone 的 Safari 上——<meta name="theme-color"> 就是不起作用。Apple 从未实现该特性。
想控制 iOS 状态栏,只有两条有限路径:
-
<meta name="apple-mobile-web-app-status-bar-style" content="black">:只切换文字/图标颜色(default/black/black-translucent),不改背景色,且仅在「添加到主屏幕」或 PWA 全屏模式下生效 - 配合 PWA manifest.json 的
status_bar字段(需安装为 PWA 才触发)
真正容易被忽略的是:即使所有条件都满足,Chromium 也会根据颜色亮度自动反色图标和文字——你设了深蓝,它可能给你配白字;设了浅灰,它可能强制黑字。这不是 bug,也没 API 可控,只能手动试色验证。











