React - 组件全屏(高度100%)

Thi*_*ent 45 css html5 reactjs

我坚持要显示一个名为"home"的React组件,它占据屏幕高度的100%.无论我使用CSS还是React内联样式,它都不起作用.

在下面的示例中,html,body#app设置为CSS:100%的高度.对于.home,我使用了内联样式(但无论我使用CSS还是内联样式都是一样的): 在此输入图像描述 问题似乎来自于<div data-reactroot data-reactid='1'>未设置高度:100%.

如果我使用Chrome开发者工具攻击它,它的工作原理是: 在此输入图像描述

那么在React中显示全高度组件的正确方法是什么?

欢迎任何帮助:)

bor*_*a89 33

html, body, #app, #app>div {
  height: 100%
}
Run Code Online (Sandbox Code Playgroud)

这将确保所有链条 height: 100%

  • 虽然这段代码可以回答这个问题,但提供关于_how_和/或_why_的额外[上下文](https://meta.stackexchange.com/q/114762)它解决了问题会改善答案的长期价值.提及为什么这个答案比其他答案更合适也没有什么坏处. (15认同)
  • @Dev-iL 而是告诉它应该做什么,为什么不做它应该做的。 (4认同)
  • 设置“html”和“body”的值是必要的,因为“100%”将遵循显式指定维度的“最接近”父级。这意味着如果“html”和“body”都有未指定的“height”,则具有“height: 100%”的子项无效。 (2认同)

小智 22

它让我烦恼了好几天.最后我利用CSS属性选择器来解决它.

[data-reactroot] 
        {height: 100% !important; }
Run Code Online (Sandbox Code Playgroud)

  • 你在哪里添加了这个? (6认同)
  • 应该接受的答案.确定添加:`position:absolute; 宽度:100%!重要; 身高:100%!重要;` (3认同)
  • 这有效,但可能会导致其他组件出现问题.需要有一种更"正确"的方式来做到这一点. (2认同)

小智 21

你也可以这样做:

body > #root > div {
  height: 100vh;
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢.在我的情况下,我错过了通过#root传递高度 (3认同)

mae*_*eak 13

我用 app.css 中的 css 类管理了这个

.fill-window {
    height: 100%;
    position: absolute;
    left: 0;
    width: 100%;
    overflow: hidden;
}
Run Code Online (Sandbox Code Playgroud)

将其应用于 render() 方法中的根元素

render() {
   return ( <div className="fill-window">{content}</div> );
}
Run Code Online (Sandbox Code Playgroud)

或内联

render() {
   return (
      <div style={{ height: '100%', position: 'absolute', left: '0px', width: '100%', overflow: 'hidden'}}>
          {content}
      </div>
   );
}
Run Code Online (Sandbox Code Playgroud)


Sui*_*nny 10

尝试 <div style = {{height:"100vh"}}> </div>


Dav*_*las 10

#app {
  height: 100%;
  min-height: 100vh;
}
Run Code Online (Sandbox Code Playgroud)

始终全视高度 min

  • 最小高度将覆盖高度 (2认同)

She*_*tor 9

尽管在这里使用了 React - 元素布局完全是 html/css 特性。

问题的根本原因height在于 css中的属性是如何工作的。当您使用高度的相对值(以 % 为单位)时 - 这意味着将相对于其父级设置高度。

所以,如果你有一个像一个结构html > body > div#root > div.app-使div.app100%的高度及其所有祖先应该有100%的高度。你可以玩下一个例子:

html {
  height: 100%;
}

body {
  height: 100%;
}

div#root {
  height: 100%; /* remove this line to see div.app is no more 100% height */
  background-color: indigo;
  padding: 0 30px;
}

div.app {
  height: 100%;
  background-color: cornsilk;
}
Run Code Online (Sandbox Code Playgroud)
<div id="root">
  <div class="app"> I will be 100% height if my parents are </div>
</div>
Run Code Online (Sandbox Code Playgroud)

几个论点:

  • 使用!important- 尽管有一段时间此功能在约 95% 的情况下很有用,但它表明 html/css 的结构很差。此外,这不是当前问题的解决方案。
  • 为什么不呢position: absolute。属性positon旨在更改元素相对于(自己的位置 - 相对,视口 - 固定,位置不是静态的最近父级 - 绝对)的呈现方式。Ans 尽管position: absolute; top: 0; right: 0; bottom: 0; left: 0;会导致相同的外观 - 它也会促使您将父项更改position为不是static- 因此您需要维护 2 个元素。这也会导致父 div 折叠成一行(0 高度)和内部 - 全屏。这在元素检查器中造成了混乱。


小智 6

body{
  height:100%
}

#app div{
  height:100%
}
Run Code Online (Sandbox Code Playgroud)

这对我有用..


小智 6

虽然这可能不是理想的答案,但试试这个:

style={{top:'0', bottom:'0', left:'0', right:'0', position: 'absolute'}}
Run Code Online (Sandbox Code Playgroud)

它保持大小附加到边框不是你想要的,但给你一些相同的效果.


jaf*_*mlp 6

<div style={{ height: "100vh", background: "#2d405f" }}>
   <Component 1 />
   <Component 2 />
</div>
Run Code Online (Sandbox Code Playgroud)

创建一个全屏的div,背景颜色为#2d405f


小智 5

我有同样的问题,将我的侧导航面板高度显示为 100%。

我修复它的步骤是:

在 index.css 文件中------

.html {
   height: 100%;
}
.body {
   height:100%;
}
Run Code Online (Sandbox Code Playgroud)

在 sidePanel.css (这给我带来了问题):

.side-panel {
   height: 100%;
   position: fixed; <--- this is what made the difference and scaled to 100% correctly
}
Run Code Online (Sandbox Code Playgroud)

为了清楚起见,其他属性已被删除,但我认为问题在于将嵌套容器中的高度缩放到 100%,就像您尝试在嵌套容器中缩放高度一样。父类高度将需要应用 100%。- 我很好奇的是为什么固定:位置校正比例,没有它就会失败;这是我最终会通过更多练习学到的东西。

我已经和 react 一起工作了一个星期,我是 Web 开发的新手,但我想分享一个我发现的将高度缩放到 100% 的修复程序;我希望这可以帮助您或任何有类似问题的人。祝你好运!


Nis*_*tty -2

尝试使用 !important in height。这可能是因为其他一些样式影响了您的 html 正文。

{ height : 100% !important; }
Run Code Online (Sandbox Code Playgroud)

您也可以在 VP 中给出值,它将设置您提到的 viee 端口像素的高度height : 700vp;,但这不会是可移植的。