meter 的 min/max 是硬边界,决定数值范围与value归一化比例;low/high 是语义分界点,影响颜色与无障碍状态,需满足 min ≤ low ≤ high ≤ max。

meter 标签的 min/max 是硬边界,不是可选参数
min 和 max 决定了 meter 的数值范围基准线,必须为数字,且 min 必须小于 max。浏览器会用它们归一化 value(比如 value="75" min="50" max="100" 渲染为 50% 宽度)。如果省略 min,默认为 0;省略 max,默认为 100 —— 但别依赖默认值,显式写出来更可控。
常见错误是把 min 设成负数后发现进度条“反向渲染”或颜色异常:浏览器仍按比例计算,但语义上 meter 本意是表示非负量度(如电量、加载进度),负值虽不报错,却可能让 low/high 判定失效。
-
min和max必须是数字,不能是字符串(min="0"可以,但min="zero"会静默转为0,不可靠) - 若
value超出[min, max],浏览器仍渲染,但视觉上会拉满或归零,且无障碍属性(aria-valuenow)仍反映原始值 - 不要用
min/max模拟“偏移刻度”,比如想显示 20–80 区间就设min="20" max="80",而不是用 CSS 伪元素遮盖两端
low/high 是语义分界点,影响背景色和 ARIA 状态
low 和 high 不改变宽度,只定义“低/高区间”的语义边界。浏览器根据 value 相对于 min/max/low/high 的位置,自动切换内置样式:低于 low → 暗红;在 low 和 high 之间 → 黄绿渐变;高于 high → 暗橙。这些颜色不可通过 CSS background 覆盖(需用 appearance: none + 自定义伪元素)。
关键约束:low 必须 ≥ min,high 必须 ≤ max,且 low ≤ high。否则浏览器忽略该属性,回退到无分段状态。
立即学习“前端免费学习笔记(深入)”;
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
- 若只设
low没设high,则“高区间”不存在,只有“低”和“正常”两态 -
low和high值可以相等(例如都设为50),此时中间“正常区”宽度为 0,仅剩低/高两段 - 屏幕阅读器会读出“low range”或“high range”,所以
low="30"意味着“30 以下属于低水平”,不是“30 是下限阈值”
value 属性决定填充位置,但必须落在 min/max 内才语义合规
value 是唯一必填属性(HTML 规范要求),它直接参与比例计算和语义判断。即使你用 CSS 把 meter 隐藏了,只要 value 合法,辅助技术就能正确播报当前量值。
容易踩的坑是动态更新时忘记同步更新 min/max:比如初始 min="0" max="100" value="80",后来数据变成 value="120",但没调大 max,结果视觉上撑满,语义上却仍是“80/100”,造成误导。
- JavaScript 修改时,推荐用
element.value = newValue(而非setAttribute),避免类型转换问题 - 若
value为空或非数字,meter渲染为空白条,且aria-valuenow为0 - 服务端渲染时,确保
value在模板中已计算好,避免客户端 JS 补充导致首次渲染闪动
兼容性与无障碍要点:别指望纯 CSS 控制语义色
Firefox 和 Safari 对 meter 的原生样式支持较完整,Chrome 也基本一致,但所有浏览器都不允许用普通 CSS 选择器修改内部色块(比如 meter::bar 无效)。要自定义颜色,必须用 -webkit-appearance: none + ::-webkit-meter-bar 等私有伪元素,且 IE 完全不支持 meter —— 如果需兼容旧版 IE,得降级为 progress 或 div 模拟。
真正重要的是无障碍:每个 meter 应配 title 或 aria-label(如 aria-label="CPU usage"),否则屏幕阅读器只读数字,不知量纲。另外,low/high 的存在会让 AT 主动附加“low range”描述,这是纯 CSS 进度条做不到的。
- 不要用
meter显示实时变化极快的值(如每秒刷新的传感器数据),重绘开销比canvas高,且频繁 DOM 更新易卡顿 -
meter不支持indeterminate状态(不像progress),所以加载中场景别硬套 - 如果设计稿要求“三段式”但 low/high 无法满足(比如需要红/黄/绿/蓝四色),说明语义模型不匹配,该换组件
low 和 high 的相对性——它们不是绝对阈值,而是相对于 min/max 的比例锚点。改一个值,其他三个最好一起复核。


















