如何重置 CSS 网格中项目的宽度?

How can I reset width for items in CSS Grid?

我们有一个使用 Flexbox 完成的平铺项目的遗留部分。项目的容器是 ul:

ul.icon-grid {
 display: flex;
 flex-wrap: wrap;
 list-style: none;
 padding-left: 0;
}

然后里面的项目是li:

.icon-swatch__wrapper {
   width: 180px;
   height: 110px;
   text-align: center;
   font-size: 12px;
   border: 1px solid #ccc;
   margin: 5px;
   padding: 10px;
 }

我不得不使用宽度和高度,因为图块的内容各不相同,而且我需要它们的大小相同。显然,如果我可以使用 css 网格,我就不会有这样的问题。

所以我试图在网格的 @supports 中添加一个 scss 块,虽然它可以工作,但项目的固定宽度正在摆脱网格排水沟。

@supports (display: grid) {
  ul.icon-grid {
   display: grid;
   grid-gap: 10px;
   grid-template-columns: repeat(4, 1fr);
   list-style: none;
   padding: 0;
   .icon-swatch__wrapper, li {
     margin: 0;
     width: auto;
   }
  }
}

如您所见,我尝试使用 width: auto 来删除以前用于旧 flexbox 版本的 width: 180px,但是图块的大小不适合网格。

如果我从 flexbox 版本中 删除 width: 180px,网格版本看起来很完美。但是如果有人的浏览器支持 flex 但不支持 gris,那看起来就糟透了。

我怎么才能基本上"remove" width: 180px

使用 flexbox,您需要定义 flex 项目的大小。您可以使用 widthheightflex-basis.

对于 Grid,方法是不同的。您可以在容器级别调整项目的大小。无需在项目上定义尺寸。

 ul.icon-grid {
   display: grid;
   grid-template-columns: repeat(4, 180px);
   grid-auto-rows: 110px;
   grid-gap: 10px;
}

您可以在 @supports grid 块中使用 width: unset;