对于基于 webkit 的浏览器(apple safari、google chrome、opera),您可以使用简单的 CSS 摆脱滚动条:
.scrollable-container-class::-webkit-scrollbar {
height: 0;
width: 0;
}
这是最简单的,但不是跨浏览器的方式。不要忘记(仍然蹩脚的)IE 和 Firefox。如果您可以在容器顶部使用空填充,则可以将可滚动容器放入具有溢出的另一个容器中:隐藏;可滚动容器应该有 position:relative 并向下移动 17px(通常浏览器的滚动条高度/宽度)。例如here。
如果您使用这种方式,您应该知道缩放页面可能会使您的滚动条可见。不同的浏览器/操作系统也可能使用不同的滚动条高度/宽度。例如,Apple Mac 滚动条位于内容上方,因此要在 Mac 可滚动容器上隐藏滚动条,底部应该有填充。
所以,最好的方法是结合这两种方法:对于基于 webkit 的浏览器不需要做任何事情,因为我们可以用简单的 CSS 来做 - IE 和 FF 会忽略未知的 CSS 选择器。对于 IE 和 FF,我们会将内容包装到包装器中并向上移动包装器以补偿内容移动(将内容留在原处)。例如here。接下来是使用 JS 计算滚动条高度并为包装器和内容设置顶部偏移量(不是使用 CSS,而是使用 JS,因为它是动态的)。我正在使用下一个函数来获取浏览器滚动条的高度/宽度:
function getBrowserScrollSize(){
var css = {
"border": "none",
"box-sizing": "content-box",
"height": "200px",
"margin": "0",
"padding": "0",
"width": "200px"
};
var inner = $("<div>").css($.extend({}, css));
var outer = $("<div>").css($.extend({
"left": "-1000px",
"overflow": "scroll",
"position": "absolute",
"top": "-1000px"
}, css)).append(inner).appendTo("body")
.scrollLeft(1000)
.scrollTop(1000);
var scrollSize = {
"height": (outer.offset().top - inner.offset().top) || 0,
"width": (outer.offset().left - inner.offset().left) || 0
};
outer.remove();
return scrollSize;
}
剩下的最后一件事 - 缩放浏览器。要修复它,您应该为窗口调整大小事件绑定处理程序并检查滚动条大小是否已更改 - 如果已更改 - 浏览器已放大/缩小,您应该为您的内容和包装器更新顶部偏移量。
请注意,FF 在 Mac 下工作并使用 OS 滚动条(超出内容),FF 不支持使用 CSS 隐藏/样式化滚动条。我对如何隐藏它的想法很少,但还没有尝试过。我在jQuery Scrollbar插件中使用了这些隐藏滚动条的概念。