text-size-adjust 必须作用于文本的祖先块级容器(如html、body或直接父容器),而非p、span等内联元素;需配合≥16px的font-size、完整前缀及真机验证才能生效。

text-size-adjust 没生效,大概率是加错地方了
这个属性必须作用在文本的**祖先块级容器**上,不是写在 p、span 或 input 上就能管用。浏览器只检查文本所在渲染上下文(即最近的块级祖先)的计算样式,p 本身不是上下文根——它只是内容载体。
常见错误写法:p { text-size-adjust: 100%; },真机一测就失效。正确做法是写在 html 或 body 上,确保覆盖所有动态插入节点;局部控制则应写在直接包裹文字的父容器上,比如 .footer-nav 或 #menu。
-
html是最稳妥的选择:它天然覆盖全部后代,包括 JS 动态插入的 DOM -
body在 iOS Safari 和微信中更可靠,但部分 Android WebView 对html不敏感,需实测 - 避免写
* { text-size-adjust: 100%; }:会干扰表单控件、按钮等需要响应系统字体设置的元素
写了 100% 还是被放大,可能是字号本身不达标
text-size-adjust: 100% 不是魔法开关,它只阻止浏览器对已渲染文本的二次干预。如果最终计算出的 font-size 小于 16px(尤其是 iOS Safari 的临界值),系统仍会强制放大整个行盒——这时你看到的“变大”根本不是 CSS 放大,而是底层渲染层绕过样式的重排。
- 务必确保目标元素的
font-size计算结果 ≥16px,且单位推荐用px或clamp(),避免rem/em因根字号抖动掉入临界区 - 输入框特别敏感:
input, textarea建议显式声明font-size: 16px; -webkit-text-size-adjust: 100%; - 真机调试时,打开 DevTools 的 Computed 面板,查
font-size实际值,别信编辑器里写的 1rem
前缀没写全,或被其他样式覆盖了
iOS Safari 目前仍只认 -webkit-text-size-adjust,标准属性 text-size-adjust 在它身上基本无效。而 Android Chrome 等现代浏览器已支持无前缀版本,但旧 WebView 可能只吃 -ms- 或 -moz-。
立即学习“前端免费学习笔记(深入)”;
- 生产环境建议四连写:
-webkit-text-size-adjust: 100%; -moz-text-size-adjust: 100%; -ms-text-size-adjust: 100%; text-size-adjust: 100%; - 微信 iOS 版必须加
!important,否则内联样式或第三方 SDK 容易覆盖;Android 微信 X5 内核则完全忽略该 CSS,得靠WeixinJSBridge.invoke('setFontSizeCallback', {fontSize: 0})补救 - 检查是否被
transform、zoom或font-size百分比继承链干扰——这些会重置文本渲染上下文,让text-size-adjust失效
误用 none 值,导致可访问性失效或兼容问题
text-size-adjust: none 在 iOS 13+ 已被废弃,部分版本会导致 input 双击无法放大选中文本;在 Android 上则可能彻底屏蔽系统「增大字体」设置,违反 WCAG 1.4.4。
- 全站写
none是高危操作,尤其对低视力用户不友好 -
100%才是当前平衡点:它允许用户通过系统设置或手势缩放,同时禁用浏览器启发式干预 - 若仅需局部禁用(如图标旁的微文案),可用
.icon-label { text-size-adjust: none; },但别扩散到全文本流
真正起效的关键,从来不是属性本身,而是它是否落在正确的祖先节点上、是否配合了达标的字号、是否扛住了运行时样式覆盖——这些环节漏掉一个,真机上就白忙活。


















