CSS Grid中的等宽列

use*_*736 16 html css grid css3 css-grid

我想让下面的html显示在n个相等的列中是否有两个,三个或更多的子元素使用css网格到行元素 - Flexbox使这很容易但我无法使用css网格完成 - 任何帮助非常感谢.

<div class="row">
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

tcu*_*rdt 134

的常见答案repeat(3, 1fr)并不完全正确。

这是因为这1fr是关于可用(!)空间的分布。一旦内容变得大于轨道大小,这就会中断。默认情况下,它不会溢出并相应地调整列宽。这就是为什么不是所有的1fr都保证宽度相等的原因。1fr实际上只是minmax(auto, 1fr).

如果您确实需要列的宽度完全相同,则应使用:

grid-template-columns: repeat(3, minmax(0, 1fr));
Run Code Online (Sandbox Code Playgroud)

minmax(0, 1fr)允许网格轨道与 一样小0但与 一样大1fr,从而创建将保持相等的列。但是,请注意,如果内容大于列或无法包装,这将导致溢出。

这是一个演示差异的示例

  • 当您不知道列数时,您可以这样做: `grid-auto-columns: minmax(0, 1fr); 网格自动流:列;` (15认同)
  • “一旦内容变得大于轨道大小,这种情况就会中断。” - 非常有价值的通知。谢谢你! (6认同)
  • 据我所知,这是唯一真正产生均匀宽度列的。 (4认同)
  • 当然,这就是正确的答案。这对我来说似乎工作正常。 (3认同)
  • @TrườngAn 我认为你可以使用自动换行:break-word; https://www.w3schools.com/cssref/css3_pr_word-wrap.asp (3认同)

Kev*_*vin 24

在网格容器上定义它.设置三个宽度相等的列.

grid-template-columns: repeat(3, 1fr);
Run Code Online (Sandbox Code Playgroud)

  • 是否也可以使用`auto`来做到这一点?:) (3认同)
  • 没有为我工作。仍然被压缩的列,因此宽度有所不同。 (2认同)

weg*_*gry 15

@Michael_B的答案几乎在那里。

.grid-container {
   display: grid;
   grid-auto-columns: 1fr;
   grid-auto-flow: column;
}
Run Code Online (Sandbox Code Playgroud)

撰写本文时,在Chrome,Firefox和Safari中为您提供一排大小相等的列。

  • 这应该是公认的答案,因为它是动态的,并且只需要主网格容器上的属性。 (3认同)
  • 这对我不起作用。似乎当内容大于其容器时,它会打破 1fr 宽度。`minmax()` 对我有用 (3认同)

Dim*_*Vai 12

该问题要求任意数量的列,而不是 3!所以用这个:

.grid-container {
  display: grid;
  grid-auto-columns: 1fr;
  grid-auto-flow: column;
}
.grid-container > * {
  overflow: hidden;
}
Run Code Online (Sandbox Code Playgroud)

这样,它的子级(在 css 中使用“">*”选择)不需要有任何特定的类,甚至不需要是div.

示例: https: //codepen.io/dimvai/pen/RwVbYyz


Mic*_*l_B 7

试试这个:

.grid-container {
   display: grid;
   grid-auto-columns: 1fr;
}

.grid-items {
   grid-row: 1;
}
Run Code Online (Sandbox Code Playgroud)

否则,这是一个可能有用的演示:jsFiddle

要了解该fr单元,请参阅以下帖子:

  • 是的,最终我求助于4倍“ 1fr”以获得所需的结果(此设计仅要求4列)。可以肯定的是,“自动”不会使列的宽度相同。 (2认同)

dev*_*drc 7

全宽响应式换行

在移动设备上缩小尺寸时,这些答案都不是全宽或换行到新行。如果您想要类似于引导程序的东西,这可能就是您正在寻找的东西。请注意,200px 是换行到新行的下限。

.grid-container {
    display: grid;
    width: 100%;
    grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
}
Run Code Online (Sandbox Code Playgroud)


小智 6

这样可以让列更好的分布,不管item的大小不调整,列的大小都是一样的。

.row {
  display: grid;
  grid-template-columns: repeat( auto-fit, minmax(33.33%, 1fr) );
}
.item {
  grid-column: span 1;
}
Run Code Online (Sandbox Code Playgroud)


小智 5

这个怎么样?

.row {
  display: grid;
  grid-template-columns: repeat(3, calc(100% / 3));
}
Run Code Online (Sandbox Code Playgroud)