CSS可以用来隐藏滚动条吗?如何实现这个效果?
WebKit支持滚动条伪元素,可以使用标准CSS规则隐藏它们:
#element::-webkit-scrollbar {
display: none;
}
如果您想隐藏所有滚动条,请使用
::-webkit-scrollbar {
display: none;
}
关于恢复,我不确定 - 这样确实可以解决问题,但可能有更好的方法:
::-webkit-scrollbar {
display: block;
}
您当然可以始终使用 width: 0
,然后再通过 width: auto
轻松恢复,但我不喜欢滥用 width
进行可见性调整。
Firefox 64 现在默认支持实验性的 scrollbar-width 属性(63 需要设置配置标志)。要在 Firefox 64 中隐藏滚动条:
#element {
scrollbar-width: none;
}
要查看您当前的浏览器是否支持伪元素或 scrollbar-width
,请尝试此代码段:
.content {
/* These rules create an artificially confined space, so we get
a scrollbar that we can hide. They are not directly involved in
hiding the scrollbar. */
border: 1px dashed gray;
padding: .5em;
white-space: pre-wrap;
height: 5em;
overflow-y: scroll;
}
.content {
/* This is the magic bit for Firefox */
scrollbar-width: none;
}
.content::-webkit-scrollbar {
/* This is the magic bit for WebKit */
display: none;
}
<div class='content'>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris eu
urna et leo aliquet malesuada ut ac dolor. Fusce non arcu vel ligula
fermentum sodales a quis sapien. Sed imperdiet justo sit amet venenatis
egestas. Integer vitae tempor enim. In dapibus nisl sit amet purus congue
tincidunt. Morbi tincidunt ut eros in rutrum. Sed quam erat, faucibus
vel tempor et, elementum at tortor. Praesent ac libero at arcu eleifend
mollis ut eget sapien. Duis placerat suscipit eros, eu tempor tellus
facilisis a. Vivamus vulputate enim felis, a euismod diam elementum
non. Duis efficitur ac elit non placerat. Integer porta viverra nunc,
sed semper ipsum. Nam laoreet libero lacus.
Sed sit amet tincidunt felis. Sed imperdiet, nunc ut porta elementum,
eros mi egestas nibh, facilisis rutrum sapien dolor quis justo. Quisque
nec magna erat. Phasellus vehicula porttitor nulla et dictum. Sed
tincidunt scelerisque finibus. Maecenas consequat massa aliquam pretium
volutpat. Duis elementum magna vel velit elementum, ut scelerisque
odio faucibus.
</div>
(需要注意的是,这并不是问题的正确答案,因为它也隐藏了水平线,但当谷歌把我带到这里时,这就是我在寻找的,所以我想我还是会发布它。)
当你询问“浏览器的滚动条是否可以被移除而不是简单地隐藏或伪装”时,每个人都会说“不可能”,因为没有办法以符合标准且跨浏览器兼容的方式从所有浏览器中移除滚动条,还有整个可用性的争论。
然而,如果您不允许网页溢出,就有可能防止浏览器产生并显示滚动条。
这意味着我们必须主动替代浏览器通常为我们执行的相同行为,并告诉浏览器:“谢谢你的帮助,但我们不需要了。”我们可以避免滚动(完全可行),并在我们创建和控制的元素内滚动。
创建一个具有overflow hidden属性的div。检测用户尝试滚动但无法滚动的情况,因为我们已经禁用了overflow: hidden的浏览器滚动功能。当发生这种情况时,使用JavaScript将内容向上移动。从而创建自己的滚动而不是浏览器默认的滚动,或者使用像iScroll这样的插件。
为了全面而言,以下是所有操纵滚动条的厂商特定方式:
*这些属性从未成为CSS规范的一部分,也从未被批准或添加供应商前缀,但它们在Internet Explorer和Konqueror中有效。这些也可以在每个应用程序的用户样式表中本地设置。在Internet Explorer中,您可以在“辅助功能”选项卡下找到,在Konqueror中则在“样式表”选项卡下找到。
body, html { /* These are defaults and can be replaced by hexadecimal color values */
scrollbar-base-color: aqua;
scrollbar-face-color: ThreeDFace;
scrollbar-highlight-color: ThreeDHighlight;
scrollbar-3dlight-color: ThreeDLightShadow;
scrollbar-shadow-color: ThreeDDarkShadow;
scrollbar-darkshadow-color: ThreeDDarkShadow;
scrollbar-track-color: Scrollbar;
scrollbar-arrow-color: ButtonText;
}
-ms-scrollbar-base-color
-ms-scrollbar-face-color
-ms-scrollbar-highlight-color
-ms-scrollbar-3dlight-color
-ms-scrollbar-shadow-color
-ms-scrollbar-darkshadow-color
-ms-scrollbar-base-color
-ms-scrollbar-track-color
Internet Explorer提供了scroll
属性,用于设置是否禁用或启用滚动条;它还可以用于获取滚动条位置的值。
使用Microsoft Internet Explorer 6及更高版本时,当使用!DOCTYPE
声明指定符合标准的模式时,该属性适用于HTML元素。当未指定符合标准的模式时,如早期版本的Internet Explorer一样,该属性适用于BODY
元素,而不是HTML
元素。
值得注意的是,在使用.NET时,Presentation框架中的System.Windows.Controls.Primitives
中的ScrollBar类负责渲染滚动条。
http://msdn.microsoft.com/en-us/library/ie/ms534393(v=vs.85).aspx
与滚动条定制相关的 WebKit 扩展包括:
::-webkit-scrollbar {} /* 1 */
::-webkit-scrollbar-button {} /* 2 */
::-webkit-scrollbar-track {} /* 3 */
::-webkit-scrollbar-track-piece {} /* 4 */
::-webkit-scrollbar-thumb {} /* 5 */
::-webkit-scrollbar-corner {} /* 6 */
::-webkit-resizer {} /* 7 */
这些伪类可以与其他伪选择器结合使用:
:horizontal
– 伪类水平应用于任何具有水平方向的滚动条部件。:vertical
– 伪类垂直应用于任何具有垂直方向的滚动条部件。:decrement
– 减量伪类应用于按钮和跟踪器部件。它指示在使用时(例如,垂直滚动条上的向上按钮,水平滚动条上的向左按钮),按钮或跟踪器部件是否会减少视图的位置。:increment
– 增量伪类应用于按钮和跟踪器部件。它指示在使用时(例如,垂直滚动条上的向下按钮,水平滚动条上的向右按钮),按钮或跟踪器部件是否会增加视图的位置。:start
– 开始伪类应用于按钮和跟踪器部件。它指示对象是否放置在滑块之前。:end
– 结束伪类应用于按钮和跟踪器部件。它指示对象是否放置在滑块之后。:double-button
– 双按钮伪类应用于按钮和跟踪器部件。它用于检测按钮是否是一对在滚动条同一端的按钮之一。 对于跟踪器部件,它指示轨道部件是否与一对按钮相邻。:single-button
– 单按钮伪类应用于按钮和跟踪器部件。 它用于检测按钮是否在滚动条末端独自存在。 对于跟踪器部件,它指示轨道部件是否与一个单一按钮相邻。:no-button
– 应用于跟踪器部件并指示是否在滚动条的边缘完成,即该端没有任何按钮。:corner-present
– 应用于所有滚动条部件并指示是否存在滚动条角。:window-inactive
– 应用于所有滚动条部件并指示包含滚动条的窗口当前是否处于活动状态。(在最近的夜间版本中,此伪类现在也适用于 ::selection。我们计划将其扩展为与任何内容一起使用并将其提议为新的标准伪类。)这些组合的例子
::-webkit-scrollbar-track-piece:start { /* Select the top half (or left half) or scrollbar track individually */ }
::-webkit-scrollbar-thumb:window-inactive { /* Select the thumb when the browser window isn't in focus */ }
::-webkit-scrollbar-button:horizontal:decrement:hover { /* Select the down or left scroll button when it's being hovered by the mouse */ }
addWindowScrollHandler public static HandlerRegistration addWindowScrollHandler(Window.ScrollHandler handler)
添加一个 Window.ScrollEvent 处理程序 参数: handler - 处理程序 返回: 返回处理程序注册 [来源](http://www.gwtproject.org/javadoc/latest/com/google/gwt/user/client/Window.html#addWindowScrollHandler(com.google.gwt.user.client.Window.ScrollHandler) )
Mozilla有一些扩展可以操作滚动条,但是它们都不建议使用。
-moz-scrollbars-none
建议使用overflow:hidden代替。-moz-scrollbars-horizontal
类似于overflow-x-moz-scrollbars-vertical
类似于overflow-y-moz-hidden-unscrollable
仅在用户配置文件设置内部起作用。禁用滚动XML根元素,并禁用使用箭头键和鼠标滚轮滚动网页。
据我所知,这并不是特别有用,但值得注意的是,在Firefox中控制是否显示滚动条的属性为(参考链接):
正如之前在其他答案中提到的那样,这里有一个足够自我解释的插图。
我只是出于好奇,想学习滚动条的起源,以下是我找到的最佳参考资料。
在HTML5规范草案中定义了“seamless”属性,防止iFrame中出现滚动条,以便将其与页面上周围的内容融合在一起。不过,这个元素在最新修订版中已经被取消。
< p > scrollbar
BarProp对象是 window
对象的子对象,表示包含滚动机制或某些类似界面概念的用户界面元素。如果滚动条可见,则 window.scrollbars.visible
将返回 true
。
interface Window {
// The current browsing context
readonly attribute WindowProxy window;
readonly attribute WindowProxy self;
attribute DOMString name;
[PutForwards=href] readonly attribute Location location;
readonly attribute History history;
readonly attribute UndoManager undoManager;
Selection getSelection();
[Replaceable] readonly attribute BarProp locationbar;
[Replaceable] readonly attribute BarProp menubar;
[Replaceable] readonly attribute BarProp personalbar;
[Replaceable] readonly attribute BarProp scrollbars;
[Replaceable] readonly attribute BarProp statusbar;
[Replaceable] readonly attribute BarProp toolbar;
void close();
void focus();
void blur();
// Truncated
window.history.scrollRestoration
可用于检查scrollrestoration的状态或更改其状态(附加="auto"/"manual"
。自动是默认值。将其更改为手动意味着作为开发人员,您将接管可能需要的任何滚动更改当用户遍历应用程序的历史记录时。如果需要,您可以使用history.pushState()记录滚动位置并推送历史记录条目。
overflow: hidden;
设置在 body
标签上,如下所示:<style type="text/css">
body {
overflow: hidden;
}
</style>
overflow-y
:<style type="text/css">
body {
overflow-y: hidden;
}
</style>
如果您只想隐藏水平滚动条,请使用overflow-x
:
<style type="text/css">
body {
overflow-x: hidden;
}
</style>
offsetLeft
等属性的值),因此元素仍然是滚动容器。(source)
body overflow
属性设置为hidden
时,鼠标滚轮可以实现页面滚动。然而在Firefox中,使用鼠标滚轮无法实现页面滚动,我花了一些时间才弄清楚这一点。 - Doug Molineuxoverflow: hidden
禁用滚动没有意义。如果有人想要隐藏滚动条,那么他们可能认为控制滚动是多余的,因为首先没有内容需要滚动。或者可能是因为根本不想允许滚动。 - BoltClock以下是我的解决方案,理论上覆盖所有现代浏览器:
html {
scrollbar-width: none; /* For Firefox */
-ms-overflow-style: none; /* For Internet Explorer and Edge */
}
html::-webkit-scrollbar {
width: 0px; /* For Chrome, Safari, and Opera */
}
html
可以替换为您想要隐藏滚动条的任何元素。
注意:我已经浏览了其他19个答案,以查看我发布的代码是否已经被提及,似乎没有一个答案总结了2019年的情况,尽管其中很多答案都非常详细。如果有其他人已经说过这些话并且我错过了,请原谅。
html::-webkit-scrollbar-x html::-webkit-scrollbar-y
等等,但我认为没有这样的东西存在。 overflow 是一个 CSS 属性,滚动条是由浏览器实现的。 - lharby你可以通过给一个有溢出隐藏的包装 div
,并将内部 div
设置为 auto
来实现此目的。
为了移除内部 div
的滚动条,您可以通过将其拉出外部 div
的视口并对内部 div
应用负边距来实现。然后对内部 div
应用相等的填充,以使内容保持在视图中。
###HTML
<div class="hide-scroll">
<div class="viewport">
...
</div>
</div>
###CSS
.hide-scroll {
overflow: hidden;
}
.viewport {
overflow: auto;
/* Make sure the inner div is not larger than the container
* so that we have room to scroll.
*/
max-height: 100%;
/* Pick an arbitrary margin/padding that should be bigger
* than the max scrollbar width across the devices that
* you are supporting.
* padding = -margin
*/
margin-right: -100px;
padding-right: 100px;
}
.viewport
的 CSS 中加入 height: inherited
。 - Post Impatica这对我来说使用简单的CSS属性可以起作用:
.container {
-ms-overflow-style: none; // Internet Explorer 10+
scrollbar-width: none; // Firefox
}
.container::-webkit-scrollbar {
display: none; // Safari and Chrome
}
对于旧版本的Firefox,请使用:overflow: -moz-scrollbars-none;
overflow: -moz-scrollbars-none;
,则可以成功删除滚动条,但也会删除滚动的能力。您最好将.container
设置为overflow: hidden
。 - Martyn Chamberlin如果你们还感兴趣的话,我认为我找到了一个解决方法。虽然这是我第一周,但对我管用...
<div class="contentScroller">
<div class="content">
</div>
</div>
.contentScroller {overflow-y: auto; visibility: hidden;}
.content {visibility: visible;}
就像其他人所说,使用CSS的overflow
属性。
但是如果你仍然希望用户能够滚动内容(而不显示滚动条),你需要使用JavaScript。
请查看我的答案以获取解决方案:隐藏滚动条,同时仍能使用鼠标和键盘滚动
.noscroll {
width: 150px;
height: 150px;
overflow: auto; /* Or hidden, or visible */
}
以下是更多例子: