防止固定页脚重叠内容

Rob*_*gan 19 html css

我已将我的页脚DIV修复到视口底部,如下所示:

#Footer
{
    position: fixed;
    bottom: 0;
}
Run Code Online (Sandbox Code Playgroud)

如果页面上的内容不多,则效果很好.但是,如果内容填满页面的整个高度(即垂直滚动条可见),则页脚与内容重叠,我不会这样做.

如何让页脚粘贴到视口的底部,但从不重叠内容?

Sco*_*ver 14

现代的"粘性页脚"解决方案将使用flexbox.

tl; dr ::将容器(主体)设置为display:flex;flex-direction:column要移动到的子(页脚)margin-top:auto.

首先,我们将主体设置为垂直"弯曲"其项目,确保其高度为100%.

然后我们设置flex: 0 0 50px页脚元素,这意味着:"不长大,不缩小,高度为50px".事实上,我们可以flex完全省略属性,然后继续使用height:50px.

我们可以稍微有点鲁莽地设置它本身的display:flex东西<body>,因为flex容器的子元素有一个隐含值flex: 0 1 auto(aka flex:initial)如果省略,它(几乎)等价于flex:none(这是简写 flex:0 0 auto):

该项目根据其宽度和高度属性进行调整.它缩小到最小尺寸以适应容器,但不会增长以吸收Flex容器中的任何额外自由空间.(MDN)

就粘性部分而言,margin-top:auto 页脚上的内容为我们提供了我们想要的东西.应用于弹性容器中,自动边距呈现出新的含义,而不是通常的"获得相等数量的可用空间",它们意味着"吸收所有可用空间".

从规范(8.1.与自动边距对齐):

在通过justify-content和align-self进行对齐之前,任何正空闲空间都会分配到该维度中的自动边距.

陈述更简单:

如果将自动边距应用于弹性项目,则该项目将自动扩展其指定的边距以占用弹性容器中的额外空间

另外:"普通"的flexbox布局方法可能是将中间部分ala弯曲<div id="main>...</div>到100%垂直,这会使页脚"粘住"到底部.这种方法向我们展示了灵活的盒子模型实际上足够灵活,可以让我们调整/移动隔离元素.

body {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}

#footer {
  background-color: #efefef;
  flex: 0 0 50px;/*or just height:50px;*/
  margin-top: auto;
}
Run Code Online (Sandbox Code Playgroud)
<p>we've assumed only that there's random space-taking content above the footer...</p>

<p>lorem ipsum dolor flex...</p>
<div>
  <p>random content.</p><p>random content.</p><p>random content.</p><p>random content.</p>
</div>
<div id="footer">FOOTER</div>
Run Code Online (Sandbox Code Playgroud)


Adr*_*ian 11

问题是fixed位置将其从文档流中移除。您可以添加margin-bottom等于#Footer. 这将确保页脚后面总是有一个等于其高度的空白空间,防止它与内容重叠。


小智 1

尝试将位置属性设置为静态

position: static;
Run Code Online (Sandbox Code Playgroud)