← HTML 表单:从控件到提交与校验 / field-sizing: content——textarea 一行 CSS 自动长高 待审核 18 / 24
field-sizing: content

field-sizing: content——textarea 一行 CSS 自动长高

<textarea> 默认是固定高度,内容超出就内部滚动。长期以来「随内容自动增高」要靠 JS:监听 input、把 heightauto 再读 scrollHeight 回写——既繁琐又容易出现抖动。现在一条 CSS 即可:field-sizing: content。它让控件的尺寸跟随内容而非固定值,对 <input> / <textarea> / <select> 都生效。

1 · fixed(默认)vs content

两个 textarea 绑定同一段文字,左边是默认的 fixed,右边是 content。在任一框里打字 / 删字,看右边高度如何跟随。

2 · 用 min-height / max-height 设上下界

content 单用会从一行起步、无限增高。配上 min-height / max-height,就能做出「初始 N 行起、最多到 M 行后转内部滚动」的体验——下面这个框 min-height: 2.5em; max-height: 8em

3 · 不止 textarea:<input><select>

field-sizing: content<input> 宽度收缩到刚好容纳内容(像内联标签),让 <select> 宽度贴合当前选项(而非最长项):

命名小史。这个能力早期以 form-sizing: normal 的名字提案,后在标准化过程中更名为 field-sizing,取值也定为 fixed(默认)/ content。若你在旧文章里看到 form-sizing,指的就是它。各浏览器支持情况以上方实测结果为准。