将网格高度调整为可用屏幕,无需滚动条 [英] Adjust grid height to available screen without scrollbar

查看:178
本文介绍了将网格高度调整为可用屏幕,无需滚动条的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我应该使用什么网格属性来将网格完美地保留在屏幕内?

What grid property should I use to keep the grid perfectly inside the screen?

使用高度:100vh; on .wrapper 调整高度,但它会引入滚动条。要删除不需要的滚动条,我尝试设置 body {margin:0;} 但是我希望在整个网格周围有一个边距而不生成滚动条。我确定这是一个简单的解决方法,但请帮助我!

Using height: 100vh; on .wrapper adjusts the height, but it introduces the scrollbars. To remove the unwanted scrollbars, I tried setting body{margin:0;} but I want to have a margin surrounding the entire grid without producing the scrollbars. I'm sure this is an easy fix, but please help me!

Codepen: https://codepen.io/reiallenramos/pen/yzroxe

html,
body {
  height: 100%;
  width: 100%;
}

body {
  background-color: lightcyan;
}

.wrapper {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-template-rows: repeat(6, 1fr);
  grid-gap: 8px;
  height: 100vh;
}

.wrapper>div {
  background-color: #eee;
}

.wrapper>div:nth-child(odd) {
  background-color: #ddd;
}

.item1 {
  grid-column: 1/2;
  grid-row: 1/5;
}

.item2 {
  grid-column: 2/3;
  grid-row: 1/3;
}

.item3 {
  grid-column: 3/5;
  grid-row: 1/3;
}

.item4 {
  grid-column: 2/4;
  grid-row: 3/5;
}

.item5 {
  grid-column: 4/5;
  grid-row: 3/6;
}

.item6 {
  grid-column: 1/3;
  grid-row: 5/7;
}

.item7 {
  grid-column: 3/4;
  grid-row: 5/7;
}

.item8 {
  grid-column: 4/5;
  grid-row: 6/7;
}

<div class="wrapper">
  <div class="item item1">1</div>
  <div class="item item2">2</div>
  <div class="item item3">3</div>
  <div class="item item4">4</div>
  <div class="item item5">5</div>
  <div class="item item6">6</div>
  <div class="item item7">7</div>
  <div class="item item8">8</div>
</div>

推荐答案

主要浏览器通常在 body 元素上设置默认边距。它通常是8px,如W3C推荐的

Major browsers normally set a default margin on the body element. It's usually 8px, as recommended by the W3C.

因此,将正文元素或其他容器设置为 height:100% ,垂直滚动条将呈现,因为存在溢出情况:

Therefore, when setting the body element or another container to height: 100%, a vertical scrollbar will render because there is an overflow condition:

100% + 8px > the viewport height

简单的解决方法是使用您自己的规则覆盖浏览器的默认规则:

The simple workaround is to override the browser's default rule with your own:

body { margin: 0; }

但是,在这种情况下,您需要主容器周围的间隙。你不想要滚动条。

However, in this case, you want the gap around the main container. You don't want the scrollbar.

然后只需用 padding替换 margin ,并使用 box-sizing:border-box

使用 box-sizing:border-box ,填充和边框(但不是边距)是内容长度的因素。

With box-sizing: border-box, padding and borders (but not margins) are factored into the content length.

body {
  margin: 0;
  background-color: lightcyan;
}

/* NEW */
* {
  box-sizing: border-box;
}

.wrapper {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-template-rows: repeat(6, 1fr);
  grid-gap: 8px;
  padding: 8px; /* NEW */
  height: 100vh;
}

.wrapper>div {
  background-color: #eee;
}

.wrapper>div:nth-child(odd) {
  background-color: #ddd;
}

.item1 {
  grid-column: 1/2;
  grid-row: 1/5;
}

.item2 {
  grid-column: 2/3;
  grid-row: 1/3;
}

.item3 {
  grid-column: 3/5;
  grid-row: 1/3;
}

.item4 {
  grid-column: 2/4;
  grid-row: 3/5;
}

.item5 {
  grid-column: 4/5;
  grid-row: 3/6;
}

.item6 {
  grid-column: 1/3;
  grid-row: 5/7;
}

.item7 {
  grid-column: 3/4;
  grid-row: 5/7;
}

.item8 {
  grid-column: 4/5;
  grid-row: 6/7;
}

<div class="wrapper">
  <div class="item item1">1</div>
  <div class="item item2">2</div>
  <div class="item item3">3</div>
  <div class="item item4">4</div>
  <div class="item item5">5</div>
  <div class="item item6">6</div>
  <div class="item item7">7</div>
  <div class="item item8">8</div>
</div>

这篇关于将网格高度调整为可用屏幕,无需滚动条的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