CSS 溢出未按预期工作,无法滚动到 div 底部

Posted

技术标签:

【中文标题】CSS 溢出未按预期工作,无法滚动到 div 底部【英文标题】:CSS overflow not working as expected and unable to scroll to bottom of div 【发布时间】:2019-11-09 19:21:07 【问题描述】:

我的目标是设置一个带有粘性标题和左侧边栏的布局,以及可以滚动的非粘性DashboardBody(绿色边框框)(在这种情况下,顶部的内容会消失“下“粘性标题)。我正在使用 styled-components,标题下的两个框被包裹在使用 flexbox 的 BelowNavContainer 中。

组件ProjectContainer 包围了整个视图(包括标题和侧边栏)。因为我只想要DashboardBody 部分上的滚动条,所以我为此设置了overflow: auto,为ProjectContainer 设置了overflow: hidden。但是,这会导致用户无法看到 DashboardBody 的底部 - 滚动条的底部(带有向下的箭头)也不可见。

如果我将overflow: auto 设置为ProjectContainer,则会添加一个额外的滚动条,我可以使用这两个滚动条滚动到DashboardBody 的底部。但显然,我只想要一个滚动条。

我做错了什么,我该如何解决?

我查看了相关的“溢出不起作用”问题。他们的解决方案不起作用,因为我已经指定了 height 值。

工作演示:https://codesandbox.io/s/overflow-woes-i4dww

注意:似乎 CodeSandbox 本身在视图中添加了一个滚动条,所以我认为最外面的可以忽略。在我自己的机器上使用 webpack-dev-server(来自 create-react-app),我的滚动条比 CodeSandbox 显示的少一个。

我希望DashboardBody 有一个滚动条,可以让我滚动到 div 的底部。我只希望这个组件有一个滚动条,即滚动条不应从标题旁边的屏幕顶部开始。

目前,如果不向其封闭的 div ProjectContainer 添加另一个滚动条,我似乎无法到达其滚动条的底部。

【问题讨论】:

添加呈现的 html 和 CSS 来演示问题可能很有用。这是example。 我为你想出了一个解决方案,但是类名在刷新时会发生变化,使得修改后的演示变得不必要的乏味。在问题本身中发布编译代码总是更好。 感谢@showdev 的反馈,我对这个菜鸟问题不好,但为了将来参考,如果我在代码沙箱或类似的游乐场中编写代码,我将如何去做? 不用担心。我认为这可能取决于您使用的浏览器。我在浏览器的开发人员控制台中处理了元素检查器中的 HTML,然后复制了generated stylesheet。对于未来的兴趣,请参阅Tools to selectively copy HTML+CSS+JS from existing sites。 【参考方案1】:

您的标题有 100px 高度,下面的内容有 100vh(表示整个屏幕)。 如果要在不使用另一个滚动条的情况下达到底部,则应将内容高度更改为:calc(100vh - 100px)。是你要找的吗?

【讨论】:

【参考方案2】:

问题在于BelowNavContainer 组件。

您已将其高度设置为 100vh,但请注意其上方有页眉,因此现在整个页面的总高度为:

标头高度 + 100vh(BelowNavContainer 高度)。

当您将其父组件:ProjectContainer 高度设置为 100%,overflow: hidden,这将隐藏 DashboardBody' 组件的底部。

解决办法:

BelowNavContainer的高度如下: height: calc(100vh - 100px)

as 100px: 是你标题的高度

你可以see this wrking demo

【讨论】:

看来你也改了body margin:0; 。您可能会在回答中提到这一点。 是的,以确保删除默认应用于反应体的 8px 边距

以上是关于CSS 溢出未按预期工作,无法滚动到 div 底部的主要内容,如果未能解决你的问题,请参考以下文章

表格滚动未按预期工作

滚动到 React 中溢出的 div 的底部

CSSTransition过渡输入活动事件未按预期工作

UICompositionalLayout 未按预期工作(垂直表格滚动 + 水平分页)

GSAP ScrollTrigger 未按预期工作

绝对底部定位在 Edge 和 IE 中未按预期工作