当前位置: 首页 > 知识库问答 >
问题:

CSS网格最多4列

冀嘉木
2023-03-14

我试图获得某种“动态”列取决于项目的数量。

容器可以有1到4个项目。如果有1-3个项目,我希望列数是3个,如果有4个项目,我希望列数是4个。

这是我现在有的,它工作很好,如果有1-3个项目,但如果有4个项目,然后最后一个去下一行。如果我有grid-template-columns:repeat(4,1fr);,当只有4个项目时,这会很好地工作。

有可能用CSS实现这一点吗?

多谢了。

null

.container {
  display: grid;
  grid-gap: 10px;
  grid-template-columns: repeat(3, 1fr);
  
  border: 1px solid #c1c1c1;
  border-radius: 5px;
  padding: 5px;
}

.container > div {
  height: 100px;
  border: 1px solid #010101;
  border-radius: 5px;
}
html prettyprint-override"><div class="container">
  <div></div>
  <div></div>
  <div></div>
  <div></div>
</div>

null

共有2个答案

和和裕
2023-03-14

另一个想法:

null

.container {
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns:0.33333fr; /* 0.333 = 1/3 */  
  border: 1px solid #c1c1c1;
  border-radius: 5px;
}

.container > div {
  height: 100px;
  margin:5px;
  border: 1px solid #010101;
  border-radius: 5px;
}
<div class="container">
  <div></div>
</div>

<div class="container">
  <div></div>
  <div></div>
</div>

<div class="container">
  <div></div>
  <div></div>
  <div></div>
</div>

<div class="container">
  <div></div>
  <div></div>
  <div></div>
  <div></div>
</div>
方嘉言
2023-03-14

不使用您使用grid-template-columns定义的显式列,而是使用网格根据需要自动创建的隐式列。

null

.container {
  display: grid;
  grid-gap: 10px;
  grid-template-columns: 1fr 1fr 1fr;
  grid-auto-columns: 1fr;
  grid-auto-rows: 100px;
  border: 1px solid #c1c1c1;
  border-radius: 5px;
  padding: 5px;
}

.container > div {
  grid-row: 1; /* keeps all items on the first row */
  border: 1px solid #010101;
  border-radius: 5px;
}
<div class="container">
  <div></div>
</div>

<hr>

<div class="container">
  <div></div>
  <div></div>
</div>

<hr>

<div class="container">
  <div></div>
  <div></div>
  <div></div>
</div>

<hr>

<div class="container">
  <div></div>
  <div></div>
  <div></div>
  <div></div>
</div>
 类似资料:
  • 我正在使用顺风CSS,并试图建立一个网格,使某些单元格内容跨越多个单元格,而其他项目留在单个单元格。在下面的代码中,我试图展示我正在尝试完成的事情。我知道我的col-span-2班什么也没做,但我把它放在那里是为了表明我希望我能做什么。我想让所有的单元格都是相同的宽度(我只想让一些单元格内容跨越分隔线)。我需要某种覆盖逻辑吗? 感谢任何帮助。 谢谢!

  • 问题内容: 是否可以定义一个最大列数的网格,但是当屏幕宽度改变时允许元素包装到新行上? 我有隐式类,允许行包装到新行上,但是没有最大列数。 这是使用弹性盒的一种方法的代码笔 CSS: 另一种方法是使用网格 我想要一个相当通用的解决方案,没有Java脚本或媒体查询,我想实现的目标是否可能? 问题答案: 使用flexbox,您可以简单地将a设置为容器,因为您的元素具有固定的宽度: 唯一的缺点是您需要知

  • 我正在使用CSS网格布局,在尝试使文本框填充它所在的div容器时遇到了困难。它对某些控件(如GridView/GoogleMap)似乎工作得很好,但当我尝试使用TextBox时,它只填充一列的宽度,即使div填充了3-4列。 下面是网格容器的示例CSS,以及用于填充所有列的示例 此GooleMap控件在填充屏幕的所有列中正确显示(GridViews也正确显示) 但是,当我尝试插入宽度为100%的T

  • 我有4个专栏。第1和第4列的实际含量为150px,第2列为250px,第3列为370px。我想在浏览器宽度改变时换行这些列。当我减小浏览器的宽度时,我希望每列在换行之前收缩到它们的最低宽度。所以我想象第4列在其宽度低于150px之后会以100%的宽度落到下一行。 以下是我认为应该做到的: 有没有一种方法可以做到这一点,而不需要在“max-content”所在的位置传递固定的宽度? 下面是我使用媒体

  • 由于stackoverflow上有许多关于的问题和答案,我可以在中设置平铺的,但它看起来像是某种填充或边距,或者破坏了每行12列的“规则”。 在下面的示例中,当我将栏的宽度设置为而不是时,它将位于配置文件图片的下方,而不是旁边: 我该怎么解决这个?我错过了什么?

  • 问题内容: 我正在尝试使用CSS Grid创建一个简单的页面。 我无法做的是将HTML文本集中到相应的网格单元格。 我尝试将内容放置在和选择器内部和外部的单独s中,并使用某些CSS属性无效。 我该怎么做呢? 问题答案: 这个答案有两个主要部分: 了解对齐方式在CSS Grid中的工作方式。 在CSS Grid中居中的六种方法。 如果您仅对解决方案感兴趣,请跳过第一部分。 网格布局的结构和范围 要完