强制css网格容器填满设备的全屏

met*_*rix 48 html css css-grid

如何强制css网格容器获取单页应用程序的设备屏幕的整个宽度和高度?修改后的示例来自Mozilla:Firefox文档

.wrapper {
  display: grid;
  border-style: solid;
  border-color: red;
  grid-template-columns: repeat(3, 1fr);
  grid-template-rows: repeat(3, 1fr);
  grid-gap: 10px;
}
.one {
  border-style: solid;
  border-color: blue;
  grid-column: 1 / 3;
  grid-row: 1;
}
.two {
  border-style: solid;
  border-color: yellow;
  grid-column: 2 / 4;
  grid-row: 1 / 3;
}
.three {
  border-style: solid;
  border-color: violet;
  grid-row: 2 / 5;
  grid-column: 1;
}
.four {
  border-style: solid;
  border-color: aqua;
  grid-column: 3;
  grid-row: 3;
}
.five {
  border-style: solid;
  border-color: green;
  grid-column: 2;
  grid-row: 4;
}
.six {
  border-style: solid;
  border-color: purple;
  grid-column: 3;
  grid-row: 4;
}
Run Code Online (Sandbox Code Playgroud)
<html>
<div class="wrapper">
  <div class="one">One</div>
  <div class="two">Two</div>
  <div class="three">Three</div>
  <div class="four">Four</div>
  <div class="five">Five</div>
  <div class="six">Six</div>
</div>
</html>
Run Code Online (Sandbox Code Playgroud)
我不知道如何让这段代码工作.任何想法/建议将不胜感激.

NST*_*tle 78

如果您利用width: 100vw;和height: 100vh;,应用这些样式的对象将拉伸到设备的整个宽度和高度.

另请注意,有时候填充和边距可以通过浏览器等添加到您的视图中.我添加了一个*全局无填充和边距,因此您可以看到差异.记住这一点.

*{
  box-sizing: border-box;
  padding: 0;
  margin: 0;
}
.wrapper {
  display: grid;
  border-style: solid;
  border-color: red;
  grid-template-columns: repeat(3, 1fr);
  grid-template-rows: repeat(3, 1fr);
  grid-gap: 10px;
  width: 100vw;
  height: 100vh;
}
.one {
  border-style: solid;
  border-color: blue;
  grid-column: 1 / 3;
  grid-row: 1;
}
.two {
  border-style: solid;
  border-color: yellow;
  grid-column: 2 / 4;
  grid-row: 1 / 3;
}
.three {
  border-style: solid;
  border-color: violet;
  grid-row: 2 / 5;
  grid-column: 1;
}
.four {
  border-style: solid;
  border-color: aqua;
  grid-column: 3;
  grid-row: 3;
}
.five {
  border-style: solid;
  border-color: green;
  grid-column: 2;
  grid-row: 4;
}
.six {
  border-style: solid;
  border-color: purple;
  grid-column: 3;
  grid-row: 4;
}
Run Code Online (Sandbox Code Playgroud)
<html>
<div class="wrapper">
  <div class="one">One</div>
  <div class="two">Two</div>
  <div class="three">Three</div>
  <div class="four">Four</div>
  <div class="five">Five</div>
  <div class="six">Six</div>
</div>
</html>
Run Code Online (Sandbox Code Playgroud)

  • 遗憾的是,这在通用情况下不起作用(即,如果你不知道你的容器是否在顶层),因为vw和vh是相对于窗口大小的,无论你的网格是如何嵌套的. (4认同)
  • ^ 那是正确的。这仅适用于设备宽度/高度,而不是延伸到其父级全宽/高度的嵌套容器。嵌套容器需要适当大小的父容器,并带有响应式 CSS 选择器,例如 % 或 ems 用于子容器。 (2认同)
  • 请记住,这可能无法按滚动条的预期工作。根据[规范](https://drafts.c​​sswg.org/css-values-3/#vh),“但是,假设任何滚动条都不存在。” 对于出现在内容*顶部*的滚动条,这不是问题,但是对于为滚动条添加空间的滚动条(典型),“100vh”或“100vw”可能会导致在另一个滚动方向上不必要的滚动,如果滚动条存在。比较 https://jsfiddle.net/mtgk7vbe/4/ (50vw 且无水平滚动条)和 https://jsfiddle.net/mtgk7vbe/5/ (100w 且水平滚动条)。 (2认同)

Pet*_*ter 9

您可以添加position: fixed;使用top left right bottom 0旧版浏览器上的属性,该解决方案的工作了。

如果要嵌入它,请添加position: absolute;到包装器,然后添加到包装器position: relative外部的 div。

.wrapper {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;

  display: grid;
  border-style: solid;
  border-color: red;
  grid-template-columns: repeat(3, 1fr);
  grid-template-rows: repeat(3, 1fr);
  grid-gap: 10px;
}
.one {
  border-style: solid;
  border-color: blue;
  grid-column: 1 / 3;
  grid-row: 1;
}
.two {
  border-style: solid;
  border-color: yellow;
  grid-column: 2 / 4;
  grid-row: 1 / 3;
}
.three {
  border-style: solid;
  border-color: violet;
  grid-row: 2 / 5;
  grid-column: 1;
}
.four {
  border-style: solid;
  border-color: aqua;
  grid-column: 3;
  grid-row: 3;
}
.five {
  border-style: solid;
  border-color: green;
  grid-column: 2;
  grid-row: 4;
}
.six {
  border-style: solid;
  border-color: purple;
  grid-column: 3;
  grid-row: 4;
}
Run Code Online (Sandbox Code Playgroud)
<html>
<div class="wrapper">
  <div class="one">One</div>
  <div class="two">Two</div>
  <div class="three">Three</div>
  <div class="four">Four</div>
  <div class="five">Five</div>
  <div class="six">Six</div>
</div>
</html>
Run Code Online (Sandbox Code Playgroud)

  • 我想说这个答案错误地将旧的 CSS 方法与新的 CSS 方法混合在一起,你应该寻求使用已接受的答案的更新方法,事实上可能会撤销一些 CSS 网格功能,所以我' d 建议不要采用这种方法。 (2认同)
  • 这对我来说(在 Firefox 上)比接受的答案更好。接受的答案给了我滚动条并更改相对于主文档的大小。 (2认同)

Fle*_*euv 7

为全高页面设置的两个重要CSS属性是:

  1. 让身体长得和它所需要的一样高.

    html { height: 100%; }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 强迫身体不要小于窗户高度.

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

你用你的网格做什么是无关紧要的,只要你使用分数或百分比,你应该在所有情况下都是安全的.

看看这个常见的仪表板布局.

  • 我会说这个答案错误地将旧的 CSS 方法与新的方法混合在一起,您应该在其中使用已接受的答案的更新方法。虽然这个答案可能_work_,但它也增加了 html + body 元素和被样式化的元素之间的耦合,所以我建议不要使用这种方法。 (3认同)