滚动条重排

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅程的每个阶段提供云产品。 立即开始使用 200 美元的免费额度!

这是我从 Mac 上的开发者那里听到过很多次的建议,我也想再说一遍:进入 **系统偏好设置 > 常规 > 显示滚动条** 并将其设置为 **始终显示**。 这不是为了你,而是为了网页。 问题在于,如果没有此设置,你将永远不会遇到滚动条触发的布局偏移,但其他所有开启此设置的用户都会遇到。 因为你希望在设计时避免出现这种卡顿现象,所以你应该自己使用此设置。

以下是 Stefan Judis 演示视口单位的使用可能是原因之一

在那里,100vw 导致水平溢出,因为垂直滚动条已经出现,占据了部分空间。 在某种程度上,这感觉**非常错误**,但这就是现状。

Stefan 指向 Kilian Valkhof 的文章,介绍了如何处理这个问题。 经典的解决方案

简单的解决方法是使用 width: 100% 代替。 百分比不包含滚动条的宽度,因此会自动适应。

如果无法这样做,或者你正在为其他元素设置宽度,请向周围的元素添加 overflow-x: hidden 或 overflow: hidden 以防止滚动条出现。

Kilian Valkhof“如何查找水平滚动条的原因”

我认为这些都是解决方法,因为它们都不是你想要做的事情的精确匹配。

幸运的是,有一个即将推出的基于规范的解决方案。 Bramus 掌握了全部信息

在网页上显示滚动条时的副作用是,内容的布局可能会根据滚动条的类型而改变。 scrollbar-gutter CSS 属性 —很快就会随 Chromium 一起发布 — 旨在让我们开发者更好地控制这一点。

Bramus Van Damme“使用 scrollbar-gutter CSS 属性防止滚动条引起的意外布局偏移”

听起来很有效,如果这成为 重置样式表 中非常常见的一行代码,我也不会感到惊讶

body {
  scrollbar-gutter: stable both-edges;
}

不过,这让我好奇……在整个页面级别处理这个问题时,是使用 <body> 还是 <html>? 在过去处理与滚动相关的事情时,这很奇怪。

我们真的能在所有浏览器中实现它吗? 谁知道呢。 看起来很有可能,但即使它接近实现,并且行为已规范化,我也会尝试使用它。 感觉对渐进增强友好。