content-visibility: auto 必须搭配 contain-intrinsic-size 使用,否则会导致滚动抖动、高度塌陷和布局偏移;该属性预设占位尺寸以保障布局稳定性,取值需依据内容类型合理估算,且不支持旧版浏览器。
能延迟渲染屏幕外内容,但单独加这行几乎必然导致滚动抖动、高度塌陷或闪入——它必须搭配
才能稳定工作。
为什么
必须配
浏览器对
元素默认按高度 0 处理布局:它跳过样式计算和绘制,但滚动容器仍需知道“这部分内容本该占多高”。不设
就等于告诉浏览器“我也不知道它多高”,结果就是:
滚动条突然收缩再弹出
快速滚动时内容“闪入”(layout shift)
父容器高度塌陷,影响 sticky 定位或 footer 粘底
这个值不是“建议设置”,而是强制前提。留空、写
或完全不写,等同于没设。
怎么取值才稳妥
它预估的是元素**未渲染时的占位尺寸**,不是真实内容高度。取值错误比不设更危险:
立即学习
“
前端免费学习笔记(深入)
”;
单行固定高列表(如消息流):
卡片类(宽高比相对固定):
(Chrome 122+ 支持双值写法)
高度差异大?取所有子项最小高度的 1.2 倍,避免留白过大
富文本/动态展开区域?初始设保守值(如
),JS 加载完后用
或重设新值
注意:
属性会覆盖
的高度设定,慎用显式 height。
使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
下载
哪些场景加了反而更卡或出错
不是全局开关,以下情况容易翻车:
子元素含
:fixed 元素会脱离视口定位上下文,飘到页面左上角
依赖
或
:未渲染区域不会触发回调,需在
切换后手动补发事件
父容器有
且子元素需溢出展示:content-visibility 强制 layout containment,直接截断溢出内容
SSR 页面首屏直出 DOM:服务端没 JS,用户可能看到空白区块;应结合 hydration 状态控制初始值(如 SSR 时设
,hydration 后切为
)
Firefox 和 Safari(含 iOS)至今不支持
,上线前务必用
包裹,或 UA 检测降级。
和
别混用
两者视觉效果相似,但底层行为完全不同:
:DOM 还在,tabindex 仍生效,
返回 {x,y,width,height} 但
为 0;适合频繁切换的广告位、离线面板
:DOM 彻底脱离渲染树,不占空间,也不响应任何交互或尺寸查询;适合永久隐藏或条件移除
表单控件要特别小心:
下的
仍在 tab 顺序里,但无法聚焦——行为不一致,生产环境慎用
真正容易被忽略的点是:读屏器会完全忽略
的内容,而
模式下屏幕外内容仍可被查找、选中、聚焦——这对无障碍至关重要,不能只看视觉表现。
content-visibility: autocontain-intrinsic-sizecontent-visibility: autocontain-intrinsic-sizecontent-visibility: autocontain-intrinsic-sizeautocontain-intrinsic-sizecontain-intrinsic-size: 64pxcontain-intrinsic-size: 300px 240px800pxelement.style.containIntrinsicSize = 'auto'heightcontain-intrinsic-sizecontent-visibility: autoposition: fixedIntersectionObserverResizeObserverauto → visibleoverflow: hiddencontent-visibility: visibleautocontent-visibility@supports (content-visibility: auto)content-visibility: hiddendisplay: nonecontent-visibility: hiddengetBoundingClientRect()offsetHeightdisplay: nonecontent-visibility: hiddencontent-visibility: hiddenauto