将网格高度调整为可用屏幕,无需滚动条

时间:2017-10-22 06:35:14

标签: html css html5 css3 css-grid

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

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

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>

3 个答案:

答案 0 :(得分:2)

主要浏览器通常会在body元素上设置默认边距。它通常是8px,recommended by the W3C

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

100% + 8px > the viewport height

简单的解决方法是使用您自己的:

覆盖浏览器的默认规则
body { margin: 0; }

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

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

使用box-sizing: border-box时,内容长度会考虑填充和边框(但不是边距)。

&#13;
&#13;
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;
}
&#13;
<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>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

除了将html,body上的边距设置为0之外,我发现唯一可行的是:

html, body {
  height: 96vh;
}

答案 2 :(得分:1)

您必须从包装

中减去额外的保证金

calc(100vh - 16px)

然后不需要在身体上使用100%。