html - 为什么在溢出内输入绝对位置会导致页面上的全局滚动条?
问题描述
当我在具有(或任何不可见的溢出)的 div 中输入position: absolute
样式时,并且当 div 确实溢出时,html 元素会获得溢出内容高度的垂直滚动条。overflow: scroll
它显示在以下代码段中:
<!DOCTYPE html>
<html>
<body>
<div style="height: 80vh;display: flex;width: 20rem;">
<div style="overflow: scroll;">
<hr style="width: 0; height: 200vh; margin: 0 10rem;" />
<input style="position: absolute;" />
</div>
</div>
</body>
</html>
如果删除<hr/>
元素,全局滚动条就会消失,因为内部 div 不再溢出。如果您用<input>
空替换元素,<div>
则问题不再显示。
我的问题是:
为什么会出现全局滚动条(在
html
元素上)?我该如何预防?我可以
overflow: hidden
在 html 元素上进行设置,但有时在重新加载时,页面不会滚动到顶部并且页面顶部不再可见。overflow: clip
尚不可用。
背景:我有一个页面,其界面采用所有可见视口,并且没有页面滚动条。任何可滚动的内容都通过溢出属性在页面内进行管理。我使用position: absolute
CSS 属性(以及其他属性)隐藏了其中的输入元素,以确保它们仍然是可聚焦的。
解决方案
一种解决方案是position: relative
在溢出元素上放置一个属性:
<!DOCTYPE html>
<html>
<body>
<div style="height: 80vh;display: flex;width: 20rem;">
<div style="overflow: scroll;position:relative;">
<hr style="width: 0; height: 200vh; margin: 0 10rem;" />
<input style="position: absolute;" />
</div>
</div>
</body>
</html>
但它不起作用,isolatiob: isolate
尽管我认为它会起作用:
<!DOCTYPE html>
<html>
<body>
<div style="height: 80vh;display: flex;width: 20rem;">
<div style="overflow: scroll;isolation: isolate;">
<hr style="width: 0; height: 200vh; margin: 0 10rem;" />
<input style="position: absolute;" />
</div>
</div>
</body>
</html>
推荐阅读
- maven - 排除 Junit4 测试依赖项
- python-3.x - 将具有类对象作为节点的 networkx 图导出到 Gephi
- python - 如何连接来自同一数据帧的 2 列,但从第 1 列获取行 a 到 d,从第 2 列获取 m 到 p?
- python - 预加载大芹菜任务
- react-native - 如何使用 CameraRoll 获取媒体的 base64 字符串?
- pyspark - 从 PySpark Dataframe 上的两组列中创建字典列
- java - Elassandra - 错误:无法找到或加载主类 org.apache.cassandra.stress.Stress
- r - 如何更改包的所有 R 文件中的函数/参数名称
- html - 如何在另一个 CSS Grid 中创建一个 Grid?
- autolayout - 将 iPhone XR 支持添加到 Xcode 10 中的现有 iOS 应用程序