React - 粘页脚问题:App 组件底部的页脚;应用程序组件不在正文底部

Posted

技术标签:

【中文标题】React - 粘页脚问题:App 组件底部的页脚;应用程序组件不在正文底部【英文标题】:React - Sticky Footer issue: Footer at bottom of App component; App component not at bottom of Body 【发布时间】:2018-09-03 21:40:57 【问题描述】:

我在反应中遇到了粘滞页脚的问题。我实现了在CSS Tricks上看到的flexbox解决方案,但是问题是footer在主App组件的底部,而App组件却不在body底部。这是一张说明这个问题的图片:

一些代码: 在我的 App 组件的渲染函数中,我返回了这个:

render() 
  return (
    <div className="App">
      <div className="all-but-footer">
        <Header />
          <main className="content">
            <Switch>
              <Redirect from="/" to="/bio" exact />
              <Route path="/bio" exact component=Bio />
            </Switch>

            <Route path="/videos" exact component=Videos />
            <Route path="/gallery" exact component=Gallery />
            <Route path="/magnet-podcast" exact component=MagnetPodcast />
          <Route path="/contact" exact component=Contact />
        </main>
      </div>

    <Footer />
  </div>

当然,我会通过以下方式连接到根 div:

document.addEventListener('DOMContentLoaded', () => 

  const root = document.getElementById('root');

  ReactDOM.render(
    <Root />, root);
  registerServiceWorker();
);

在我的 index.html 中使用根 div,如下所示:

<!DOCTYPE html>
<html lang="en">
  <head>
    <link rel="manifest" href="%PUBLIC_URL%/manifest.json">
    <link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">
    <title>Louis Kornfeld</title>
  </head>
  <body>

    <div id="root"></div>

  </body>
</html>

在我的 CSS 中,我尝试将应用程序的高度设置为 100%,甚至尝试将 index.html 中的根 div 的高度设置为 100%。身体唯一的孩子是根 div,根 div 的孩子是 App,所以我认为将这些所有高度设为 100% 会拉伸组件,但没有任何效果。

有什么想法可以解决这个问题吗?

【问题讨论】:

试试100vh,看看这个空白是什么。 另外,你能否用以下元素的样式更新问题:body、root div、App div(如果它是 root div 的唯一子元素)和 App div 的子元素?这真的很有帮助! 那么你想把页脚放在正文的底部吗? @Aaqib 是的,我希望页脚位于页面底部,下方没有空间。 我已经在下面回答了您的问题,您只需要使用 getElementByTagName 并将门户包裹在粘性页脚或您想要显示在底部的组件上 【参考方案1】:

通常,当您从组件的渲染方法返回元素时,它会作为最近父节点的子节点挂载到 DOM 中

如果你想将一个子元素插入到 DOM 中的不同位置,你可以使用React Portals

对我有用的是react-portal,您可以将其安装为项目依赖项npm install --save react-portal

在你的组件内部你可以:

    import  Portal  from 'react-portal';

    <Portal>
      This text is portaled at the end of document.body!
    </Portal>

    <Portal node=document && document.getElementById('youCanSelectAnyIdFromTheDOM')>

    This text is portaled into San Francisco!
   </Portal>

你可以阅读更多关于react-portalHere

【讨论】:

以上是关于React - 粘页脚问题:App 组件底部的页脚;应用程序组件不在正文底部的主要内容,如果未能解决你的问题,请参考以下文章

底部粘页脚不重叠

完全滚动后粘页脚

Angular Material 固定工具栏和粘页脚

尝试使用 CSS 粘页脚时无法在移动设备中滚动

如何隐藏主页的页脚组件?

流体布局底部的页脚