您可能知道,页面居中技术是向外部 div 添加自动左右边距。
#page-wrap {
margin: 0 auto;
}
此技术的缺点之一是,当在具有多个页面的网站上使用时,在需要滚动条的页面和不需要滚动条的页面之间来回切换时,布局可能会出现轻微的“跳动”。这是因为浏览器窗口中滚动条的宽度约为 16px,导致内容区域变窄,而包裹 div 在较窄的内容区域中重新居中,从而导致跳动。
消除此跳动的一种方法是,无论页面是否需要,都强制在每个页面上显示滚动条。这可能会让一些纯粹主义者感到恼火,但我认为这是一个不错的解决方案。
这是一种实现方法,它强制页面始终比浏览器窗口略高,从而强制出现右侧滚动条。
html {
height: 100%;
margin-bottom: 0.01em;
}
这是一个好主意,但它似乎在 Firefox 中无法正常工作。
以下是一种使用令人讨厌且无意义的 hack 强制仅显示右侧滚动条的方法。
#scroll {
position: absolute;
top: 0;
bottom: -0.1px;
width: 1em;
z-index: -1;
}
然后只需在您的 HTML 中包含一个带有“scroll” id 的空 div。就像我说的,这是一种比较糟糕的方法,这里有一个更简洁的方法。
html {
height: 102%;
}
以下是一种解决方案,它有效地强制同时显示水平和垂直滚动条。
html {
overflow: scroll;
}
您可以在 此示例 中看到此方法的工作效果。如果我们可以通过将 overflow-y 设置为 scroll 来仅获得垂直滚动条,那就太好了,但它在 Firefox 中仍然不起作用。更新:实际上,我已经明白了。将 overflow-y 设置为 scroll **确实有效**,并且在 Firefox、Safari 和 IE 6 中均有效,这使其成为**最佳解决方案**。
html {
overflow-y: scroll;
}
怎么样
html { overflow: -moz-scrollbars-vertical !important; }
适用于 Firefox?
这在 Firefox 中运行良好。
html { min-height: 100%; margin-bottom: 1px; }
@Regis:该解决方案在 Firefox 中效果很好,谢谢!不过它实际上**仅**在 Firefox 中有效,因此我们无论如何都必须将其与其他技术结合使用。
@chipgrafx:是的,这在 Firefox 中也适用!但是 IE 不会遵守 min-height,因此我认为最好的解决方案是将 html 的高度设置为超过 100%,这是最可靠的方法。
我一直喜欢使用一堆换行符来创建滚动条 :)
我当然是在开玩笑,不错的解决方案。
好的建议,但是为什么要使用这种技术来居中您的网站?我想不出很多需要使用这种技术的情况。通常使用绝对或相对定位以及一些负边距就可以解决问题。谁能告诉我实际需要使用这种技术的情况?
不是在挑刺,只是好奇 :)
@Andrew:实际上,大量网站都使用这种精确的技术来居中其内容。Digg.com、Apple.com、Newsvine.com……我认为这是迄今为止最常见的内容居中技术。更不用说 CSS-Tricks.com 也使用它,这足以证明这一点=)
一种更简单的方法,它适用于所有浏览器。
html {
min-height:100%;
margin-bottom:1px
}
哎呀……我完全忘记了 IE/min-height 的事情。*拍额头*
此外,请记住,旧版浏览器不支持使用自动左右边距进行居中。您需要在要居中的元素周围的容器上强制执行 text-align: center;。
请记住,在居中元素(容器内)上将 text-align 重置为“text-align: left;”,因为 text-aligns 是继承的。
这是关于此主题的另一个不错的文章 http://www.csskarma.com/articles/dummy_scrollbar/
嗨,这个网站看起来很棒。它是 WordPress 模板还是为网站预先制作的?
Steve
或者只需执行
html {
height:100.1%;
}
简单哈哈
> 它如果我们可以通过将 overflow-y 设置为 scroll 来仅获得垂直滚动条,那就太好了,
> 但它在 Firefox 中仍然不起作用。
>
实际上,该解决方案在 Firefox 中**确实**有效,在我看来它是最简洁的。
代码
html { overflow-y: scroll; }
我在 Firefox 2 和 3.0b1 的一个简单测试用例中尝试了此方法,两个版本都显示了垂直滚动条。
实际上,IE 是否遵守 min-height 在此用法中并不重要。您所做的只是为**非 IE**浏览器强制在右侧显示滚动条。IE 默认情况下已经包含了侧边栏的空间,因此您不会出现水平跳动。
而且我不太明白为什么人们认为这与实际居中内容有任何关系。Chris(以及其他人在争论)所讨论的是如何在 Firefox 中消除页面之间导航时可能出现的轻微水平跳动,其中内容在某些页面上位于折叠上方,而在其他页面上位于折叠下方。明白了吗?
@Daniel Holbert:您说得非常对,我已经更新了文章,因为我现在认为这是最佳方法。
@chipgrafx:您也说得非常对,我没有考虑到在 IE 中永远不会出现跳动,因此它实际上不需要像平时那样被单独列出。
Opera 怎么样?overflow-y:scroll 在其中不起作用。
@Alex:啊……您说得对,它在 Opera 中不起作用,我刚刚测试了一下=P。
我认为我们可能需要回到将高度设置为 >100% 作为最佳跨浏览器解决方案。
Overflow-y: scroll 在我测试的所有浏览器中都适用……好技巧!
确实是一个好建议..
我以前从未使用过它,但它可能非常有效,这个问题以前没有困扰过我,是否有任何客户对此抱怨过?
这太棒了,Chris,谢谢!=)
非常感谢!
html {overflow-y: scroll;} 对 Opera 不起作用……刚刚发现。
哦,而且刚刚发现它已经被提及了……好吧好吧 :-)
@Lucy,我在 屏幕截图 #4 中介绍了这一点。
非常感谢您发布这篇文章!我以为自己要疯了,我花了无数时间,几天,几周,试图检查每一行 CSS 代码,以找出哪里出了问题。太感谢了!!
我非常喜欢您的解决方案,以及您努力避免使用 hack,转而使用更干净、更符合标准的代码的方式。
干杯 :)
它在苹果 Safari 上不起作用,我遇到了这个问题。
它在 Safari 上不起作用…… :(
这是一个很棒的 CSS 提示,我无法告诉你
html {
有多少次拯救了我!overflow-y: scroll;
}
各位,在您的布局中添加一个父级包装 DIV,并添加以下 CSS
.mainWrapper { height:100%;
overflow-y:auto;}
.mainWrapper { height:100%;
overflow-y:scroll;}