ios safari聚焦放大由computed font-size<16px触发,需确保input等可编辑元素最终渲染值≥16px,配合-webkit-text-size-adjust:100%同级设置,并验证真机computed值。

直接写 font-size: 16px 不一定生效,真正起效的是元素最终计算出的 font-size ≥ 16px —— Safari 在 focus 瞬间读的是 computed 值,不是 CSS 声明。
为什么写了 font-size: 16px 还会缩放
常见错误是只看代码,不查渲染结果。Safari 的缩放阈值是硬编码的 16px,且对浮点误差零容忍:
-
html { font-size: 10px }+input { font-size: 1.6rem }→ 理论 16px,但浏览器可能算出15.99px,仍触发缩放 - 父容器设了
font-size: 0.875em,子input没重置,继承后掉到 14px - 用了
clamp(14px, 4vw, 18px),在 320px 宽度下4vw = 12.8px - Vant 或 Ant Design Mobile 动态注入内联样式,把你写的
font-size覆盖了
哪些元素必须统一设置 font-size
iOS 不只检查 input 和 textarea,所有能唤起键盘的元素都可能触发放大,且必须同时覆盖 :focus 态:
- 显式覆盖:
input、textarea、select、带contenteditable属性的容器(如富文本编辑器根节点) - 必须加
:focus伪类规则,否则某些框架在 focus 时动态加 class 可能导致字号回落 - 兜底写法建议直接上
!important,避免被第三方样式覆盖
-webkit-text-size-adjust: 100% 怎么写才有效
这个属性不是“禁用缩放”,而是告诉 Safari:别对文本做二次字号重计算。但它只在 font-size ≥ 16px 时起效:
- 别写在
body上——会导致正文小字也变难读 - 必须和
font-size: 16px同级写在表单元素上,例如:input, textarea { font-size: 16px !important; -webkit-text-size-adjust: 100%; } - 不要用
none:none在 iOS 10+ 已废弃,部分版本反而失效 -
100%是最稳妥的选择,不影响可访问性
viewport meta 标签只是辅助,不能替代 font-size
<meta name="viewport" content="width=device-width, maximum-scale=1.0, user-scalable=no"> 单独存在没用:
- iOS 16+ 已部分忽略
maximum-scale=1.0,尤其在聚焦瞬间 -
user-scalable=no单独存在会被 Safari 忽略,必须搭配maximum-scale=1.0和minimum-scale=1.0 - 它不阻止 Safari 底层的字体检测逻辑,而
font-size ≥ 16px是硬编码阈值 - 真正关键的是 computed
font-size值,比猜配置靠谱得多
最容易被忽略的是:你改完 CSS 后没在真机上用 Safari 开发者工具检查 computed font-size —— 浮点误差、继承链、内联样式覆盖,这些都不会在预览里暴露,只在真机 focus 瞬间爆发。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











