YL

FORM & INPUT

数字步进器Number Stepper

横向三段式数字输入:减号按钮 + 数字 + 加号按钮,适合数量、参数等离散数值。

效果预览

适合用在哪

购物车数量、库存调整、参数配置、表单数值输入。

不适合:数值需要快速键入精确大数时,步进器效率低于普通 input;纯展示不需要编辑的数值不要做成 stepper。

和相近模式的区别

区间滑块Range Slider

Range Slider 适合在连续区间内选值;Number Stepper 适合离散、精确的整数/小数,且占用空间更小。

容易踩的坑

  • 中间是 input 但只读,长按按钮时无法直接键入精确值,鱼和熊掌不可兼得。
  • min/max 没处理好时两个按钮同时 disabled,用户无法修改。
  • 步长 step 和精度 decimal 不匹配,输入 1.5 时显示 1 或 2。

设计提示词 · Prompt

数字步进器(Number Stepper):三段共享一个圆角容器(圆角 10-12px、1px 描边、overflow:hidden、height 40-44px)。左右各是一个 40-44px 正方形按钮:左侧「−」、右侧「+」,中间用 1px 描边分隔。中间是等宽数字输入框(text-align:center、border:0、font-variant-numeric:tabular-nums)。达到 min 时左侧按钮 disabled;达到 max 时右侧按钮 disabled。支持长按连续增减;键盘上下方向键。
Number Stepper: a three-part horizontal control sharing one rounded container (10-12px radius, 1px stroke, overflow hidden, height 40-44px). Left is a square "−" button, right is a square "+" button, each 40-44px, separated by 1px strokes. Center is a centered numeric input with tabular-nums. Left button disabled at min; right button disabled at max. Support long-press for continuous increment/decrement. Keyboard: Up/Down changes value, Shift+Up/Down changes by larger step.

可复制 CSS

自包含的最小实现,粘贴到空白页面即可生效;类名可以按项目规范改名。

/* <div class="num-stepper"><button aria-label="减">−</button><input value="3" inputmode="numeric"><button aria-label="加">+</button></div> */
.num-stepper { display: inline-flex; align-items: center; border: 1px solid #d1d5db; border-radius: 10px; overflow: hidden; height: 44px; }
.num-stepper button { width: 44px; border: 0; border-right: 1px solid #e5e7eb; background: #fff; font: 18px/1 system-ui, sans-serif; cursor: pointer; }
.num-stepper button:last-child { border-right: 0; border-left: 1px solid #e5e7eb; }
.num-stepper button:disabled { color: #d1d5db; cursor: not-allowed; }
.num-stepper input { width: 60px; border: 0; text-align: center; font: 15px/1 system-ui, sans-serif; font-variant-numeric: tabular-nums; }

演示 HTML 结构

<div class="s d-center">
  <div class="form-stepper">
    <button class="form-stepper__btn" type="button" aria-label="减少">−</button>
    <input class="form-stepper__num" value="3" readonly>
    <button class="form-stepper__btn" type="button" aria-label="增加">+</button>
  </div>
</div>

常见问题

中间是 input 还是 span?

用 input 更灵活,用户可以直接键入精确值;只读 span 适合不允许手动输入、必须靠按钮调整的场景。

长按连续增减怎么做不卡顿?

pointerdown 时启动 setInterval(间隔 120ms),pointerup/pointerleave/pointercancel 时 clearInterval;首次按下一次,之后每 120ms 触发一次。

常见搭配

同一页面里经常和「数字步进器」一起出现的模式,可以收藏后用「组合收藏为整页提示词」一起交给 AI。

标签