用contain: layout paint可有效收窄局部重绘范围,因二者协同阻断布局影响链与绘制扩散链,但需容器尺寸稳定、子元素不越界且浏览器支持。
直接用
contain: layout paint
告诉浏览器:“这个容器内部自己负责布局和绘制,外部变化别牵连它,内部变化也别跑出去”——这是收窄局部
重绘
影响范围最有效、最常用的方式。
为什么 layout + paint 必须一起用
只设
,子元素改颜色或透明度仍可能触发父级样式重算;只设
,子元素尺寸一变(比如文字换行、图片加载),就可能撑开容器,导致外部布局重排。两者配合,才能真正切断“布局影响链”和“绘制扩散链”。
阻断子树对父级/兄弟节点位置与尺寸的干扰
强制内容裁剪,并让浏览器跳过不可见区域的绘制
缺一不可:真实组件中,单独启用任一值都达不到预期隔离效果
关键前提不能漏:尺寸要稳、内容别越界
Containment 不是魔法开关,它依赖浏览器对容器边界的可信判断。一旦条件不满足,Chrome 会静默降级(比如退化为仅
),重绘范围立马扩大。
容器必须有明确宽高:推荐显式写
和
,或用
+
避免
或
—— 这些会让尺寸依赖内容,破坏可预测性
子元素不能逃逸:
默认参照视口,会突破容器边界;若必须用,需确保其包含块在容器内,或加
强制裁剪
JS 动态设置时的实操要点
不是加了 style 就立刻生效,时机和配套操作决定成败。
使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
下载
立即学习
“
前端免费学习笔记(深入)
”;
插入大量子节点前先设
,避免插入过程触发父级重排
折叠面板收起后建议清空
(设为空字符串),否则
可能锁死高度,阻碍收缩动画
监听
时,只对已知固定尺寸的区域(如顶部工具栏)补
,动态宽度侧边栏不能加
验证是否生效别只看
,打开 DevTools 的 Paint Flashing,观察重绘区域是否真的被框定在容器内
慎用 strict 和 size:强约束带来强风险
等价于
,隔离最强,但要求最严——稍有不慎反而拖慢性能。
要求浏览器“绝对相信”容器尺寸永不变化,必须同步声明
和
(哪怕用 JS 读取当前值再写回)
含
或
的动画组件,加
可能强制创建额外合成层,增加内存与合成开销
Flex/Grid 容器内的子项,
无法切断轴向分配逻辑,此时加
不仅无效,还可能引发意外交互
contain: layoutcontain: paintlayoutpaintstyle paintwidthheightaspect-ratiowidth: 100%width: fit-contentmin-height: max-contentposition: fixedcontain: paintelement.style.contain = 'layout paint'containcontain: sizeresizelayout paintsizegetComputedStylecontain: strictlayout paint style sizesizewidthheighttransformwill-changestrictcontain: layoutstrict