在超文本标记语言页面上隐藏滚动条

CSS可以用来隐藏滚动条吗?你会怎么做?

1927266 次浏览

我相信你可以使用overflow CSS属性来操作它,但是它们对浏览器的支持有限。一位消息人士说它是Internet Explorer 5(及更高版本)、Firefox 1.5(及更高版本)和Safari3(及更高版本)-也许足以满足您的目的。

滚动,滚动,滚动有很好的讨论。

body标签上设置#0,如下所示:

<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

要禁用垂直滚动条,只需添加overflow-y:hidden;

了解更多:溢出

使用CSS#0属性

.noscroll {width: 150px;height: 150px;overflow: auto; /* Or hidden, or visible */}

以下是更多的例子:

正如其他人已经说过的,使用CSSoverflow

但是,如果您仍然希望用户能够滚动该内容(不可见滚动条),则必须使用JavaScript。

在这里查看我的答案以获得解决方案:隐藏滚动条,同时仍然可以使用鼠标/键盘滚动

我只是想向其他阅读这个问题的人指出,在body元素上设置overflow: hidden(或overflow-y)并没有为我隐藏滚动条。

我必须使用html元素。

WebKit支持可以使用标准CSS规则隐藏的滚动条伪元素:

#element::-webkit-scrollbar {display: none;}

如果要隐藏所有滚动条,请使用

::-webkit-scrollbar {display: none;}

我不确定恢复-这确实有效,但可能有一个正确的方法来做到这一点:

::-webkit-scrollbar {display: block;}

当然,您可以始终使用width: 0,然后可以使用width: auto轻松恢复,但我不喜欢滥用width进行可见性调整。

Firefox 64现在默认支持实验滚动条宽度属性(63需要设置配置标志)。要在Firefox 64中隐藏滚动条:

#element {scrollbar-width: none;}

要查看您当前的浏览器是否支持伪元素或scrollbar-width,请尝试以下代码段:

