step属性仅对type="number"、"range"、"date"、"datetime-local"、"month"、"week"、"time"生效;在number类型中控制增减精度和校验,date/time类支持有限且不可靠;需结合min、max与value共同定义合法值范围。

step属性只对特定type生效
不是所有 <input> 都支持 step,它只在 type="number"、type="range"、type="date"、type="datetime-local"、type="month"、type="week"、type="time" 下起作用。比如 type="text" 或 type="email" 加了 step 完全无效,浏览器既不校验也不影响行为。
常见误用是给金额输入框用 type="text" + step="0.01",结果步进按钮不出现、上下箭头点不动——本质是类型不对,得先改成 type="number"。
number类型下step控制增减精度和校验范围
step 在 type="number" 中干两件事:一是决定点击上下箭头时的增减量,二是参与表单提交前的合法性校验(不符合 step 规则的值会被标记为 invalid)。
- 默认值是
step="1",所以整数输入框按 1 增减 - 写成
step="0.1"后,输入1.05会触发:invalid伪类(即使min="0"max="10"),因为 1.05 不是 0.1 的整数倍 - 想允许任意两位小数?用
step="0.01";想限制只能选 5 的倍数?用step="5" - 特殊值
step="any"表示跳过 step 校验(但仍影响箭头增减量,此时按 1 增减)
date/time 类型中step含义不同且支持有限
type="date" 完全忽略 step —— 浏览器不支持按天数跳跃选择日期;type="time" 也基本不响应 step(Chrome 曾短暂支持 step="60" 表示分钟级,但已移除);只有 type="datetime-local" 和 type="month" 在部分浏览器中对 step 有弱支持,但行为不一致、不可靠。
立即学习“前端免费学习笔记(深入)”;
别指望用 step="7" 让 date 输入框跳着选下周——得用 JS 控制或换日历组件。
容易被忽略的隐式约束和兼容性坑
step 的实际效果依赖 value、min、max 三者关系。浏览器会从 min 开始,按 step 累加,直到超过 max,中间所有值才是合法可选值。
- 例如:
min="1" max="10" step="3"→ 合法值只有 1、4、7、10(注意:10 是 min + n×step 的结果,不是单纯 ≤max) - 如果没设
min,起始点是 0,step="0.1"时输入 -0.05 就会 invalid - Safari 对
step校验最严格,Chrome 某些版本曾绕过校验,Firefox 相对稳定 - 移动端 iOS Safari 的 number 输入框常把小数点转成逗号(locale 问题),
step="0.01"可能失效,需配合inputmode="decimal"
真正要用好 step,得把它看作“数值空间的栅格线”,而不是简单的“每次加多少”——起始点、步长、边界共同定义了合法集合,缺一不可。



















