使用CSS网格时如何在CSS中垂直对齐对象?

10 css css3 css-grid

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

我知道,当谈到网格容器时,vertical-align没有任何效果.那么解决方案是什么?

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

Ges*_*sha 18

没有桌子,为什么你会把网格与桌子混合?

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

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

  • 哦,天啊,这是多么矛盾. (10认同)
  • `align-items` 或 `align-self` 不需要 `display: flex` 吗? (2认同)
  • CSS 网格也是弹性容器。请参阅本指南了解可以使用哪些属性,其中包括align-self和align-items:https://css-tricks.com/snippets/css/complete-guide-grid/ (2认同)
  • `align-self:center` 使单元格本身居中,而不是单元格内容居中。 (2认同)

Hap*_*rs 3

好问题 - 我设法使用包装器并使用 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%;
}
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)