step 属性定义合法值的数学约束而非设置增量,从 min 开始按 step 等差递增至 max;浏览器据此校验但不拦截手动输入,仅在提交或 checkValidity() 时触发 stepMismatch。

step 属性本身不“设置增量”,它定义的是合法值的数学约束:从 min 开始,按 step 等差递增,直到不超过 max。浏览器据此生成可接受的值集合,并在交互(箭头、滚轮、拖动)中强制对齐——但不会改变用户手动输入的能力。
type="number" 的 step 只校验,不拦截输入
设 <input type="number" min="0" max="10" step="2">,合法值是 0、2、4、6、8、10。但用户仍可输入 3、5.7 或粘贴 "7.999":
- 浏览器不会实时阻止,只在
form.submit()或调用checkValidity()时触发validity.stepMismatch === true - 上下箭头点击时会严格跳转:0 → 2 → 4,不会停在 1 或 3
- 浮点步长如
step="0.1"易因二进制精度导致 0.3 被判为非法,建议改用整数单位(如分→元)或 JS 规整:Math.round(parseFloat(val) / 0.1) * 0.1
type="range" 的 step 控制滑块停靠点,非渲染精度
step 决定松手瞬间的取值对齐逻辑,不是拖动平滑度:
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
- 若
min="0" max="100" step="10",滑块只能停在 0、10、20…100,哪怕你拖到 23,松手后自动跳到 20 或 30 - 初始
value必须满足value === min + n × step,否则 Chrome/Safari 会静默修正,引发拖动卡顿或跳变 - 移动端 Android WebView 常忽略
step,需监听input事件并用el.value = Math.round(parseFloat(el.value) / 10) * 10强制对齐
type="time" 的 step 单位是秒,不是分钟
写 step="30" 是每 30 秒一档(09:00 → 09:00:30),不是半小时:
立即学习“前端免费学习笔记(深入)”;
- 半小时必须写
step="1800"(30 × 60),15 分钟是step="900",整点是step="3600" -
value必须为HH:MM格式且秒部分隐含为 :00;若设value="09:07",浏览器会静默修正为 09:00 或 09:30 - step 对手动输入完全无效——用户仍可输 "09:17",提交也不报错,必须用
change事件做 JS 四舍五入:new Date(0,0,0,h,Math.round(m/30)*30).toTimeString().slice(0,5)
真正麻烦的从来不是写对 step,而是 value 初始值没对齐、用户粘贴非法字符串、或旧浏览器直接无视该属性——这些地方 JS 补偿几乎无法绕开。


















