Mac OS X Lion、滚动条和网站可用性

43

我有很多溢出的div用来在小空间内显示大量内容(如长列表等)。给这些div加上CSS规则overflow:auto;通常会很好地工作,为用户提供滚动条以指示更多内容可用。

然而,在Mac OS X Lion中默认情况下隐藏滚动条,除非你正在主动滚动。当我处理计算机上的应用程序时,我喜欢这种方法,因为我认为有非常强的视觉线索表明你可以滚动查看更多内容。对于网页元素来说,它显然不太清晰,我担心我的用户不知道还有更多的内容可用(例如:StackOverflow的“类似标题的问题”是一个很好的例子)。

这是一个合理的担忧吗?Lion用户是否知道如果某些内容被截断,说明可能存在可滚动的内容?是否有任何解决方案,例如强制在运行于Lion上的浏览器中为页面元素(而不是页面本身)渲染滚动条?


有趣的问题,我自己也在思考。我认为它们是表明页面可以滚动的好指标。不过话说回来,打开页面时滚动条确实会出现,然后渐渐消失... - Felix Kling
你确定 Lion 在这些情况下不显示滚动条吗?我没有 Lion,所以无法测试。不过是个好问题。 - Gerben
1
iOS也不显示滚动条,但我没有看到人们对此抱怨。以StackOverflow上的长代码片段为例:您可以用两个手指滚动它们,而不会出现任何滚动条。 - sidyll
2
@Gerben: 它看起来像这样:http://i.imgur.com/IS4Ee.png 请注意,具有相似标题的帖子框上没有滚动条。 - Bill Lynch
3
当我最终开始安装Lion时,我会非常失望的,难道不是吗?我的滚动条到底去哪了! - Cody Gray
显示剩余4条评论
6个回答

12

我不同意这个观点。是的,我理解UI/UX的论点。但是有些网站,尤其是水平导航的方法,需要这个功能,因为用户可能不知道导航是水平的。然而,已经提到了一种强制性的修复方法。我发现这个方法很有效:

在Mac Safari、Chrome等浏览器中打开我的代码(JS FIDDLE 预览)

<style type="text/css">
#horiz_scroll::-webkit-scrollbar {
-webkit-appearance:none !important;
width:11px !important
}
#horiz_scroll::-webkit-scrollbar {
border-radius:8px !important;
border:2px solid white !important;
background-color:#ccc !important
}
#horiz_scroll::-webkit-scrollbar-thumb {
border-radius:8px !important;
border:2px solid white !important;
background-color:rgba(0,0,0,.5) !important
}
/*
// If you want it on hover //
#horiz_scroll::-webkit-scrollbar:active,
#horiz_scroll::-webkit-scrollbar:hover, 
#horiz_scroll::-webkit-scrollbar:focus{border-radius:8px !important;border:2px solid white !important;background-color:#ccc !important}
*/
</style>

<div id="horiz_scroll" style="width:943px;height:480px;overflow:auto"> 
  <!-- Just fit content inside this that scrolls horizontally. Example -->
  <table id="Table_01" height="350" border="0" cellpadding="0" cellspacing="0">
    <tr>
      <td>
        <div style="background:#eee;width:9000px;min-height:400px">hello</div>
      </td>
    </tr>        
  </table>
</div>

4
另一个很好的答案,也稍作修改:https://dev59.com/zmsz5IYBdhLWcg3wfn-6#7855592 - TheBlackBenzKid
1
这很好,但是如果用户将滚动条设置为始终显示,则会出现两个滚动条。 - CanSpice
1
@CanSpice - 我们不再使用这些解决方案了 - 我们已经采用了适应性响应式设计和其他UI和UX功能,因此我们可以跨浏览器和跨设备进行工作 - 不需要它们。感谢您的指点; 快速的hack总是会有问题并且会泄漏... - TheBlackBenzKid
1
FYI:我刚试了一下这个小工具,在桌面上可以用,但在iOS 6或7上无法使用。滚动条没有出现。 - Joshua Smith
1
@RobW - 需要添加“-webkit-overflow-scrolling: auto;”才能在iOS 7的iPhone上显示。虽然会失去动量滚动效果。 - Brendan
显示剩余2条评论

7
有没有办法绕过去,比如说,强制在基于 Lion 操作系统的浏览器上渲染页面元素的滚动条?
这是一种攻击行为。让系统来应对吧。如果用户使用的是 Lion 操作系统,那是因为他们喜欢这样。如果他们使用了新的滚动条并不喜欢,他们会在“系统偏好设置”中进行更改。

