field-sizing 不是标准 css 属性,截至 2024 年所有主流浏览器均不支持,它从未进入 css 规范草案,也未在 blink、webkit、gecko 中实现,常见误用源于混淆私有前缀、其他属性或 ui 框架 props。

field-sizing 不是标准 CSS 属性,目前(截至 2024 年)所有主流浏览器均不支持该属性。试图使用它会导致样式完全失效,且控制台不会报错,容易误以为“写对了但没生效”。
为什么找不到 field-sizing?
它从未被纳入 CSS 规范草案,也未在任何浏览器引擎(Blink、WebKit、Gecko)中实现。搜索结果中出现的 field-sizing 多为混淆了以下概念:
- 误把实验性/私有前缀属性(如旧版 Safari 的
-webkit-field-sizing)当作通用属性(该前缀属性早已废弃,且仅影响表单控件内部盒模型,不控制高度自适应) - 与
resize、overflow、height: auto等真实可用属性记混 - 受某些 UI 框架文档误导(例如将组件级 props 名称直接当成了原生 CSS)
移动端文本框真正可行的高度自适应方案
原生 <textarea></textarea> 在移动端默认不自动撑高,需组合以下技术实现“输入越多、框越高”的效果:
- 用
min-height+max-height设定合理范围,避免无限拉伸 - 必须设置
height: auto或height: fit-content(后者在 iOS Safari 16.4+ 才稳定支持) - 关键:监听
input事件,动态重设textarea.style.height = 'auto'; textarea.style.height = textarea.scrollHeight + 'px'; - 为防 iOS Safari 光标错位,建议添加
scroll-margin-top或临时聚焦后scrollIntoView({ block: 'nearest' })
常见失效场景和绕过方式
即使代码逻辑正确,以下情况仍会导致高度“卡住”或跳动:
- 父容器设置了
overflow: hidden—— 会裁剪超出部分,且阻止scrollHeight准确计算;改用overflow: visible或移除 - 文本框含
padding但未在scrollHeight计算中扣除边框/内边距;推荐用getComputedStyle获取border-top-width和padding-top等并手动补偿 - 输入中文拼音过程中(未上屏的候选字),
scrollHeight可能滞后;可加setTimeout(..., 0)延迟读取 - CSS 中写了
box-sizing: border-box却忘了textarea默认是content-box,导致高度偏差;显式声明box-sizing: border-box更稳妥
真实项目里最易被忽略的是 iOS 键盘弹起时视口缩放和滚动锚点偏移——这会让自适应高度计算值瞬间失准,必须结合 visualViewport API 或 resize 事件做二次校正。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











