low 和 high 定义中性区间 [low, high],仅当 min
low 和 high 不是阈值,而是中性区间端点
很多人写
low="30"就以为“≤30 是警告”,实际不是。low和high共同定义一个“中性区间”[low,high],浏览器只在min 全部成立时才启用三段式语义渲染。任意一环断裂(比如 <code>low="0"但min="0"),整个低/高状态就失效,退化为纯线性条形。
low必须严格大于min;设low="0"+min="0"→ 浏览器忽略lowhigh必须严格小于max,且必须大于已设置的low;high="100"+max="100"→ 高区间消失- 只设
low或只设high,另一侧默认收束到optimum附近,行为不稳定,不建议value ≤ low→ “低区间”(正常偏低,非告警)low → “中区间”value > high→ “高区间”(注意:不是value ≥ high)optimum 不是“最优数值”,而是“优区间锚点”
optimum不参与任何数值计算,它唯一作用是告诉浏览器:“我落在哪一段,那一段就标为绿色‘优区间’”。浏览器先把 [min,max] 按low/high切成三段:[min, low)、[low, high]、(high, max],再看optimum落在哪一段——那一段变绿,相邻段黄,最远段红。
optimum值必须满足min ≤ optimum ≤ max,超出即语义错误(Chrome 可能静默忽略,Firefox 可能不着色)- 业务语义是“越低越好”(如错误率),应设
optimum="min",而非负数- 想让 40–60% 显示绿色?不能只设
low="40" high="60",必须同步设optimum="50"value="85"和optimum="95"看似接近,但若high="90",则optimum落在第三段,value在第二段 → 黄色(邻段),不是绿色- 调试时可用 JS 快速预判:
getOptimumZone(optimum, min, max, low, high)返回'low'/'mid'/'high',再和value所在段比对浏览器兼容性差,伪元素样式不可靠
你无法用普通 CSS 类或属性选择器控制
的颜色块,所有视觉干预都依赖浏览器私有伪元素,而支持度割裂严重:
- Chrome 支持
::-webkit-meter-bar、::-webkit-meter-optimum-value等- Firefox 目前完全不响应
low/high,只做基础条形渲染(2026年6月仍如此)- Safari 对
optimum着色支持有限,且伪元素名与 Chrome 不兼容- 没有事件可监听颜色变化,状态判断必须靠 JS 手动计算区间归属
- 屏幕阅读器对
的语义读取也依赖这些属性是否合法,配置错误会导致辅助技术误读 真正可靠的替代方案是 div + ARIA
如果你需要跨浏览器一致的颜色反馈、可交互状态、或可测试的 DOM 行为,
标签几乎不可靠。更务实的做法是用 <div> 模拟视觉效果,并通过 ARIA 属性传递语义: <ul> <li>用 <code>role="meter"+aria-valuenow、aria-valuemin、aria-valuemax提供基础语义手动计算 value所在区间,添加aria-valuetext(如 "偏低,42%")增强可访问性用 class 控制背景色(如 class="meter-low"),避免依赖浏览器私有伪元素配合 JS 实时更新状态,可绑定 click/hover,也可接入表单验证逻辑 对于磁盘占用、CPU 使用率等真实场景,业务逻辑往往比语义着色更重要——直接控制 DOM 更可控 最容易被忽略的一点:写完
后别只检查 value是否“看起来合理”,要手动验证optimum落在哪一段、那一段是否真的对应你的业务定义(比如“偏低但理想”还是“偏高才理想”)。一旦 low/high/optimum 三者逻辑错位,颜色就失去业务意义,只剩视觉干扰。