1
这可以在系统偏好设置中更改吗?哦,感谢上天,不是每个苹果员工都失去了理智。那么,在这种情况下,我完全同意。尊重本地平台UI。如果用户喜欢隐藏他们的滚动条,那么就不要为您的页面显示它们。这比做你预期要做的事情更令人困惑和用户敌对。 - Cody Gray
4
我也同意,只是希望苹果能够更加具体而非笼统;我喜欢页面上没有滚动条,但我认为在页面元素上去除滚动条可能有些过分。不过,询问是否可能做到这一点感觉很全面。 - neezer
@neezer:是的,我明白了。但混合使用可能会让人感到困惑。也许他们将来会通过其他视觉线索(例如阴影)解决这个问题(顺便说一下,在您的网站上使用阴影即使在带有滚动条的系统上也会看起来很好)。现在,最好还是习惯一下。这并不难,特别是对于触摸板。如果用户有鼠标,则首选项的标准行为是“根据输入设备自动”,所以没什么大不了的。 - sidyll
1
如果用户使用Lion,那是因为自动更新或者其中某个软件强制要求手动更新。你的想法不现实。在2013年,没有办法继续使用Leopard。在这种情况下,您可以选择退出更改默认设置。在其他情况下,您别无选择。有时,您被迫花费很大力气才能使最简单的事情工作,甚至找到它们的位置。 - Henrik Erlandsson
1
@HenrikErlandsson 感谢您的评论。我同意。但是这是在2011年写的。 - sidyll

0

OS X Lion实际上是在强制问题。移动浏览器(包括iOS和Andriod)的用户已经抱怨这个问题很久了...... 溢出技巧通常不起作用;您需要更加深入地思考页面设计或者超越标准浏览器行为,为触摸和滚动添加JavaScript支持(例如jqTouch)。

不幸的是,Lion的滚动条行为不仅影响网站使用。例如,它让我连接大尺寸显示器的VNC会话变得非常烦人(我需要调整VNC窗口大小才能让Lion显示滚动条)。

更不幸的是,解决方案是进入“偏好设置 > 通用 > 显示滚动条:”并将其设置为“始终显示”。这有点抵消了苹果可能试图在Lion中建立的任何向前发展的势头。但能够真正使用它是一个通用的王牌。


0

Lion会在任何可滚动元素进入视图时闪烁滚动条,为用户提供初始提示,表明还有更多内容可以滚动。当然,用户可能会注意到这一点,也可能不会。如果用户习惯了Lion的做法,你的网站不是唯一发生这种情况的地方,用户可能知道如何处理它。如果你的框看起来“无法滚动”而没有滚动条,你可能需要更强烈地表明它们是可滚动的,例如,在框周围放置一个清晰的边框,并在其中放置一些截断的内容。这可能是你不管Lion都要做的事情。

如果你可以改进你的UI使滚动更加明显,那么无论如何都要做。否则,如果你的内容以一种表明还有更多内容的方式呈现,我不会担心在用户应该习惯的系统上错过滚动条。

你可能想把这个问题带到https://ux.stackexchange.com/寻求一些真正专业的意见。


6
“你可能需要更强烈地表明它们是可滚动的” - 但这正是滚动条应该做的事情。开发人员不应该只为了应对苹果不寻常的设计选择而添加额外的样式处理。 - Paul Alexander
1
遗憾的是,开发人员不应该做的事情从来没有得到太多重视。开发人员永远不应该被迫接受为ie6所需的各种CSS hack。当浏览器供应商赶上时,开发人员不应该编写/使用JavaScript库来填充标准HTML5功能(如占位符、视频等)。实际上,我们不必这样做。我们之所以选择这样做,是因为如果您不支持三大浏览器之一,很难找到工作。 - Chris O'Kelly

0
我刚刚也遇到了同样的问题。这是我找到的解决方法。它可以让滚动条在Mac Air和iPad上的Safari中始终出现。当然,只有在有更多内容需要查看时才会出现,而不是所有内容都显示时。
::-webkit-scrollbar {
    -webkit-appearance: none;
    width: 7px;
}
::-webkit-scrollbar-thumb {
    border-radius: 4px;
    background-color: rgba(0,0,0,.5);
    -webkit-box-shadow: 0 0 1px rgba(255,255,255,.5);
}

你能提供一个完整的工作页面,在移动Safari/Webview中保持滚动条可见吗?我将这个CSS添加到我的Webview HTML中,它可以为滚动条添加样式,但无法保持其可见。 - Joe Beuckman
只有在不使用“-webkit-overflow-scrolling: touch”时,此方法才有效。一旦添加该属性,滚动条将消失。 - Joshua Smith

-2

作为一个非Mac用户,我将不参与关于Lion是否应该隐藏滚动条的哲学讨论。

至于强制在网页元素中显示滚动条,只需设置CSS的overflow: scroll即可。这会使垂直和水平滚动条始终出现,并且当它们没有任何内容可以滚动时,这是非常明显的。

如果您只想要垂直或水平滚动,而不想让另一个维度的滚动条出现,您可以分别使用overflow-y: scrolloverflow-x: scroll,而不是overflow: scroll。这适用于所有现代浏览器,但不适用于IE8及以下版本。


2
遗憾的是,除非用户在元素上进行主动滚动,否则这实际上不会显示滚动条。 - Paul Alexander

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