.content {/* These rules create an artificially confined space, so we geta scrollbar that we can hide. They are not directly involved inhiding 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 euurna et leo aliquet malesuada ut ac dolor. Fusce non arcu vel ligulafermentum sodales a quis sapien. Sed imperdiet justo sit amet venenatisegestas. Integer vitae tempor enim. In dapibus nisl sit amet purus conguetincidunt. Morbi tincidunt ut eros in rutrum. Sed quam erat, faucibusvel tempor et, elementum at tortor. Praesent ac libero at arcu eleifendmollis ut eget sapien. Duis placerat suscipit eros, eu tempor tellusfacilisis a. Vivamus vulputate enim felis, a euismod diam elementumnon. 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. Quisquenec magna erat. Phasellus vehicula porttitor nulla et dictum. Sedtincidunt scelerisque finibus. Maecenas consequat massa aliquam pretiumvolutpat. Duis elementum magna vel velit elementum, ut scelerisqueodio faucibus.</div>


(请注意,这并不是这个问题的正确答案,因为它也隐藏了水平条,但当Google指向我时,这就是我正在寻找的,所以我想无论如何我都会发布它。

如果您正在寻找隐藏移动设备滚动条的解决方案,请按照彼得的回答

这是一个jsfiddle,它使用下面的解决方案来隐藏水平滚动条。

.scroll-wrapper{overflow-x: scroll;}.scroll-wrapper::-webkit-scrollbar {display: none;}

它在带有Android 4.0.4的三星平板电脑(Ice Cream Sandwich,原生浏览器和Chrome)和带有iOS6的iPad(Safari和Chrome)上进行了测试。

关于彼得的回答:

#element::-webkit-scrollbar {display: none;}

这将与Internet Explorer 10相同:

 #element {-ms-overflow-style: none;}

我想我为你们找到了一个变通方法,如果你们还感兴趣的话。这是我的第一周,但它对我很有效…

<div class="contentScroller"><div class="content"></div></div>
.contentScroller {overflow-y: auto; visibility: hidden;}.content {visibility: visible;}

您可以使用隐藏其溢出的包装器div来完成此操作,并且内部div设置为auto

要删除内部div的滚动条,您可以通过对内部div应用负边距将其从外部div的视口中拉出。然后对内部div应用相等的填充,以便内容保持在视图中。

JSFiddle

###超文本标记语言

<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;}

是的,有点…

当你问这个问题时,“浏览器的滚动条可以以某种方式删除吗,而不是简单地隐藏或伪装”,每个人都会说“不可能”,因为不可能以兼容和交叉兼容的方式从所有浏览器中删除滚动条,然后是可用性的整个论点。

但是,如果您不允许网页溢出,则可以防止浏览器需要生成和显示滚动条。

这只是意味着我们必须主动替换浏览器通常为我们做的相同行为,并告诉浏览器谢谢但不谢谢伙计。与其尝试删除滚动条(我们都知道这是不可能的),我们可以避免滚动(完全可行)并在我们制作的元素中滚动,并对其有更多的控制。

创建一个隐藏了overflow的div。检测用户何时尝试滚动,但无法滚动,因为我们已经禁用了浏览器使用overflow滚动的能力:隐藏…并在发生这种情况时使用JavaScript向上移动内容。从而创建我们自己的滚动,而不使用浏览器的默认滚动或使用iScroll等插件。

---

为了彻底起见;所有供应商特定的操作滚动条的方法:

Internet Explorer 5.5+

*这些属性从未成为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;}

从Internet Explorer 8开始,这些属性是以Microsoft为前缀的供应商,但它们仍然没有得到W3C的批准。

-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的更多信息

Internet Explorer使scroll可用,它设置是否禁用或启用滚动条;它也可以用来获取滚动条位置的值。

在Microsoft Internet Explorer 6及更高版本中,当您使用!DOCTYPE声明指定标准兼容模式时,此属性将应用于超文本标记语言元素。当未指定标准兼容模式时,与早期版本的Internet Explorer一样,此属性将应用于BODY元素,不是将应用于HTML元素。

同样值得注意的是,当使用. NET时,PresentingFramework中System.Windows.Controls.Primitives中的ScrollBar类负责呈现滚动条。

http://msdn.microsoft.com/en-us/library/ie/ms534393(v=vs.85). aspx


webkit

与滚动条自定义相关的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-适用于所有滚动条,并指示包含滚动条的窗口当前是否处于活动状态。(在最近的夜间,这个伪类现在也适用于::选择。我们计划将其扩展为处理任何内容,并将其作为新标准伪类提出。)

这些组合的例子

::-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 */ }

更多关于Chrome

添加窗口滚动处理程序公共静态处理程序注册addWindowScrollHandler(Windows. ScrollHandler)

