iOS Safari输入框聚焦放大是可访问性策略,非bug;必须确保input、textarea等元素computed font-size≥16px,配合:focus伪类、!important及-webkit-text-size-adjust:100%,并验证真机Computed值。

页面在 iOS 上因输入框聚焦而放大,根本不是 bug,而是 Safari 强制执行的可访问性策略:只要 input 或 textarea 的最终渲染 font-size 小于 16px,就会临时放大整个视口。靠 maximum-scale=1.0 已基本失效,必须从字号计算和聚焦态样式入手。
为什么写了 font-size: 16px 还会放大
因为 Safari 看的是 computed 值,不是你写的那行 CSS:
- 父级设了
font-size: 0.875rem,根元素:root又是10px,子input实际只有8.75px - 用了
clamp(14px, 4vw, 18px),在 320px 宽屏下4vw = 12.8px,触发放大 - Vant/Ant Design Mobile 等 UI 库动态注入内联样式,覆盖了你的
font-size - 没加
:focus伪类,框架在聚焦时动态加 class,导致字号回落
必须同时生效的 CSS 规则
只写 input { font-size: 16px } 不够,要覆盖所有可聚焦文本容器,并锁定聚焦态:
- 显式声明所有目标:
input、textarea、select、[contenteditable] - 必须带
:focus,且用!important防覆盖:input:focus { font-size: 16px !important; } - 搭配
-webkit-text-size-adjust: 100%,但仅在同级声明时有效:input, textarea { font-size: 16px !important; -webkit-text-size-adjust: 100%; } - 避免写
none—— iOS 10+ 已废弃,100%是唯一稳定值
真机调试时怎么看实际字号
别信编辑器里的 CSS 声明,直接看 Safari 开发者工具的 Computed 面板:
立即学习“前端免费学习笔记(深入)”;
- 用 USB 连接真机,在 Safari「开发」菜单里选中设备和页面
- 右键点击输入框 →「检查元素」→ 切换到「Computed」标签页
- 找到
font-size行,确认数值是 ≥16 的绝对像素值(如16px、16.02px),不是1.0em或1rem - 特别注意
textarea,它常被忽略,但同样触发放大
viewport meta 标签现在该怎么写
user-scalable=no 和 maximum-scale=1.0 在 iOS 16+ 和多数 Android WebView 中已被弱化或忽略,还违反 WCAG 可访问性标准:
- 必须保留
width=device-width和initial-scale=1.0,缺一不可 - 删掉
maximum-scale和user-scalable,改用touch-action: manipulation控制双指缩放 - 确保它在
<head>最顶部,不能动态插入,也不能重复声明 - 如果页面仍缩放,大概率是内容溢出:查
min-width、white-space: nowrap、未清除浮动等隐藏问题
最容易被忽略的,是字号的继承链和浮点计算误差——比如 1.143rem × 14px = 15.99px,Safari 就认作



















