隐藏HTML页面上的滚动条

836

CSS可以用来隐藏滚动条吗?如何实现这个效果?


5
@UweKeim,IE11没有任何技巧。 - David Gras
22个回答

11

除了彼得的回答:

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

这对于Internet Explorer 10也将起同样的作用:

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

10

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

在Edge、Chrome、Firefox和Safari上进行了测试。

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

Codepen

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

1
希望能够解释一下这是如何工作的——通过控制父子元素的可见性来隐藏滚动条是很糟糕的。 - JackyJohnson
1
@believesInSanta,我添加了注释和CodePen以更好地解释。我不同意你的评估,认为使用可见性来隐藏滚动条是一种可怕的方法。我知道这是一种hack,但要实现此效果的正确方法是如果所有浏览器都支持像Chrome和Safari允许的单独样式化滚动条的方法。 - Blake Plumb
2
我刚刚爱上了你的解决方案。它完美地运行(用于设计为现代浏览器使用的应用程序)。非常感谢! - Maxime Lafarie

7
我想向阅读本问题的其他人指出,将 overflow: hidden(或 overflow-y)设置在 body 元素上不能隐藏滚动条。

我必须使用 html 元素。


3
我记不清确切时间,因为那是几个月前的事了,但我记得在 Chrome 中设置 body 的 overflow 是有效的,但在 Firefox 上则不行(或者反过来)。不过使用 HTML 标签在两个浏览器上都有效。 - Brad Azevedo
从记忆中来看,这可能是怪异模式下的差异。 - thomasrutter

7
如果您希望滚动起作用,在隐藏滚动条之前,请考虑对其进行样式设置。现代的OS X和移动操作系统都有滚动条,虽然不太适合使用鼠标抓取,但却非常美观和中性。
要隐藏滚动条,John Kurlak的一种技术效果很好,但会让没有触摸板的Firefox用户无法滚动,除非他们有一个带有滚轮的鼠标,但即使如此,他们通常也只能垂直滚动。
John的技术使用了三个元素:
  • 一个外部元素来遮盖滚动条。
  • 一个中间元素来拥有滚动条。
  • 一个内容元素来设置中间元素的大小并使其具有滚动条。
必须能够将外部和内容元素的大小设置为相同,这消除了使用百分比的可能性,但我想不出其他任何不需要正确调整的方法。

我最大的担忧是所有浏览器版本是否都会设置滚动条以显示溢出的内容。我已经在当前浏览器中进行了测试,但没有在旧版浏览器中测试过。

请原谅我的SASS ;P

%size {
    // set width and height
}

.outer {
    // mask scrollbars of child
    overflow: hidden;
    // set mask size
    @extend %size;
    // has absolutely positioned child
    position: relative;
}

.middle {
    // always have scrollbars.
    // don't use auto, it leaves vertical scrollbar showing
    overflow: scroll;
    // without absolute, the vertical scrollbar shows
    position: 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。
  • Chrome 37.0 滚动条隐藏。点击聚焦后,箭头键可以工作。鼠标滚轮和触控板也可以。适用于 OS X 和 Windows。
  • Internet Explorer 11 滚动条隐藏。点击聚焦后,箭头键可以工作。鼠标滚轮可以工作。适用于 Windows。
  • Safari 5.1.10 滚动条隐藏。点击聚焦后,箭头键可以工作。鼠标滚轮和触控板也可以。适用于 OS X。
  • Android 4.4.4 和 4.1.2。 滚动条隐藏。触摸滚动可以工作。尝试在 Chrome 37.0、Firefox 32.0 和 4.4.4 上使用 HTMLViewer(不知道是什么)。在 HTMLViewer 中,页面大小与遮罩内容相同,也可以滚动!滚动与页面缩放的交互效果可接受。

1
与问题无关的注释。在这种情况下,您应该使用@extend而不是@include。因此,您可以使用%size{}代替@mixin{},然后在css选择器中调用@extend %size;。当您拉取变量以返回结果时,通常会使用mixin。占位符(又名@extend)适用于像这样的简单重复代码 - 不需要“函数”的情况。 - Mike Barwick
1
我编辑了使用@extend。结果对于不了解SCSS的人可能不太容易理解,但足够好了。 - Seth W. Klein

7
将以下CSS代码复制到客户端代码中以隐藏滚动条:
<style>

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

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

</style>

5
我的HTML代码如下:

这是一个段落。

<div class="container">
  <div class="content">
  </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%;
}

5

我编写了一个带有一些选项的WebKit版本,如自动隐藏小版本,只滚动垂直方向水平方向:

._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


3

即使使用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>

2
滚动劫持虽然可行,但几乎总是糟糕的用户体验。 - Brandon Anzaldi
1
虽然这是可能的,但当您禁用滚动并使用JavaScript处理滚动时,辅助技术用户会遇到巨大问题。如果您每次滚动时不为用户设置焦点,则您的辅助技术用户将完全迷失方向。此外,每个用户现在都失去了对所见内容的精细控制。接管用户滚动非常糟糕的用户体验。除了鼠标滚轮之外,您还必须处理上/下键、屏幕阅读器转盘、鼠标点击和触摸板控件。这对开发人员来说变得笨重且对用户来说很糟糕。 - ShiningLight

3

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

了解更多信息:overflow


2
我相信您可以使用CSS属性overflow来控制它,但是它的浏览器支持有限。一些来源表示支持Internet Explorer 5(及更高版本),Firefox 1.5(及更高版本)和Safari 3(及更高版本)- 这可能已经足够满足您的需求。 Scrolling, Scrolling, Scrolling有一个很好的讨论。

1
好的链接。了解多个浏览器上的结果很不错。不幸的是,完成结果的截图的图片已经损坏了。 - eQ19

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接