代码之家  ›  专栏  ›  技术社区  ›  Jens Törnell

CSS网格行应该一直跨越

  •  3
  • Jens Törnell  · 技术社区  · 5 年前

    我在这个例子中使用CSS网格。在这种情况下,网格包含什么并不重要。

    .wrap 有一个红色的背景。我想要 aside main . 这意味着红色的背景不应该再被看到,被灰色和白色覆盖。

    1fr 但在这种情况下,这并没有多大作用。我也试过了 auto 但没有区别。

    * {
      padding: 0;
      margin: 0;
      color: #fff;
    }
    
    .wrap {
      height: 300px;
      background: red;
    }
    
    .content {
      background: green;
      display: grid;
    
      grid-template-areas: "header header"
                            "aside main"
                           "footer footer";
                           
      grid-template-columns: 300px 1fr;
      grid-template-rows: 48px 1fr 50px;
    }
    
    header {
      grid-area: header;
      background: black;
    }
    
    aside {
      grid-area: aside;
      background: #333;
    }
    
    main {
      grid-area: main;
      background: #fff;
      color: #000;
    }
    
    footer {
      grid-area: footer;
      background: blue;
    }
    <div class="wrap">
      <div class="content">
        <header>Header</header>
        <aside>Aside</aside>
        <main>Main</main>
        <footer>Footer</footer>
      </div>
    </div>
    3 回复  |  直到 5 年前
        1
  •  5
  •   Andy Hoffman    5 年前

    你需要设置 height: 100% .content .wrap 设置 height

    * {
      padding: 0;
      margin: 0;
      color: #fff;
    }
    
    .wrap {
      height: 300px;
      background: red;
    }
    
    .content {
      background: green;
      display: grid;
    
      grid-template-areas: "header header"
                            "aside main"
                           "footer footer";
                           
      grid-template-columns: 300px 1fr;
      grid-template-rows: 48px 1fr 50px;
      height: 100%; /* Added */
    }
    
    header {
      grid-area: header;
      background: black;
    }
    
    aside {
      grid-area: aside;
      background: #333;
    }
    
    main {
      grid-area: main;
      background: #fff;
      color: #000;
    }
    
    footer {
      grid-area: footer;
      background: blue;
    }
    <div class="wrap">
      <div class="content">
        <header>Header</header>
        <aside>Aside</aside>
        <main>Main</main>
        <footer>Footer</footer>
      </div>
    </div>
        2
  •  3
  •   Dacre Denny    5 年前

    如果我正确地理解了你的问题,那么可以通过添加 height:100% .content 这会导致 <aside> <main> 元素垂直展开以填充 .wrap

    * {
      padding: 0;
      margin: 0;
      color: #fff;
    }
    
    .wrap {
      height: 300px;
      background: red;
    }
    
    .content {
    /* Add this */
      height:100%;
      background: green;
      display: grid;
    
      grid-template-areas: "header header"
                            "aside main"
                           "footer footer";
                           
      grid-template-columns: 300px 1fr;
      grid-template-rows: 48px 1fr 50px;
    }
    
    header {
      grid-area: header;
      background: black;
    }
    
    aside {
      grid-area: aside;
      background: #333;
    }
    
    main {
      grid-area: main;
      background: #fff;
      color: #000;
    }
    
    footer {
      grid-area: footer;
      background: blue;
    }
    <div class="wrap">
      <div class="content">
        <header>Header</header>
        <aside>Aside</aside>
        <main>Main</main>
        <footer>Footer</footer>
      </div>
    </div>
        3
  •  0
  •   Igor Canario    5 年前

        * {
          padding: 0;
          margin: 0;
          color: #fff;
        }
    
        .wrap {
          height: 300px;
          background: red;
        }
    
        .content {
          background: green;
          display: grid;
    
          grid-template-areas: "header header"
                                "aside main"
                               "footer footer";
                               
          grid-template-columns: 300px 1fr;
          grid-template-rows: 48px 1fr 50px;
        }
    
        header {
          grid-area: header;
          background: black;
        }
    
        aside {
          grid-area: aside;
          background: #333;
          height: 500px;
        }
    
        main {
          grid-area: main;
          background: #fff;
          color: #000;
          height: 500px;
        }
    
        footer {
          grid-area: footer;
          background: blue;
        }
        <div class="wrap">
          <div class="content">
            <header>Header</header>
            <aside>Aside</aside>
            <main>Main</main>
            <footer>Footer</footer>
          </div>
        </div>