为什么css网格中的孩子水平地拿取100%,而垂直地只拿取90%?

cyej8jka  于 2023-02-14  发布在  其他
关注(0)|答案(3)|浏览(133)

我不明白为什么水平方向看起来一切都很完美,但垂直方向就像你在图中看到的那样,没有边距。如果这对网格占整个宽度有效:

grid-template-columns: repeat(3, 30%);

为什么这对取整个高度不起作用?:

grid-template-rows: repeat(3, 30%);

这是密码:. box是容器,. card是子项:
一个二个一个一个

scyqe7ek

scyqe7ek1#

您需要在box类的容器上设置高度,并使用fr作为单位,而不是百分比。您需要容器高度,以便网格单元格可以根据它计算它们的高度。如果您使用fr而不是百分比,则在根据grid-template-columns和grid-template-rows的设置划分剩余空间之前,首先从容器宽度/高度中减去网格间隙。下面是一个工作示例:

<div class="box">
  <div class="card"></div>
  <div class="card"></div>
  <div class="card"></div>

  <div class="card"></div>
  <div class="card"></div>
  <div class="card"></div>

  <div class="card"></div>
  <div class="card"></div>
  <div class="card"></div>
</div>
body {
  margin: 0;
}

.box {
    background-color: hotpink;
    height: 100vh;
    width: 100vw;
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    grid-template-rows: repeat(3, 1fr);
    grid-gap: 12px;
}

.card{
    border: 10px solid gray; // even with 10px or more nothing exceeds the container boundaries any more
    //height: 100%; // you do not need this, since the height is being calculated as a fr of the container height
    //box-sizing: border-box; // if you decide to set a height nonetheless you have to change box-sizing so the borders are not taking up extra space
    background-color: skyblue;
    border-radius: 6px;
}
zxlwwiss

zxlwwiss2#

尝试将30%替换为1fr

grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(3, 1fr);
dly7yett

dly7yett3#

我肯定是迟到了,但是对于任何需要它的人,父容器grid-auto-rows的属性

相关问题