optimum 属性决定 meter 的“理想状态”颜色逻辑:它不直接参与颜色计算,而是与 low、high 共同划分三段区间,并指定哪一段为绿色优区间;value 的颜色取决于其所在区间相对于优区间的远近关系,而非与 optimum 的数值差。

optimum 属性决定 meter 的“理想状态”颜色逻辑
optimum 不是简单标出一个“最好数字”,而是告诉浏览器:当前值 value 落在哪个区间才算真正“理想”。浏览器据此把 meter 分成三段(由 low 和 high 划分),再把 optimum 归入其中一段——这一段就是绿色区,相邻段变黄,最远段变红。
关键点在于:optimum 本身不直接参与颜色计算,它只决定“哪一段是优区间”。最终显示什么颜色,取决于 value 相对于该优区间的**位置关系**,而不是 value 和 optimum 的数值差。
optimum 值必须落在 [min, max] 范围内,否则行为未定义
虽然部分浏览器可能容忍 optimum 超出 min/max,但规范未承诺如何渲染。实际中容易出现颜色错乱或完全不着色。
-
min="0"、max="100"时,optimum="105"是无效的,应避免 - 若最优语义对应“越低越好”(如错误率),设
optimum="0",而非负数 - 若最优语义是“居中最好”(如温度偏差),可设
optimum="50",前提是min="0"、max="100"
low/high/optimum 三者共同决定区间边界与颜色映射
很多人以为 optimum 单独控制颜色,其实它必须和 low、high 配合才有意义。浏览器按固定顺序划分区间:
第一段:[min, low)(左闭右开)
第二段:[low, high](闭区间)
第三段:(high, max](左开右闭)
然后看 optimum 落在哪一段,那一段就成为绿色区。例如:
<meter min="0" low="60" high="90" max="100" optimum="85" value="88"></meter>
这里 optimum="85" 落在第二段 [60, 90],所以 value="88" 也在绿色区;而 optimum="92" 就会落入第三段,整段 (90, 100] 变绿,value="88" 反而变黄。
optimum 为小数时要注意浏览器解析精度
HTML 解析器对 optimum 的值不做舍入处理,而是直接比较浮点值。比如 optimum="0.5" 和 value="0.5000000000000001" 在严格模式下可能被判定为“不在同一区间”。
- 建议优先使用整数,尤其当
min/max是整数时 - 若必须用小数,确保
value也以相同精度提供(如都保留 1 位小数) - 不要依赖
optimum="50.0"和optimum="50"行为完全一致——不同浏览器解析可能有微小差异
真正难调的不是写法,而是把业务语义准确映射到这三层区间+一个最优锚点上。一旦 low、high、optimum 的相对位置没理清,颜色就会反直觉。










