【问题标题】:Centering columns in CSS GridCSS Grid 中的列居中
【发布时间】:2017-10-13 05:15:15
【问题描述】:

我正在尝试使用原生 CSS 网格属性创建一个简单的 CSS 网格。它可以按我的意愿工作,只是我想创建一个可以在网格中居中列的实用程序类。

有没有办法创建__centered 实用程序类,以便我可以将它应用到中心列?我知道我可以在列之前添加空列 div,但我想要一个更简洁的解决方案。

.l-wrap {
  width: 100%;
  max-width: 1196px;
  margin: 0 auto;
}

.l-grid {
  display: grid;
  grid-gap: 52px;
  grid-template-columns: repeat(6, 1fr);
  background-color: orangered;
}
.l-grid--col {
  grid-column: auto/span 6;
}
.l-grid--col-1 {
  grid-column: auto/span 1;
  background-color: lightblue;
}
.l-grid--col-2 {
  grid-column: auto/span 2;
  background-color: lightblue;
}
.l-grid--col-3 {
  grid-column: auto/span 3;
  background-color: lightblue;
}
.l-grid--col-4 {
  grid-column: auto/span 4;
  background-color: lightblue;
}
.l-grid--col-5 {
  grid-column: auto/span 5;
  background-color: lightblue;
}
.l-grid--col-6 {
  grid-column: auto/span 6;
  background-color: lightblue;
}
<div class="l-wrap">
  <div class="l-grid l-grid__centered">
    <div class="l-grid--col-2">
      <p>This should span 2 and be centered.</p>
    </div>
  </div>
</div>

【问题讨论】:

标签: html css grid-layout css-grid


【解决方案1】:

CSS Grid 提供justify-itemsjustify-self 属性,可用于沿行轴对齐网格项。

justify-items 适用于网格容器。 justify-self 适用于网格项。

所以你的实用程序类可能看起来像这样:

.l-grid__centered {
    justify-self: center;
    grid-column: 1 / -1;
}

这告诉网格项在网格区域中从第一列到最后一列的行中居中。 (Negative integer values on grid-column and grid-row start the count from the end side.)

.l-wrap {
  width: 100%;
  max-width: 1196px;
  margin: 0 auto;
}

.l-grid {
  display: grid;
  grid-gap: 52px;
  grid-template-columns: repeat(6, 1fr);
  background-color: orangered;
}
.l-grid--col {
  grid-column: auto/span 6;
}
.l-grid--col-1 {
  grid-column: auto/span 1;
  background-color: lightblue;
}
.l-grid--col-2 {
  grid-column: auto/span 2;
  background-color: lightblue;
}
.l-grid--col-3 {
  grid-column: auto/span 3;
  background-color: lightblue;
}
.l-grid--col-4 {
  grid-column: auto/span 4;
  background-color: lightblue;
}
.l-grid--col-5 {
  grid-column: auto/span 5;
  background-color: lightblue;
}
.l-grid--col-6 {
  grid-column: auto/span 6;
  background-color: lightblue;
}

    .l-grid__centered {
        justify-self: center;
        grid-column: 1 / -1;
    }
<div class="l-wrap">
  <div class="l-grid l-grid__centered">
    <div class="l-grid--col-2">
      <p>This should span 2 and be centered.</p>
    </div>
  </div>
</div>

jsFiddle demo

注意:实用程序类应用于网格项目,而不是网格容器。此外,此方法打破了原始内容的 2 列网格区域。居中的内容将能够扩展到整行。


或者,当使用六列网格时,要将两列网格区域水平居中,您的实用程序类可以如下所示:

.__centered {
  grid-column: 3 / span 2;
 }

.__centered {
  grid-column: 3 / -3; 
 }

.l-wrap {
  width: 100%;
  max-width: 1196px;
  margin: 0 auto;
}

.l-grid {
  display: grid;
  grid-gap: 52px;
  grid-template-columns: repeat(6, 1fr);
  background-color: orangered;
}

.l-grid--col {
  grid-column: auto/span 6;
}

.l-grid--col-1 {
  grid-column: auto/span 1;
  background-color: lightblue;
}

.l-grid--col-2 {
  grid-column: auto/span 2;
  background-color: lightblue;
}

.l-grid--col-3 {
  grid-column: auto/span 3;
  background-color: lightblue;
}

.l-grid--col-4 {
  grid-column: auto/span 4;
  background-color: lightblue;
}

.l-grid--col-5 {
  grid-column: auto/span 5;
  background-color: lightblue;
}

.l-grid--col-6 {
  grid-column: auto/span 6;
  background-color: lightblue;
}

.l-grid__centered {
  grid-column: 3 / span 2;
  text-align: center;
}
<div class="l-wrap">
  <div class="l-grid">
    <div class="l-grid--col-2 l-grid__centered">
      <p>This should span 2 and be centered.</p>
    </div>
  </div>
</div>

jsFiddle demo

注意:此解决方案仅将偶数网格区域居中。

【讨论】:

  • 是的,证明自我:居中;似乎锻炼得很好。但是我的编辑器(vscode)还没有将其识别为官方的,MDN 显示了很多关于浏览器兼容性的问号:developer.mozilla.org/en-US/docs/Web/CSS/justify-self。我们还能安全地使用它吗?
  • @ChristofKälin,查看caniuse.com 以获取浏览器支持表,更重要的是,您可以自己跨浏览器测试您的代码。
  • 我不明白为什么 grid-column: 3 / span 2;使它居中,而从理论上讲,它应该从第 3 条轨道开始并跨越 2 列,因此它应该在第 5 条轨道上结束。不是吗?
  • 你的第一个小提琴有缺陷。您的一段文字“这应该跨越 2 并居中。”是 2 列的精确宽度。试试“这应该跨越 2
    并居中”。你的第一个小提琴不再起作用了:(这是一个小提琴 (jsfiddle.net/7kb598a2/1)
猜你喜欢
  • 2019-10-26
  • 2021-03-25
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 2018-10-05
  • 2020-10-11
  • 1970-01-01
相关资源
最近更新 更多