absolute定位元素需设置max-height或显式宽高才能触发overflow滚动,因其脱离文档流后无默认滚动边界;必须配合top/bottom/left/right偏移与有高度的relative父容器。
absolute定位元素默认不触发
overflow
滚动
给
的元素加
或
,大概率不会出现滚动条——不是属性没生效,而是它没有“可滚动的边界”。
元素脱离文档流,其宽高若未显式设定,会收缩到内容尺寸;而
只在容器有**明确的块级约束范围**时才起作用。
常见错误现象:
设了
,但里面塞了 20 行文字,依然全部撑开、无滚动条。
必须给该元素设置
和
(或
),且值要小于内容自然高度
不能依赖父容器的
或
来“挤出”滚动空间;
元素只认自己盒模型的尺寸
若用
/
配合
,浏览器无法计算可滚动高度,
仍无效
正确做法:用top/bottom/left/right + height:auto替代固定height
想让绝对定位弹层/下拉菜单等自适应高度又支持滚动,更可靠的方式是用四边偏移代替
,再配合
和
:
这样做的关键是:
+
(或
+
)共同定义了可用空间上限,
触发截断,
才能响应。
立即学习
“
前端免费学习笔记(深入)
”;
使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
下载
避免写
—— 它会强制固定高度,即使内容少也留白
配合
虽能拉伸,但需父容器有高度,且容易和
冲突;优先选
记得加
防止滚动到底后触发父页面滚动
relative父容器是overflow滚动的隐性前提
如果
元素的滚动始终不生效,先检查它的最近
(或
/
)祖先。这个祖先必须有明确高度,否则子元素的
/
偏移会相对于 viewport 计算,导致滚动区域错位。
父容器仅设
不够,还得有
、
或
等能产生块级约束的样式
若父容器是
,确保它没有
撑开子项(有时会干扰
元素的尺寸判定)
用浏览器开发者工具检查该
元素的 computed
和
,二者不等才说明有滚动余地
移动端要注意-webkit-overflow-scrolling
iOS Safari 旧版本(iOS 12 及之前)中,
+
容器滚动卡顿、回弹失效,需要启用惯性滚动:
这个属性现在基本可视为兼容性补丁,现代 iOS 已默认启用,但若测试中发现滚动生硬、松手即停,就加上它。
只对已启用
的元素生效,不能解决无滚动条的问题
在某些混合滚动场景(如父容器也在滚动)下可能引发嵌套冲突,此时需加
注意它已被标记为非标准,但目前仍是 iOS 上最稳妥的平滑方案
滚动能否出现,从来不是单看
写没写,而是看这个元素是否真正被“框住”了——尺寸、定位上下文、父容器约束,缺一不可。最容易忽略的是:
元素的
必须相对于某个有高度的包含块起作用,而不是凭空生效。
position: absoluteoverflow: autooverflow-y: scrollabsoluteoverflowdivposition: absolute; overflow-y: scroll;widthheightmax-heightpaddingborderabsolutetopbottomheight: autooverflowheightmax-heightoverflow-y.scroll-panel {
position: absolute;
top: 40px;
left: 0;
right: 0;
max-height: 200px;
overflow-y: auto;
}topbottomtopmax-heightmax-heightoverflow-yheight: 200pxbottom: 0topoverflowmax-heightoverscroll-behavior-y: containabsoluteposition: relativeabsolutefixedtopbottomposition: relativeheightmax-heightflex: 1display: flexalign-items: stretchabsoluteabsoluteheightscrollHeightabsoluteoverflow.scroll-panel {
-webkit-overflow-scrolling: touch;
}overflowoverscroll-behavior: noneoverflowabsolutemax-height