size属性仅对text、search、tel、url、email、password等单行文本input有效,以字符数控制可见宽度,但会被CSS width覆盖;不适用于date、number(Safari旧版除外)、checkbox、file、textarea等元素。

HTML 中 size 属性只对 <input type="text"> 和 <input type="search"> 有效
size 是原生 HTML 属性,不是 CSS,它控制的是「在当前字体和字号下,输入框大致能显示多少个等宽字符」。浏览器按默认等宽字体(如 monospace)估算宽度,实际渲染受字体、缩放、CSS font-family 影响——比如设 size="10",但用了 font-family: "PingFang SC",显示可能不足或超出 10 个汉字。
- 仅对
type="text"、type="search"、type="tel"、type="url"等单行文本输入生效;type="email"和type="password"也支持,但部分旧版 Safari 对后者忽略size -
type="number"在 Chrome/Firefox 中支持size,但 Safari 16+ 才开始稳定支持,慎用 -
<textarea>完全不识别size,必须用cols或 CSS
用 size 还是用 width?关键看控制目标
如果目标是「让输入框刚好容纳 8 位数字」且不依赖 CSS,size="8" 简单直接;但如果要适配响应式、统一设计系统、或确保中英文混排时宽度一致,style="width: 200px" 或 CSS 类更可靠。
-
size值是纯数字(无单位),浏览器内部换算为像素,无法用媒体查询动态调整 -
width支持em、ch、%、px,其中width: 12ch最接近size="12"的语义(ch单位基于 “0” 字符宽度) - 当同时设置
size和width,CSSwidth优先级更高,size被忽略
size 不影响输入长度限制,别和 maxlength 混用
size 只管「看得见多少」,不管「能输多少」。用户仍可粘贴超长内容,或用键盘输入超出 size 值的字符——滚动条会出现,但提交不受限。
- 真正限制输入长度必须用
maxlength="10" -
size="10"+maxlength="10"是常见组合,视觉与行为一致 - 注意:
maxlength对中文、emoji、组合字符(如带声调的 é)按 Unicode 码点计数,一个 emoji 可能占 2 个码点,maxlength="5"可能只能输 2–3 个 emoji
现代项目中建议优先用 CSS ch 单位替代 size
ch 是 CSS 原生单位,含义明确:「当前字体中 “0” 字符的宽度」,比 size 更可控、可继承、可响应式。
<input type="text" style="width: 15ch;"> <input type="text" class="input-12ch">
CSS 中:
.input-12ch { width: 12ch; }
@media (max-width: 480px) { .input-12ch { width: 8ch; } }
-
ch在所有现代浏览器中支持良好(IE10+),且不会被字体切换意外破坏 - 若需兼容 IE9 及更早版本,才需回退到
size或固定px - 避免用
em替代ch:因为em依赖 font-size,而字符宽度未必与字号线性相关
ch 基于 “0”,而多数中文字体里 “0” 和 “汉” 宽度差异可达 15%,所以关键输入框(如身份证号)最好用固定像素或结合 JS 动态测量。

















