Flexbox 不会垂直对齐内容

Posted

技术标签:

【中文标题】Flexbox 不会垂直对齐内容【英文标题】:Flexbox won't vertically align content 【发布时间】:2016-02-03 18:31:21 【问题描述】:

到目前为止,我看到的所有 flexbox 教程都说垂直对齐是通过使用 align-itemsjustify-content 并将两者都设置为中心来完成的;但是,这似乎不起作用,如下所示(我正在尝试对齐 lorem ipsum 文本)。我使用的浏览器是 Chrome,如果这很重要的话。

这是一个代码笔:http://codepen.io/anon/pen/QjBrEm

我在 Stack Overflow 上尝试了很多建议,例如:

body, html:
    height: 100%

这些似乎不起作用。

【问题讨论】:

尝试垂直居中具有height: 100vh; 的元素有多大意义?请记住,您的弹性项目是您的section.initial不是它的内容。 我正在尝试(或正在尝试)对齐 lorem ipsum 文本。我已更新问题以澄清这一点。 您在此处提到的正文、html 高度建议已为我修好了,值得。 【参考方案1】:

你的 SASS 应该是:

  .initial
    background-color: #212121
    color: #ffffff
    display: flex
    align-items: center
    justify-content: center

那个元素的内容对齐,因为flexbox布局不被子级继承。

Codepen Demo

【讨论】:

【参考方案2】:

当你创建一个弹性容器时,只有子元素成为弹性项目。子级之外的后代不会成为弹性项目,弹性属性不适用于它们。

因此,如果您尝试将 <p> 文本居中,您会注意到 <p><section> 的子项,<section> 是弹性项目,但不是弹性容器。

您需要将<section> 设为(嵌套)弹性容器,以便弹性属性应用于<p>

试试这个:

#mainpage-container section 
   width: 100%;
   height: 100vh;
   text-align: center;

   display: flex; /* new */
   align-items: center;  /* new */
   justify-content: center;  /* new */

演示:http://codepen.io/anon/pen/xwJjvO

【讨论】:

【参考方案3】:

您已经使用 flexbox 对容器内部的部分进行了布局,并且如 Codepen 所示,这给出了所有三个部分都显示在彼此下方的结果。

第一部分的文本在section.initial 内,它没有使用flexbox 布局,因为它只在父级上指定。因此,文本只是根据默认填充和您输入的text-align 放置。

要使文本在该部分居中,还要开始在该部分中使用 flexbox 布局。

【讨论】:

【参考方案4】:

由于您要在 section 元素内对齐段落,因此您需要使用 section(parent) 上的 flexbox 属性。 #mainpage-container 上的 Flexbox 属性不会对孙子 p 产生影响,因为它没有被父元素(即 section 元素)继承。

#mainpage-container section.initial 
   display: flex;
   justify-content: center;
   align-items: center;

#mainpage-container 
  display: -webkit-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -webkit-align-items: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
  justify-content: center;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -webkit-flex-direction: column;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-flex-wrap: wrap;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;

#mainpage-container section 
  width: 100%;
  height: 100vh;
  text-align: center;

#mainpage-container .initial 
  background-color: #212121;
  color: #ffffff;
  font-size: 3rem;
  display: flex;
  justify-content: center;
  align-items: center;

#mainpage-container .initial #logo 
  height: 15rem;
  width: auto;
<div id="mainpage-container">
  <section class="initial">
    <!--<img src="/assets/k.png" id="logo">-->
    <p>Lorem ipsum.</p>
  </section>

  <section>
  </section>

  <section>
  </section>
</div>

【讨论】:

以上是关于Flexbox 不会垂直对齐内容的主要内容,如果未能解决你的问题,请参考以下文章

html 使用Flexbox垂直对齐内容

Flexbox垂直对齐溢出[重复]

使用flexbox在链接中垂直对齐文本[重复]

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

当 flexbox 内容垂直居中时如何修复滚动? [复制]

无法垂直对齐文本 - angularJS + bootstrap + flexbox