javascript - 切换滚动条可见性在 Safari 上不起作用(在 Chrome 上工作)
问题描述
我试图实现一种行为,其中 div 上的滚动条基于类变得可见。div 需要是overflow:auto
,我只想控制滚动条的可见性。
为此,我正在使用这个 -
.not-scrolled::-webkit-scrollbar {
display:none;
}
当类not-scrolled
被添加到 div 时,滚动条被隐藏,当类被移除时,滚动条变得可见。
您可以在此处检查 jsfiddle 中的行为 - https://jsfiddle.net/naman_anand/39g0h1pk/16/
这在 Chrome 中完全符合预期。但不能在 Safari 中工作。
在 Safari 中,滚动条在加载时采用分配给它的样式,然后不会更改,即使添加/删除了更改这些样式的类。
这就是为什么如果您在 safari 中打开上述小提琴,它将无法正常工作。但是,如果您在开始时隐藏滚动条(检查此小提琴 - https://jsfiddle.net/naman_anand/39g0h1pk/18/)并尝试稍后通过删除类使其可见,它会保持隐藏状态。
知道为什么会在 Safari 中发生这种情况,以及在 Safari 中切换滚动条可见性的任何方式吗?
解决方案
css 处理内容溢出的方式全部由overflow
属性处理。如果您希望div
默认看到滚动条,请将其设置为scroll
. (您可以将其设置为自动,但如果内容没有溢出,它将不会显示滚动条。)
接下来,.not-scrolled
可以添加应该将 div 更新为overflow: hidden
. (假设您不希望内容溢出。
就像是:
.default-class {
overflow: scroll;
&.not-scrolled {
overflow: hidden;
}
}
*编辑:误解了原始问题,因为这在隐藏滚动条时无法保持滚动。
推荐阅读
- android - Android:使用个性化按键布局时布局不变
- ruby-on-rails - 电子邮件验证参数 - 测试中错误的参数数量 Michael Hartl Rails 教程
- python - Conda 中是否支持 Python 3.8?(我需要带窗口功能的 sqlite 3.25)
- c++ - C ++:在另一个函数中声明一个函数不是编译器错误所以......它是什么?
- swift - 如何在右侧绘制类似于所示图像的带有 ARC 的 UIBezierPath?
- c# - C# 使用预定义的排序数组对数组进行排序
- c++ - 用于 OSX/Windows 编译的 Cmakelists.txt 问题
- python - 如何迭代熊猫数据框的集合?
- python - 将文件中的多行转换为元组和列表格式
- android - Android 设备没有响应