水平显示网格中心子元素

Display grid center child elements horizontally

我确定之前已经回答过这个问题,但我似乎无法让它工作。我正在尝试使用 display:grid 父级水平居中网格项目。我有一个 12 列的网格(全屏时 76px 列/56px 间隙),具有各种列宽子元素(对于这个例子,我将只使用 span 8 1000px)。

.main-container{
  max-width:1528px;
  margin: 0 auto;
}

.parent{
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  grid-column-gap: 56px;
  justify-items: center;
}

.grid-8{
  grid-column: span 8;
  background: red;
  opacity: 0.6;
  width: 100%;
}
<div class="main-container">
  <div class="parent">
    <div class="grid-8">8</div>
  </div>
</div>

此外,一旦子元素居中,它是否可以保持其宽度 (1000px) 直到 .main-container 开始接触任一侧?一旦浏览器开始变小(水平)。对不起,这对我来说解释我的意思有点棘手。 .main-container 如果浏览器 window 被拉入所以这是 1200px 宽 span 8 列将不再是 1000px 宽它会缩小(我猜是因为它是相对的到主容器大小)。但理想情况下,我希望它保持 1000px,直到 .main-container 命中它然后 span 8 可以开始减少宽度。

谢谢

您无法使用 justify/align 属性自动对齐 grid 中的项目。

您可以尝试对每个子节点使用 grid-column-end: -N; 语法,但这不是最好的方法。

使用 flex 更好 - 在这种情况下,您可以根据需要对齐子节点。

无论如何,如果你想继续使用网格,你可以做这样的事情(比如一个选项):

.main-container {
  max-width: 1528px;
  margin: 0 auto;
}

.parent {
  --columns-amount: 12;
  display: grid;
  /*grid-template-columns: repeat(12, minmax(0, 1fr));*/
  grid-template-columns: repeat(var(--columns-amount), 1fr);
  grid-column-gap: 56px;
  /*justify-items: center;*/
}

.grid-8 {
  /* edit --column-size to see changes */
  --column-size: 8;
  grid-column: calc((var(--columns-amount) - var(--column-size)) / 2 + 1) / span var(--column-size);
  background: red;
  opacity: 0.6;
  /*width: 100%;*/
}


/* flex */

.parent--flex {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
}

.parent--flex>.grid-8 {
  flex: 0 0 auto;
  width: 66.66667%;
}
<div class="main-container">
  <div class="parent">
    <div class="grid-8">Grid</div>
  </div>
</div>

<hr />

<div class="main-container">
  <div class="parent--flex">
    <div class="grid-8">Flex</div>
  </div>
</div>