页脚出现在内容区域

Footer appears in Content's area

我正在使用 Next.js 和 antd 的布局组件来获取仪表板样式页面,使用它们的 Layout 组件。我在这里有两个样式 (CSS) 问题:

我重现了错误here in the CodeSandbox

不幸的是,我不能编辑你的脚本,但在看过它之后。我建议你放置:

<Footer style={{ textAlign: "center" }}>
            Ant Design ©2018 Created by Ant UED
          </Footer>

在布局标签之后。

您需要将页脚在第 119-120 行之间向下移动,这应该可以解决。这会将页脚放在与侧边栏相同的容器中。

所以这个问题是由于多个 <Layout /> 组件及其子组件在具有不同高度时相互交互的方式而发生的。子 LayoutContent 组件似乎总是(不是 100%,它总是)从它们的父组件 Layout 继承高度,或者至少总是有一个较小的高度。

目前,您的布局设置如下(伪代码):

<Layout>
  <Layout restrictedHeight >
    <Layout inheritedRestrictedHeight>
      <Content inheritedRestrictedHeight >
        <div unrestrictedHeight />
      </Content> //Content "height" ends here
      <Footer fixedPosition /> //Always begins where Content ends
      //Div "height" ends here
    </Layout>
  </Layout>
</Layout>

由于页脚的实现方式,在 DOM 中它被放置在内容之后,但是由于大型 div 的 DOM 对象高度不受限制,它在内容容器下方很好地结束。这就是 Footer 组件出现在内容中间的原因。

原因是这一行:

<Layout hasSider={true} style={{ height: "100vh", marginTop: 64 }}>

您正在将高度 属性 设置为 100vh,表示 100% 视图高度,这实际上只是屏幕上 y 轴上当前可用的像素数。

您希望包含的布局对象是页面上所有内容的完整大小,而不是 100% 的视图高度,即使是屏幕外的内容。为此,只需将高度设置为 100% 而不是 100vh:

<Layout hasSider={true} style={{ height: "100%", marginTop: 64 }}>

编辑: 这也可以解决您的双滚动条问题。

更新和回答非滚动边栏

我终于有机会再看看这个,这是您需要为 Sider 组件设置屏幕显示高度的地方。

该组件作为 div 呈现给 DOM,其中包含内容的高度。对于浏览器来说,它不在乎它的那一部分不在屏幕上,因为你实际上是在告诉浏览器它应该有那么大。

为了让侧边栏滚动,您需要将高度限制为 space 的大小(导航栏右下方到屏幕底部)。为此,您需要计算 100vh 减去侧边栏 css/less 中导航栏的大小:height: calc(~"100vh - 64px"); 并确保 overflow-y 是自动的。

.sidebar {
  // fixed sider
  overflow-y: auto;
  overflow-x: hidden;
  height: calc(~"100vh - 64px");
  position: fixed;
  left: 0;
} 

这是更新后的 codesandbox

以后尽量把问题集中在一个主要问题上,这样会得到更好的答案。