添加一个窗口. ScrollEvent处理程序参数:处理程序-处理程序退货:返回处理程序注册[来源](http://www.gwtproject.org/javadoc/latest/com/google/gwt/user/client/Window.html#addWindowScrollHandler(com.google.gwt.user.client.窗口. ScrollHandler)))


Mozilla

Mozilla确实有一些用于操作滚动条的扩展,但建议不要使用它们。

  • -moz-scrollbars-none他们建议使用overflow:隐藏来代替this。
  • -moz-scrollbars-horizontal类似于overflow-x
  • -moz-scrollbars-vertical类似于overflow-y
  • -moz-hidden-unscrollable仅在用户配置文件设置内部工作。禁用滚动XML根元素并禁用使用箭头键和鼠标滚轮滚动网页。

  • Mozilla Developer Docs on'Overflow'

更多关于Mozilla的信息

据我所知,这不是真的有用,但值得注意的是,控制是否在Firefox中显示滚动条的属性是(参考链接):

  • 属性:滚动条
  • 类型: n sIDO MBar道具
  • 问题描述控制窗口中是否显示滚动条的对象。此属性在JavaScript中是“可替换的”。只读

最后但并非最不重要的是,填充就像魔法。

正如前面在其他一些回答中提到的,这里有一个足够不言自明的例子。

在此处输入图像描述


历史课

滚动条

只是因为我很好奇,我想了解滚动条的起源,这些是我找到的最好的参考资料。

杂项

在HTML5规范草案中,#0属性被定义为防止滚动条出现在iFrames中,以便它们可以与页面上的周围内容混合.虽然此元素未出现在最新版本中。

scrollbar BarProp对象是window对象的子对象,表示包含滚动机制或一些类似界面概念的用户交互界面元素。如果滚动条可见,window.scrollbars.visible将返回true

interface Window {// The current browsing contextreadonly 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

历史API还包括用于在页面导航上进行滚动恢复的功能,以在页面加载时保留滚动位置。

window.history.scrollRestoration可用于检查滚动恢复的状态或更改其状态(附加="auto"/"manual"。Auto是默认值。将其更改为手动意味着您作为开发人员将拥有用户遍历应用历史记录时可能需要的任何滚动更改的所有权。如果需要,您可以在使用history.pushState()推送历史条目时跟踪滚动位置。

---

进一步阅读:

示例

如果您想滚动工作,在隐藏滚动条之前,请考虑样式他们。现代版本的OS X和移动操作系统具有滚动条,而不适合用鼠标抓取,非常漂亮和中性。

为了隐藏滚动条,John Kurlak的技巧除了离开之外效果很好没有触摸板的Firefox用户无法滚动,除非他们有一只带轮子的老鼠,他们可能会这样做,但即使这样,他们通常也可以只能垂直滚动。

约翰的技术使用三个元素:

  • 屏蔽滚动条的外部元素。
  • 具有滚动条的中间元素。
  • 和一个内容元素来设置中间元素的大小并使它有滚动条。

必须可以设置外部元素和内容元素的大小相同这消除了使用百分比,但我想不出其他任何事情”””不工作与正确的调整。

我最关心的是是否所有版本的浏览器都设置滚动条以使可见溢出内容可见。我已经在当前浏览器中进行了测试,但是#36825;的人

原谅我的SASS; P

%size {// set width and height}
.outer {// mask scrollbars of childoverflow: hidden;// set mask size@extend %size;// has absolutely positioned childposition: relative;}
.middle {// always have scrollbars.// don't use auto, it leaves vertical scrollbar showingoverflow: scroll;// without absolute, the vertical scrollbar showsposition: absolute;}// prevent text selection from revealing scrollbar, which it only does on// some webkit based browsers..middle::-webkit-scrollbar {display: none;}
.content {// push scrollbars behind mask@extend %size;}

测试

OS X是10.6.8。Windows是Windows 7。

  • Firefox 32.0隐藏滚动条。箭头键不会滚动,即使在单击焦点后,但是鼠标滚轮和触控板上的两个手指可以。OS X和Windows。
  • Chrome37.0隐藏滚动条。单击对焦后箭头键起作用。鼠标滚轮和触控板工作。OS X和Windows。
  • Internet Explorer 11隐藏滚动条。单击对焦后箭头键起作用。鼠标滚轮工作。窗口。
  • Safari隐藏滚动条。单击对焦后箭头键起作用。鼠标滚轮和触控板工作。OS X.
  • Android 4.4.4和4.1.2。隐藏滚动条。触摸滚动工作。尝试在Chrome37.0,火狐32.0和4.4.4上的HTMLViewer(无论是什么)。在HTMLViewer中,页面是蒙版内容的大小,也可以滚动!滚动与页面缩放交互可接受。

我的答案即使在overflow:hidden;时也会滚动,使用jQuery:

例如,用鼠标滚轮水平滚动:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script><script type='text/javascript' src='/js/jquery.mousewheel.min.js'></script><script type="text/javascript">$(function() {
$("YourSelector").mousewheel(function(event, delta) {
this.scrollLeft -= (delta * 30);event.preventDefault();});});</script>

我的超文本标记语言是这样的:

<div class="container"><div class="content"></div></div>

将其添加到要隐藏滚动条的div

.content {position: absolute;right: -100px;overflow-y: auto;overflow-x: hidden;height: 75%; /* This can be any value of your choice */}

把这个加到容器里

.container {overflow-x: hidden;max-height: 100%;max-width: 100%;}

隐藏滚动条的跨浏览器方法。

它在Edge,Chrome,Firefox和Safari上进行了测试

隐藏滚动条,同时仍然可以用鼠标滚轮滚动!

代码

/* Make parent invisible */#parent {visibility: hidden;overflow: scroll;}
/* Safari and Chrome specific style. Don't need to make parent invisible, because we can style WebKit scrollbars */#parent:not(*:root) {visibility: visible;}
/* Make Safari and Chrome scrollbar invisible */#parent::-webkit-scrollbar {visibility: hidden;}
/* Make the child visible */#child {visibility: visible;}

这对我来说适用于简单的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;

我写了一个WebKit版本,其中包含一些选项,例如自动隐藏小版本、scroll唯一只有-x

._scrollable{@size: 15px;@little_version_ratio: 2;@scrollbar-bg-color: rgba(0,0,0,0.15);@scrollbar-handler-color: rgba(0,0,0,0.15);@scrollbar-handler-color-hover: rgba(0,0,0,0.3);@scrollbar-coner-color: rgba(0,0,0,0);
overflow-y: scroll;overflow-x: scroll;-webkit-overflow-scrolling: touch;width: 100%;height: 100%;
&::-webkit-scrollbar {background: none;width: @size;height: @size;}
&::-webkit-scrollbar-track {background-color:@scrollbar-bg-color;border-radius: @size;}
&::-webkit-scrollbar-thumb {border-radius: @size;background-color:@scrollbar-handler-color;&:hover{background-color:@scrollbar-handler-color-hover;}}
&::-webkit-scrollbar-corner {background-color: @scrollbar-coner-color;}
&.little{&::-webkit-scrollbar {background: none;width: @size / @little_version_ratio;height: @size / @little_version_ratio;}&::-webkit-scrollbar-track {border-radius: @size / @little_version_ratio;}&::-webkit-scrollbar-thumb {border-radius: @size / @little_version_ratio;}}
&.autoHideScrollbar{overflow-x: hidden;overflow-y: hidden;&:hover{overflow-y: scroll;overflow-x: scroll;-webkit-overflow-scrolling: touch;&.only-y{overflow-y: scroll !important;overflow-x: hidden !important;}
&.only-x{overflow-x: scroll !important;overflow-y: hidden !important;}}}
&.only-y:not(.autoHideScrollbar){overflow-y: scroll !important;overflow-x: hidden !important;}
&.only-x:not(.autoHideScrollbar){overflow-x: scroll !important;overflow-y: hidden !important;}}

http://codepen.io/hicTech/pen/KmKrjb

将此CSS代码复制到隐藏滚动条的客户代码:

<style>
::-webkit-scrollbar {display: none;}
#element::-webkit-scrollbar {display: none;}
</style>

这是我的解决方案,理论上涵盖了所有现代浏览器:

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年的情况,尽管其中很多都非常详细。如果有人说过这个,我很抱歉错过了。

CSS可以用来隐藏滚动条吗?你会怎么做?

如果您希望从浏览器视口中删除垂直(和水平)滚动条,请添加:

style="position: fixed;"

<body>元素。


Javascript:

document.body.style.position = 'fixed';

css:

body {position: fixed;}

关于彼得的回答:

如果您想从iframed中删除滚动条,您需要在iframed的网站中添加用于删除滚动条的样式。无法在iframed中设置包括滚动条在内的元素的样式。

有iFrame的网站:

<!DOCTYPE html><html lang="en"><meta charset="UTF-8"><title>Page Title</title><body><iframe src="/iframe"></iframe></body></html>

iframed的网站:

<!DOCTYPE html><html lang="en"><meta charset="UTF-8"><title>Page Title</title>
<style>html, body {margin: 0;padding: 0}.content {scrollbar-width: none;}
.content::-webkit-scrollbar {display: none;}
.content {height: 100vh;overflow: scroll;}</style>
<body><div class="content"><h1>This is a Heading</h1><p>This is a paragraph.</p><p>This is another paragraph.</p><h1>This is a Heading</h1><p>This is a paragraph.</p><p>This is another paragraph.</p><h1>This is a Heading</h1><p>This is a paragraph.</p><p>This is another paragraph.</p><h1>This is a Heading</h1><p>This is a paragraph.</p><p>This is another paragraph.</p><h1>This is a Heading</h1><p>This is a paragraph.</p><p>This is another paragraph.</p><h1>This is a Heading</h1><p>This is a paragraph.</p><p>This is another paragraph.</p></div></body></html>