使用 CSS 网格时如何垂直对齐 CSS 中的对象? [复制]

Posted

技术标签:

【中文标题】使用 CSS 网格时如何垂直对齐 CSS 中的对象? [复制]【英文标题】:How to vertically align objects in CSS when working with CSS grids? [duplicate] 【发布时间】:2018-01-15 16:28:54 【问题描述】:

我最近遇到了这个问题。假设我有一个简单的<h1> 标签,并且我想将它垂直居中,所以即使我重新调整窗口大小,它也会保持在我的一个网格框行的中间,忽略它的水平位置。

我知道当涉及到网格容器时,vertical-align 没有任何作用。那么解决办法是什么呢?

这个问题已被标记为重复,但是,另一个问题是关于水平居中文本,而在这里,我问的是垂直居中。

【问题讨论】:

您没有提供代码示例,因此这里是有关对齐的相关 CSS Grid 文档:w3.org/TR/css-grid-1/#row-align(锚定 § 和后续的)和“css grid alignment”的 #1 结果,来自 R 的一篇文章. 安德鲁在 Smashing Mag 【参考方案1】:

不需要表格,为什么要混合表格和表格?

可以使用align-items:center实现垂直居中。

如果网格单元格本身是<h1>,您可以使用align-self:center将内容垂直居中到<h1>

【讨论】:

不需要align-itemsalign-self 需要display: flex 是的,有什么问题? CSS 网格也是弹性容器。请参阅本指南了解您可以使用哪些属性,其中包括 align-self 和 align-items:css-tricks.com/snippets/css/complete-guide-grid align-self:center 以单元格本身为中心,而不是单元格内容。 当使用表格作为网格时,垂直对齐不起作用。然后`显示:网格; align-items: center;` 需要 tdth 垂直对齐。【参考方案2】:

好问题 - 我设法通过包装解决了这个问题,并使用了 display: table

https://jsfiddle.net/8vjvnznk/

.wrapper 
  display: grid;
  grid-template-columns: 100px 100px 300px;
  grid-template-rows: 200px 200px;
  grid-gap: 10px;
  background-color: #fff;
  color: #444;
  align-content: space-evenly;


.workaround
  border: 1px solid green;
  margin: 0;
  padding: 0;
  height: 100%;
  width: 100%;
  display: table;
  

h1
  font-size: 1em;
  border: 1px solid yellow;
  display: table-cell;
  vertical-align: middle;


#boxc
 background: red;


.box 
  background-color: #444;
  color: #fff;
  border-radius: 5px;
  padding: 20px;
  font-size: 100%;
<div class="wrapper">
  <div class="box a">A</div>
  <div class="box b">B</div>
  <div class="box c" id="boxc">
    <div class="workaround">
      <h1>
        The heading in question!
      </h1>
    </div>
  </div>
  <div class="box d">D</div>
  <div class="box e">E</div>
  <div class="box f">F</div>
</div>

【讨论】:

以上是关于使用 CSS 网格时如何垂直对齐 CSS 中的对象? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

用于页眉、粘滞页脚和垂直对齐的中间内容的 CSS Flexbox 或 CSS 网格?

使用 CSS Grid 和 Flexbox 水平对齐位于不同网格单元格中的元素

使用 Bootstrap 5 进行网格和垂直对齐

在 CSS Grid 中垂直对齐内容 [重复]

CSS 文本换行垂直对齐

我如何垂直对齐具有不同高度的网格元素? [重复]