虽然您的 Gizmodo 示例使用了额外的脚本来处理侧边栏(竖直滚动条)(在某些浏览器中甚至无法正常工作),但这种效果完全可以使用纯 CSS 实现,而且并不像乍一看那么难。
因此,您需要:
- 水平居中的布局,可能会随着不同浏览器窗口大小而变宽或变窄
- 左侧的主要内容由浏览器的主滚动条垂直滚动
- 右侧的侧边栏固定在浏览器窗口顶部,可以单独滚动,只有当鼠标悬停在上面时才显示其滚动条。滚动到侧边栏末尾时,将采用窗口的滚动条。
查看此 演示 fiddle,它实现了所有这些功能。
样式表:
html, body, * {
padding: 0;
margin: 0;
}
.wrapper {
min-width: 500px;
max-width: 700px;
margin: 0 auto;
}
#content {
margin-right: 260px;
}
#overlay {
position: fixed;
top: 0;
width: 100%;
height: 100%;
}
#overlay .wrapper {
height: 100%;
}
#sidebar {
width: 250px;
float: right;
max-height: 100%;
}
#sidebar:hover {
overflow-y: auto;
}
#sidebar>* {
max-width: 225px;
}
并且标记:
<div class="wrapper">
<div id="content">
</div>
</div>
<div id="overlay">
<div class="wrapper">
<div id="sidebar">
</div>
</div>
</div>
在Win7的IE7,IE8,IE9,Opera 11.50,Safari 5.0.5,FF 5.0和Chrome 12.0上进行了测试。
我假设主内容具有流式宽度,而侧边栏具有静态宽度,但两者都可以像您喜欢的那样完全流动。如果您想要一个静态宽度,请参见 此演示fiddle,这会使标记更加简单。
更新
如果我正确理解您的评论,那么您想要防止鼠标悬停在侧边栏上时主内容的滚动。为此,侧边栏可能不是主内容的滚动容器(即浏览器窗口)的子项,以防止滚动事件冒泡到其父级。
我认为这个新的演示fiddle可以满足您的需求:
<div id="wrapper">
<div id="content">
</div>
</div>
<div id="sidebar">
</div>