如何垂直居中Flexbox项目的内容

时间:2015-01-31 17:20:49

标签: html css css3 vertical-alignment flexbox

我正在尝试使用justify-content:stretch;使Flexbox项目的内容居中。看来使用display:table-cell;vertical-align:middle;的旧技巧在这种情况下不起作用。是什么?

.flex-container {
    display:flex;
    align-items:center;
    justify-content:stretch;
}
.flex-item {
    align-self:stretch;
}

<div class="flex-container">
    <div class="flex-item">I want to be vertically centered! But I'm not.</div>
</div>

在你回答之前:对于我的要求似乎有很多困惑。我正试图将flex项目的 CONTENTS 居中。使用justify-content:stretch时,项目的高度将延伸到容器的整个高度,但项目的内容会浮动到顶部(至少在Chrome中)。

“一张图片胜过千言万语。” (A)是我已经得到的。 (B)是我想要的。 enter image description here

2 个答案:

答案 0 :(得分:56)

可以通过display将每个弹性项目作为flex容器,然后通过align-items属性垂直对齐内容来实现,如下所示:

.flex-container {
  display:flex;
  align-items:center;
  height: 200px; /* for demo */
}

.flex-item {
  align-self:stretch;
  display:flex;
  align-items:center;
  background-color: gold; /* for demo */
}
<div class="flex-container">
    <div class="flex-item">
      I want to be vertically centered!
      <s>But I'm not.</s>
  </div>
</div>

作为旁注,如果省略align-items:center;的{​​{1}}声明,您也可以安全地从弹性项目中删除.flex-container

答案 1 :(得分:0)

我不确定我是否正确解释了您的请求,但我认为您正在尝试使用&#34; justify-content:stretch;&#34;什么时候你应该使用flex-grow。

我的样本我使用flex:1 auto;这只是设置一些flex属性的简写。

HTML:

<div class="flex-container">
    <div class="flex-item">I'm top dog!
    </div>
    <div class="flex-item flex-center">
        I want to be vertically centered! And I am!
    </div>
</div>

CSS:

*{
    box-sizing:border-box;
    padding:5px;
}
.flex-container {
    border: 1px solid;
    display:flex;
    align-items:center;
    height: 100px;
}
.flex-item {
    flex: 1 auto;
    border: 1px solid green;
    height:100%;
    display:flex;
    justify-content:center;
}
.flex-center {
    align-items: center;
}

http://jsfiddle.net/p28tjskq/

Flex属性:
https://developer.mozilla.org/en-US/docs/Web/CSS/flex