流式布局:避免由于垂直滚动条导致页面宽度发生变化

13

我已经为我的网站实现了流体布局。我已将body标签的宽度设为100%。

<html>
<head>
</head>

<body>
    <div id="container">
        some content
    </div>
</body>

body
{
   margin: 0;
   padding: 0;
   width: 100%;
}
一些页面会出现垂直滚动条,导致 body 标签的宽度减少了 16 像素。我需要设置 body 标签的宽度,使得滚动条的显示不会影响它。
我已经尝试了下面的方法,但在 Firefox 9 上无效:

 body{
    width: -moz-calc(100% - 16px);
}
请问有没有什么方法可以实现这个目标?
3个回答

5

解决这个问题的一种方法是确保始终存在滚动条。然后,您可以放心地为页面设置样式,而不必担心它们会左右移动。

html,body
{
 height:101%;
}

您还可以执行以下操作:

html {
       overflow-y: scroll;
}

我认为溢出方法在Opera浏览器中不起作用。


1
谢谢。这确实解决了问题,但即使没有滚动的必要,也有滚动条的想法对我来说听起来并不好。除了 JS 之外还有其他方法吗? - Nilesh
我目前脑海中没有其他方法,但我总是喜欢有滚动条,特别是如果有些页面需要滚动而有些不需要。我更喜欢有滚动条而不是一个移动的页面。 - Jamie Dixon
好的 :) 我能想到的另一种方法是使用JS设置宽度。让我们看看是否有人能提出解决这个问题的方法。 - Nilesh
我认为使用 min-height 比强制使用给定百分比的 height 更好。 - danijar

0

可能在这个问题被提出的时候还不可能,但现如今你可以这样做:

body {
    width: 100vw;
}

唯一可能的缺点是,当出现滚动条时,最右边的16像素将被覆盖,但如果您的项目符合以下任何条件,则实际上您可能希望这样:

  • 除非有足够的内容填充空间,否则您真的不希望您的页面在垂直方向上溢出,或者您不喜欢看起来不必要的滚动条
  • 最右侧的16个像素没有覆盖任何重要内容,并且在每个需要扩展视口宽度并在所有页面上看起来相同的页面上具有相同的背景图像。

-2

你不应该使用 calc 函数。因为它在 Chrome 中没有实现。

如果你将宽度设置为 100%,那么你的容器不会受到垂直滚动条的影响。它始终是 100% 的宽度。无论有没有滚动条,它都会填充整个视口的 100%。


我已经比较了具有滚动条和没有滚动条的页面的主体宽度。确切的差异为16像素。我使用FF9和Chrome 17进行了测试。 - Nilesh
是的,确实有这样的区别,但您的页面仍然在可见视口(视口宽度-滚动条宽度)的100%中显示。如果您完全缩放了页面,则无论是否显示滚动条,都不会出现问题。所有大小都将与可见视口匹配。这就像我稍微调整浏览器宽度一样。 - Sven Bieder
1
是的,我明白你的意思。现在问题是,有些页面显示垂直滚动条,而有些页面则没有。因此,如果用户快速切换页面,看起来网站布局的宽度会略微改变。(因为滚动条占用的空间)我正在尝试解决这个问题。 - Nilesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接