【问题标题】:Make CSS grid rows heights to take maximum of their content [duplicate]使CSS网格行高度最大化其内容[重复]
【发布时间】:2020-07-30 01:23:57
【问题描述】:

如何根据内容使css网格行高度扩展为最大值?

所以这会改变:

进入:

.grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-column-gap: 20px;
  outline: 2px dashed red;
}

.panel-grid {
  background-color: #f0f0f0;
  outline: 1px solid blue;
  display: grid;
}

.row {
  background-color: #5879c5;
  text-align: center;
  font-weight: bold;
}

.row2 {
  background-color: #c5b07f;
  text-align: center;
  font-weight: bold;
}

.row3 {
  background-color: #e0ffef;
  text-align: center;
  font-weight: bold;
}
<div class="grid">
    <div class="panel-grid">
      <div class="row"><div>1</div><div>1</div><div>1</div></div>
      <div class="row2"><div>2</div></div>
      <div class="row3"><div>3</div></div>
    </div>
    <div class="panel-grid">
      <div class="row"><div>1</div></div>
      <div class="row2"><div>2</div><div>2</div><div>2</div></div>
      <div class="row3"><div>3</div></div>
    </div>
    <div class="panel-grid">
      <div class="row"><div>1</div></div>
      <div class="row2"><div>2</div></div>
      <div class="row3"><div>3</div></div>
    </div>
</div>

【问题讨论】:

    标签: html css grid css-grid


    【解决方案1】:

    我认为这在浏览器支持display: contentsdisplay: subgrid 之前是不可能的。

    同时,我认为您可以获得的最接近(不更改 HTML)是 equal height 跨容器的行。高度由每行中最高的项目设置。

    将此添加到您的代码中:

    .panel-grid {
       display: grid;
       grid-auto-rows: 1fr; /* new */
    }
    

    这会覆盖grid-auto-rows: auto 默认值。

    .grid {
      display: grid;
      grid-template-columns: repeat(3, 1fr);
      grid-column-gap: 20px;
      outline: 2px dashed red;
    }
    
    .panel-grid {
      background-color: #f0f0f0;
      outline: 1px solid blue;
      display: grid;
      grid-auto-rows: 1fr; /* new */
    }
    
    .row {
      background-color: #5879c5;
      text-align: center;
      font-weight: bold;
    }
    
    .row2 {
      background-color: #c5b07f;
      text-align: center;
      font-weight: bold;
    }
    
    .row3 {
      background-color: #e0ffef;
      text-align: center;
      font-weight: bold;
    }
    <div class="grid">
      <div class="panel-grid">
        <div class="row">
          <div>1</div>
          <div>1</div>
          <div>1</div>
        </div>
        <div class="row2">
          <div>2</div>
        </div>
        <div class="row3">
          <div>3</div>
        </div>
      </div>
      <div class="panel-grid">
        <div class="row">
          <div>1</div>
        </div>
        <div class="row2">
          <div>2</div>
          <div>2</div>
          <div>2</div>
        </div>
        <div class="row3">
          <div>3</div>
        </div>
      </div>
      <div class="panel-grid">
        <div class="row">
          <div>1</div>
        </div>
        <div class="row2">
          <div>2</div>
        </div>
        <div class="row3">
          <div>3</div>
        </div>
      </div>
    </div>

    如果您可以更改 HTML(将所有项目放在一个容器中),那么这是一个可能的选择:

    .grid {
      display: grid;
      grid-template-columns: repeat(3, 1fr);
      grid-template-rows: repeat(3, auto); /* new */
      grid-auto-flow: column; /* new */
    }
    

    .grid {
      display: grid;
      grid-template-columns: repeat(3, 1fr);
      grid-template-rows: repeat(3, auto);
      grid-auto-flow: column;
      grid-gap: 5px;
      outline: 2px dashed red;
    }
    
    .row {
      background-color: #5879c5;
      text-align: center;
      font-weight: bold;
    }
    
    .row2 {
      background-color: #c5b07f;
      text-align: center;
      font-weight: bold;
    }
    
    .row3 {
      background-color: #e0ffef;
      text-align: center;
      font-weight: bold;
    }
    <div class="grid">
      <div class="row">
        <div>1</div>
        <div>1</div>
        <div>1</div>
      </div>
      <div class="row2">
        <div>2</div>
      </div>
      <div class="row3">
        <div>3</div>
      </div>
      <div class="row">
        <div>1</div>
      </div>
      <div class="row2">
        <div>2</div>
        <div>2</div>
        <div>2</div>
        <div>2</div>
      </div>
      <div class="row3">
        <div>3</div>
      </div>
      <div class="row">
        <div>1</div>
      </div>
      <div class="row2">
        <div>2</div>
      </div>
      <div class="row3">
        <div>3</div>
      </div>
    </div>

    更多细节:

    【讨论】:

      【解决方案2】:

      如果您能够修改您的 HTML 并重新排序您的 rows(如下面的演示代码所示),您应该能够通过使用带有 grid-auto-flow:row 的容器来完成类似的操作 - 如下所示:

      .container {
        align-items: stretch;
        grid-auto-flow: row;
      }
      

      请看下面的演示:

      .container {
        align-items: stretch;
        grid-auto-flow: row;
      }
      
      .grid {
        display: grid;
        grid-template-columns: repeat(3, 9fr);
        grid-column-gap: 20px;
        outline: 2px dashed red;
      }
      
      .panel-grid {
        background-color: #f0f0f0;
        outline: 1px solid blue;
        display: grid;
      }
      
      .row {
        background-color: #5879c5;
        text-align: center;
        font-weight: bold;
      }
      
      .row2 {
        background-color: #c5b07f;
        text-align: center;
        font-weight: bold;
      }
      
      .row3 {
        background-color: #e0ffef;
        text-align: center;
        font-weight: bold;
      }
      <div class="grid container">
        <!-- row 1 -->
        <div class="row">
          <div>1</div>
          <div>1</div>
          <div>1</div>
        </div>
        <div class="row">
          <div>1</div>
        </div>
        <div class="row">
          <div>1</div>
        </div>
      
        <!-- row 2 -->
        <div class="row2">
          <div>2</div>
        </div>
        <div class="row2">
          <div>2</div>
          <div>2</div>
          <div>2</div>
        </div>
        <div class="row2">
          <div>2</div>
        </div>
      
        <!-- row 3 -->
        <div class="row3">
          <div>3</div>
        </div>
        <div class="row3">
          <div>3</div>
        </div>
        <div class="row3">
          <div>3</div>
        </div>
      </div>

      【讨论】:

      • 这看起来不错,谢谢。但是有什么方法可以突出显示(添加带有阴影的叠加层)来表示视觉列#2?这就是 panel-grid 背后的原因,它有点对行进行分组,并允许我在每列后面添加漂亮的叠加层。
      • @alex.mironov 啊,我明白了……我不确定……让我检查一下
      猜你喜欢
      • 1970-01-01
      • 2020-06-08
      • 2018-01-05
      • 1970-01-01
      • 2018-09-29
      • 2012-12-12
      • 2019-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多