#优质博文 #前端 #新动态 #Chrome #CSS
从 Chrome 145 开始,在满足特定条件时,
Using 100vw is now scrollbar-aware (in Chrome 145+, under the right conditions)
[以下是方便搜索索引的大纲(AI 生成),请读原文]
Bramus View more posts
从 Chrome 145 开始,在满足特定条件时,
100vw 终于能够自动减去滚动条宽度,解决了长期以来因视口单位导致的网页多余水平滚动问题。该改进同样适用于 vh(对应水平滚动条)以及视口单位的小、大、动态变体(sv*, lv*, dv*)Using 100vw is now scrollbar-aware (in Chrome 145+, under the right conditions)
AI 摘要:本文介绍了 Chrome 145 及更高版本对 CSS 视口单位(Viewport Units,如 vw、vh )的一项重大改进:当根元素 html 设置为 overflow: scroll 或 scrollbar-gutter: stable 时,100vw 会自动扣除滚动条所占的空间。这一改进通过 CSS 工作组(CSSWG)的决议,解决了传统 100vw 导致不必要水平溢出的顽疾,同时通过限制生效条件规避了布局死循环(Cycles)问题。
[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 核心改进与生效条件
• Chrome 145+ 版本开始,视口单位将能够“感知”滚动条(Scrollbar-aware)。
• 只有在 html 元素上强制显示滚动条(overflow[-y]: scroll)或预留滚动条空间(scrollbar-gutter: stable)时,该特性才会生效。
• 该改进同样适用于 vh(对应水平滚动条)以及视口单位的小、大、动态变体(sv*, lv*, dv*)。
2. 视口单位的历史局限性
• 传统视口单位(Viewport Units)在计算时不考虑经典滚动条(Classic Scrollbars)的宽度。
• 设置 width: 100vw 时,其宽度包含滚动条,导致在有垂直滚动条的情况下,页面会出现不必要的水平滚动条。
3. 布局死循环(Cycles)的挑战
• 解释了为什么不能简单地在所有情况下减去滚动条宽度:这会导致“增加滚动条 -> 减小视口宽度 -> 内容重新布局 -> 滚动条消失”的死循环。
• 通过限制在滚动条“无条件存在”或“预留空间”的情况下生效,可以有效规避此循环。
4. 行业标准与 Web 兼容性
• 详细介绍了 CSS 工作组(CSSWG)关于此问题的讨论和决议历程。
• 引用 HTTP Archive 的数据分析,证明此项改动对现有网站的破坏性极低(仅约 0.0003% 的网站可能受到影响)。
• 强调了目前仅 Chromium 系浏览器支持此特性,尚无纯 CSS 的特性检测方法。
5. 最佳实践建议
• 建议开发者在 CSS Reset(样式重置)中为 html 根元素添加 scrollbar-gutter: stable。
• 相比 overflow-y: scroll,scrollbar-gutter: stable 可以在不强制显示滚动条背景的情况下激活“感知滚动条”的视口计算特性。
Bramus View more posts