反应页面保持页脚在页面底部

Posted

技术标签:

【中文标题】反应页面保持页脚在页面底部【英文标题】:React page keep footer at the bottom of the page 【发布时间】:2017-02-12 22:07:55 【问题描述】:

尝试在页面底部修复页脚时遇到问题,如下图所示:

虽然我谷歌并看到了很多建议,但我仍然面临这个问题。我怀疑这个问题是<div data-reactroot></div> 不能将高度设置为 100% 作为它的父母。有人可以帮我吗?

提前致谢!

更新: 页脚样式:

borderTop: '1px solid #ddd',
height: '60px',
lineHeight: '60px',
backgroundColor: 'white'

【问题讨论】:

确保您设置了html, body height: 100% 是的,我确定html, body height: 100% 我尝试将height 和/或min-height<div id="bms-root"> 设置为100%,但我得到了相同的结果。 当前页脚问题是什么?固定页脚是什么样的? 我想在页面底部修复页脚。这意味着页脚应始终显示在底部。 【参考方案1】:

您需要告诉您的页脚将自己定位到周围容器的底部:

页脚CSS:

position:absolute;
left:0;
bottom:0;
right:0;

对于容器(react-root div):

padding-bottom:60px;

作为替代方案(如果您不需要支持 IE 8),您可以在 div.container 上尝试这种风格:

height: calc(100% - 60px);

【讨论】:

工作正常。再次感谢你。顺便说一句,我怎样才能在屏幕中心显示文本“无结果”? 此解决方案对滚动不友好,滚动时页脚会停留在其初始位置 如果您需要滚动友好的解决方案,请使用 position:fixed;始终保持在底部。您可能还需要添加 z-index 以使其高于其他元素。【参考方案2】:

对于上述解决方案不适用的任何其他人,您可以尝试以下步骤:

    div一个非静态position,例如relative(记住默认positionstatic) 给 div 的最小高度为100vh;这使它能够垂直占用所有可用空间 然后对于页脚 (child),如果不是,它应该被包裹在 div 中,给它以下属性; position: absolute; bottom: 0; width: 100%

更新:在某些情况下,将页脚 div position 设置为 absolute 可能不起作用。在这种情况下,请改用relative

希望上述步骤可以解决它:-)

【讨论】:

似乎“相对”只适用于比浏览器窗口长的页面,而“绝对”只适用于比浏览器窗口更小或等高的页面。 是的@Lerk,看起来是这样【参考方案3】:

拥有内容包装器并将其最小高度设置为 100vh 很重要:

min-height: 100vh; (100% of the viewport height)

min-height: 100%; (100% of the parent's element height)

看看这里对我有很好的解释和工作: https://medium.com/@zerox/keep-that-damn-footer-at-the-bottom-c7a921cb9551

【讨论】:

【参考方案4】:

我相信每个人都在这里缺少的一个技巧是,在 React 中,在 html 和 body 元素之后,还有一个带有 #root 的 div,它包含了整个内容。请参考下图。

因此,需要将高度设为所有 3 的 100%,即 html、body 和 #root。

html, body, #root 
  height: 100%;

然后在#root中添加这些属性:

#root 
 display: flex;
 flex-direction: column;

您一定想知道为什么#root 需要是 flex 而不是 body。原因是它是最内层的父级,或者我应该说是页脚的最接近的父级。

现在,最后只为页脚执行此操作:

footer:  margin-top: auto 

上面的行所做的是将页脚推到其父级的末尾。 就如此容易。这里没有什么花哨的。无需计算高度或更改页脚位置。

【讨论】:

我不得不将它从 100% 更改为 100vh,但这对我有用。【参考方案5】:

您是否尝试为您的页面添加一个包装器,以便您可以将页脚绝对定位在底部?如果是这样,您可以为此创建一个具有相对位置的新组件,并将其他组件作为子组件传入,并将您的页脚绝对定位在底部。

【讨论】:

【参考方案6】:

希望我早点阅读。 这是Ikechuk 答案的sn-p,请注意现在footer 也尊重边距(在上面的任何其他答案中可能没有):

html, body, div
      height:100%;
      width:100%
      display:block;
    
    footer
      position:absolute;
      bottom:0;
      display:block;  
      width:100%
      
 
 hr
      display: block;
    unicode-bidi: isolate;
    margin-block-start: 0.5em;
    margin-block-end: 0.5em;
    margin-inline-start: auto;
    margin-inline-end: auto;
    overflow: hidden;
    border-style: inset;
    border-width: 1px;
 
<html>
<body>

<div style="margin=5%;">
<div style="position:relative">
<footer>
  <hr>
  I am footer
</footer>

</div>
</div>
</body>
</html>

【讨论】:

【参考方案7】:

我会按如下方式更改页脚 css:

  position: fixed;
  left:0;
  bottom:0;
  right:0;

position: absolute 是可能的,但它不适合滚动。

【讨论】:

以上是关于反应页面保持页脚在页面底部的主要内容,如果未能解决你的问题,请参考以下文章

Vue组件更改时将页脚保留在页面底部

如何将页脚固定在页面底部

DIV 底部的页脚而不是页面底部。引导程序

将页脚保留在页面底部,仅在滚动后出现

如何将页脚固定在页面底部

如果页面很短,将 HTML 页脚保持在窗口底部