是纯语义化标签,不支持step属性;控制时间精度须用并设step为正整数秒值(如step="1800"表示半小时),step="0"非法,且仅约束交互选择,不阻止手动输入。

time元素不支持step属性,别白费劲了
直接说结论:<time></time> 是纯语义化标签,浏览器根本不把它当表单控件处理,所以 step 属性对它完全无效。你加了也不会报错,但也不会起任何作用——它既不会限制时间粒度,也不会影响渲染或交互。
想控制时间精度,得用 + step
<input type="time"> 才是真正支持 step 的时间输入控件。它的 step 值单位是**秒**(不是毫秒,也不是分钟),默认值是 60(即 1 分钟)。常见用法:
-
step="1":允许选择到秒级(如14:35:27) -
step="30":每 30 秒一个可选值(14:35:00、14:35:30、14:36:00) -
step="600":每 10 分钟一个选项(14:30、14:40)
注意:Chrome 和 Edge 支持良好;Safari 目前(截至 iOS 17 / macOS 14)仍忽略 step,只显示默认分钟粒度——这不是你写错了,是浏览器没实现。
为什么不能把time和input混着用step?
有人试图这样写:<time><input type="time" step="30"></time>,这是无效的。HTML 规范禁止在 <time></time> 内嵌表单控件,解析时会自动将 <input> 移出 <time></time> 上下文,语义断裂,且 <time></time> 本身依然无交互能力。正确做法是分开使用:
将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。
立即学习“前端免费学习笔记(深入)”;
<label>预约时间:</label> <input type="time" id="appt" step="30"> <time datetime="2024-05-20T14:30">今天下午 2:30</time>
前者负责输入,后者负责语义标注或静态展示——各干各的活。
step=0 在 time 输入框里是非法值
step="0" 看起来像“不限制”,但实际会导致整个 <input type="time"> 失效(部分浏览器表现为清空输入框、无法聚焦或提交时校验失败)。W3C 明确规定 step 必须是正整数,最小有效值是 1。如果真需要秒级自由输入,就老实用 step="1",别碰 0。
真正容易被忽略的是:step 只约束用户通过点击/滚轮选择的值,不阻止手动输入任意合法格式(比如你设了 step="30",用户仍可手输 14:35:17,然后失去焦点时会被浏览器自动四舍五入或截断——行为因浏览器而异,不可依赖)。


















