2017-12-27 1028 views
13

(live-version)由(大约):Chrome的滚动条消失的三个部分(不溢出-Y)

  • 左侧边栏
  • 中心的内容
  • 右侧栏

右侧栏应是可滚动的,所以我设置了overflow-y: scroll; right: -17px;来简单地隐藏滚动条。 Body, htmloverflow-y: auto;。这样我就不必有两个滚动条(页面和右边栏)。

问题: (仅适用于Chrome,在版本62和63测试)

对于在不同机器上的一些原因,铬让我对滚动条两种不同的风格:Case 1Case 2

所以基本上,对于情况1将在右侧栏滚动是“绝对定位”和第隐藏的,因为它本身知识+,而对于情况下2滚动条“相对定位”和页面隐藏滚动条所需的17px。

问题

1)为什么滚动条都在相同的操作系统和浏览器版本,但不同机器上的不同?

2)有没有办法解决这个问题,没有任何插件?考虑到Windows用户有情况2和MacOS用户情况1或2

+0

有些问题:您使用哪个操作系统进行测试?你确定浏览器缓存已经完全清空了吗?对于我的情况(Windows和Chrome版本63.0.x)一切正常(所以没有情况2)。 – Andreas

+0

看着现场版本,并通过响应宽度运行,我看到很多响应的问题。我的MacBook Air的宽度为1440像素,我看到的只是右侧面板的一部分。我会先看看你的css规则。 – xeo

回答

6

1)为什么在相同的操作系统和浏览器版本,但不同的机器上,滚动条不同?

这可能与macOS上的系统设置有关。

macOS scroll bar OS settings

如果你有Always选择,我敢肯定,滚动条推页面内容的方式进行。如果您连接了鼠标,也一样。否则,它有你提到的“绝对定位”的行为。请记住,Windows用户可能会看到类似于Always的行为。

2)有没有什么办法解决这个问题,没有任何插件?考虑到Windows用户有情况2和MacOS用户情况1或2?

那么,有点意见第一:我不认为这是一个好主意,隐藏滚动条没有提供给用户沟通元素的可滚动性的另一个提示。总之,我想不出任何不是某种黑客行为,但这里有:

由于这是只需要执行一次,并假设我们希望跨浏览器的可预测功能和操作系统,你可以在这里使用一些JS。在保留边栏的系统上,侧边栏元素的offsetWidthscrollWidth属性将有所不同。默认情况下,您的元素可能有后续的风格:

$child-h-padding: 15px; 
 
$max-scrollbar-width: 35px; 
 

 
.r-sidebar { 
 
    overflow-y: scroll; 
 
    padding: 12px $child-h-padding; 
 
    ...rest 
 
} 
 

 
.r-sidebar--r-padded { 
 
    padding-right: $child-h-padding + $max-scrollbar-width; 
 
    right: -$max-scrollbar-width; 
 
}

您可以添加/删除基于对offsetWidthscrollWidth的值.r-sidebar--r-padded类。

这个应该无处不在,无论浏览器/操作系统。我已经在macOS/Chrome上使用两个边栏设置进行了测试。

+0

“请记住,Windows用户可能会看到类似Always的行为”几个值得注意的例外是IE11和Edge,几秒钟后自动隐藏滚动条。较新版本的Microsoft Office也会这样做,这非常刺激(无法禁用它)。 – BoffinbraiN

3

将滚动条移出用户的视线并不是一种完全隐藏滚动条的方法。

有没有办法解决这个没有任何插件?

这是你在找什么?

.r-sidebar::-webkit-scrollbar { display: none; } 

这会隐藏所有浏览器的滚动条。由于其特定于webkit,因此假设浏览器版本是最新的,它应该可以跨越不同的操作系统。

More info here

为什么滚动条都在相同的操作系统和浏览器的版本不同,但不同机器

我没有为此立即答复,但请提供有关该机器的详细信息/ os版本/浏览器版本,我会尽我所能提供更多答案

1

左侧边栏:

这个添加到滚动DIV:

direction: rtl; 
left: -17px; 

而且这里面的div:

.nav{ 
direction: ltr; 
} 

这将完全隐藏滚动条。但div仍然是可滚动的。