【问题标题】:CSS Grid Item Expanding Despite ConstraintsCSS 网格项目在约束下扩展
【发布时间】:2020-06-14 20:13:01
【问题描述】:

我有一个 CSS 网格布局,我在其中指定了每个 div 的开始/结束行和列,如下所示,您可以通过 CSS 看到

.grid-container {
width: 100%;
height: 100%;
display: grid;
grid-gap: 0;
}

.grid-item {
position: relative;
display: flex;
padding: 0;
border-radius: 10px;
margin: 10px;
background-color: #f6f6f6;
}

.g-1 {
margin-top: 20px;
margin-left: 20px;
background-color: white;
grid-column: 1/10;
grid-row: 1/2;
}

.g-2 {
margin-top: 20px;
margin-right: 20px;
margin-bottom: 20px;
grid-column: 10/14;
grid-row: 1/40;
}

.g-3 {
margin-left: 20px;
background-color: #eaf0ff;
grid-column: 1/4;
grid-row: 2/12;
}

.g-4 {
background-color: #ebe3ff;
grid-column: 4/7;
grid-row: 2/12;
}

.g-5 {
background-color: #dff6db;
grid-column: 7/10;
grid-row: 2/12;
}

.g-6 {
margin-left: 20px;
margin-bottom: 20px;
grid-column: 1/5;
grid-row: 12/40;
}

.g-7 {
grid-column: 5/10;
grid-row: 12/28;
}

.g-8 {
margin-bottom: 20px;
grid-column: 5/10;
grid-row: 28/40;
}

导致这个

但是,当我在蓝色容器 .g-3 内添加一个简单的 h1 时,尽管被告知其列和行分别设置为 1/42/12,但它会垂直和水平扩展。

<div className="view">
      <div className="grid-container">
        <div className="grid-item g-1">
          <h1 className="header">Hello, Levi</h1>
        </div>
        <div className="grid-item g-2"></div>
        <div className="grid-item g-3">
          <h2>Testing Size</h2>
        </div>
        <div className="grid-item g-4"></div>
        <div className="grid-item g-5"></div>
        <div className="grid-item g-6"></div>
        <div className="grid-item g-7"></div>
        <div className="grid-item g-8"></div>
      </div>
    </div>

如何防止网格项目的内容从第一个屏幕截图中看到的原始布局扩展它们,尤其是考虑到文本仍有足够的空间时?

【问题讨论】:

    标签: html css css-grid


    【解决方案1】:

    您没有为列定义任何大小,因此内容将定义这一点,并且每次更新内容时您都会有不同的布局。

    您需要为列定义明确的大小:

    .grid-container {
      height: 100vh;
      min-height:600px;
      display: grid;
      grid-gap: 0;
      grid-auto-columns:1fr; /* this should do the job and force all the columns to be equal */
      /* you can also try minmax(0,1fr) (related: https://stackoverflow.com/a/52861514/8620333) */
    }
    
    .grid-item {
      position: relative;
      display: flex;
      padding: 0;
      border-radius: 10px;
      margin: 10px;
      background-color: #f6f6f6;
    }
    
    .g-1 {
      margin-top: 20px;
      margin-left: 20px;
      background-color: white;
      grid-column: 1/10;
      grid-row: 1/2;
    }
    
    .g-2 {
      margin-top: 20px;
      margin-right: 20px;
      margin-bottom: 20px;
      grid-column: 10/14;
      grid-row: 1/40;
    }
    
    .g-3 {
      margin-left: 20px;
      background-color: #eaf0ff;
      grid-column: 1/4;
      grid-row: 2/12;
    }
    
    .g-4 {
      background-color: #ebe3ff;
      grid-column: 4/7;
      grid-row: 2/12;
    }
    
    .g-5 {
      background-color: #dff6db;
      grid-column: 7/10;
      grid-row: 2/12;
    }
    
    .g-6 {
      margin-left: 20px;
      margin-bottom: 20px;
      grid-column: 1/5;
      grid-row: 12/40;
    }
    
    .g-7 {
      grid-column: 5/10;
      grid-row: 12/28;
    }
    
    .g-8 {
      margin-bottom: 20px;
      grid-column: 5/10;
      grid-row: 28/40;
    }
    <div class="grid-container">
      <div class="grid-item g-1">
        <h1 class="header">Hello, Levi</h1>
      </div>
      <div class="grid-item g-2"></div>
      <div class="grid-item g-3">
        <h2>Testing Size</h2>
      </div>
      <div class="grid-item g-4"></div>
      <div class="grid-item g-5"></div>
      <div class="grid-item g-6"></div>
      <div class="grid-item g-7"></div>
      <div class="grid-item g-8"></div>
    </div>

    【讨论】:

    • 因此,通过添加grid-auto-columns:1fr;,据我所知,问题得到了解决。你能再解释一下这是做什么的吗?
    • @LeviK 是的,这将使所有列都以1fr 作为大小,这意味着所有列都将等于 1fr,因此可用空间将在所有列之间平均分配。默认大小为auto,因此内容将定义列大小
    • 啊,好吧,所以基本上我从来没有为列设置明确的大小?另外,我也应该在行上这样做吗?
    • @LeviK 是的,您从未定义过大小,您应该始终特别为列定义。如果这是您想要的(让所有行相等),您也可以对行执行相同的操作,但通常我们根据其内容保留行,因为内容可以是动态的。
    • @LeviK 相关问题了解更多详情:stackoverflow.com/a/58267170/8620333/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多