代码之家  ›  专栏  ›  技术社区  ›  Tom

在CSS网格中,如果总空间超过父空间的100%,为什么不呈现显式行?

  •  6
  • Tom  · 技术社区  · 8 年前

    使用CSS网格,我试图创建一个(有时)花费超过 100% 包含元素的高度。如何做到这一点?

    100% ,显式网格显示得很好:

    enter image description here

    https://codepen.io/tommedema/pen/dKqwrZ?editors=1100#0

    但是,如果前面的行超过100%,则第三行将突然消失,即使它已明确定义:

    enter image description here

    https://codepen.io/tommedema/pen/jKvdOO?editors=1100#0

    请注意,没有滚动条向下移动40%(140-100),这是我所期望的。

    当显式定义 grid-row

    新CSS:

    html, body {
      height: 100%;
    }
    
    body {
      background-color: #ddd;
    
      display: grid;
      grid-template-columns: 1fr 1fr 1fr;
      grid-template-rows: 20% 100% 20%;
    }
    
    /* 
      allows for row overflow to not be cropped
      see also https://stackoverflow.com/questions/51048661
    */
    body::after {
      content: "";
      grid-row: 1 / -1;
    }
    

    https://codepen.io/tommedema/pen/MXqRPW?editors=1100#0

    ::after 此技巧不适用于此内部网格。

    1 回复  |  直到 8 年前
        1
  •  3
  •   Michael Benjamin William Falcon    8 年前

    为了更简单、更强的解决方案,请使用 vh 单位。

    body {
      background-color: #ddd;
      display: grid;
      grid-template-columns: 1fr 1fr 1fr;
      grid-template-rows: 20vh 100vh 20vh;
    }
    

    revised codepen 1

    从 CSS Grid specification grid-template-columns 和 grid-template-rows :

    然后 <percentage> 必须被视为 auto

    因此,如果你释放固定高度并使用, min-height: 100% 20% 100% 20% 确定容器的高度,计算到 因此,根据 auto algorithm ,解析为三个高度相等的行。

    revised codepen 2