确保所有可聚焦元素的最终计算字号≥16px才有效:safari依据computed值而非css声明,需对input、textarea、select、[contenteditable]等统一设font-size:16px!important并配-webkit-text-size-adjust:100%。

直接写 font-size: 16px 不一定管用,真正起效的是确保所有可聚焦元素的最终计算字号 ≥ 16px —— Safari 看的是 computed 值,不是你写的那行 CSS。
为什么写了 font-size: 16px 还会放大
常见错误是只信声明,不查渲染结果:
-
html根字体被第三方库设成10px,再写input { font-size: 1.6rem }算出来只有16px,但浮点误差可能变成15.99px,仍触发放大 - 父容器用了
font-size: 0.875em,子input没重置,继承后掉到14px -
clamp(14px, 4vw, 18px)在320px宽度下算出12.8px - Vant 或 Ant Design Mobile 动态注入内联样式,把你写的
font-size覆盖了
哪些元素必须统一设置 font-size
iOS 不只检查 input 和 textarea,以下所有元素都可能触发放大:
-
select(下拉框) - 带
contenteditable属性的容器(如富文本编辑器根节点) - 某些框架封装的输入组件(比如 Vue 的
v-model绑定的div[contenteditable])
推荐兜底写法:
input, textarea, select, [contenteditable] {
font-size: 16px !important;
}
input:focus, textarea:focus, select:focus, [contenteditable]:focus {
font-size: 16px !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:iOS 10+ 已废弃,部分版本反而失效
viewport meta 标签只是辅助,不能替代 font-size
<meta name="viewport" content="width=device-width, maximum-scale=1.0, user-scalable=no"> 单独写没用:
- iOS 16+ 已部分忽略
maximum-scale=1.0,尤其在聚焦瞬间 - 它不阻止 Safari 底层的字体检测逻辑,而
font-size ≥ 16px是硬编码阈值 -
user-scalable=no单独存在会被 Safari 忽略,必须搭配maximum-scale=1.0和minimum-scale=1.0
真正关键的是 font-size 值,比猜配置靠谱得多。最易被忽略的点是:动态内容、框架组件运行时注入的样式,可能覆盖你写的规则 —— 务必用开发者工具的「Computed」面板验证最终值,而不是只看 Styles 面板里的声明。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











