【问题标题】:Vertically aligning Flexbox items, without causing Phantom Whitespace between items垂直对齐 Flexbox 项目,不会在项目之间产生幻影空白
【发布时间】:2015-01-22 09:42:47
【问题描述】:

我在这里面临的问题是,当使用 Flexbox 的“flex-wrap: wrap”时,它似乎会导致div 下方出现额外的空白。

我的设置是这样的(类名来说明 div 的使用):

<div class="viewheight-background">

    <div class="header"></div>
    <div class="vertically-centered-text"></div>

</div>

我的 css 非常简单:

html, body{
    height: 100%;
}

.viewheight-background {
    min-height: 100%; /* To ensure a section of 100% screen height, could be done with 'vh' */
    background-size: cover;

    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
}

.vertically-centered-text {
    align-self: center;
}

垂直居中的文本在 div 内,因为我正在处理一个主标题和一些子文本。

如果我拿走“align-self: center”,除了一件事之外,弹性项目包装得很好。似乎有某种我无法识别的幻影空白。这会导致“align-self: center”低于应该居中的div 的中心。

有什么想法吗?

(如果我太含糊,请告诉我,我会澄清)

编辑:

Fiddle 供参考。忘记加html, body {height: 100%;}

【问题讨论】:

  • 我似乎无法在我的fiddle 中复制此错误,除非我没有抓住重点?
  • @jbutler483 添加了小提琴以供参考。忘记添加样式
  • 请查看我的回答(应该)解决问题。

标签: html css flexbox


【解决方案1】:

终于找到了一个不错的解决方案。

看来:

浮动、清除和垂直对齐对弹性项目没有影响。

所以我发现问题出在您的:

align-self: center;

在您的第二个弹性项目上。

所以你的 css 应该被编辑为:

.vertically-centered-text {
    /*align-self: center;*/
    background-color:blue;
    display: -webkit-flexbox;
    display: -ms-flexbox;
    display: -webkit-flex;
    display: flex;
    -webkit-flex-align: center;
    -ms-flex-align: center;
    -webkit-align-items: center;
    align-items: center;
    text-align: center;
}

LIVE DEMO所示或运行这个sn-p(全页视图):

html,
body {
  height: 100%;
}
.viewheight-background {
  min-height: 100%;
  /* To ensure a section of 100% screen height, could be done with 'vh' */
  background-size: cover;
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
}
.vertically-centered-text {
  /*align-self: center;*/
  background-color: blue;
  display: -webkit-flexbox;
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;
  -webkit-flex-align: center;
  -ms-flex-align: center;
  -webkit-align-items: center;
  align-items: center;
  text-align: center;
}
.header {
  background-color: red;
}
<div class="viewheight-background">
  <div class="header">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
    in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum</div>
  <div class="vertically-centered-text">Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas
    sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora
    incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate
    velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?</div>
</div>

【讨论】:

  • 但是“align-self:center”是一个弹性属性。它用于在交叉轴(在我的情况下是垂直的)上以不同的方式对齐 flex 容器内的 flex 项目。您确实已将居中文本 div 中的文本居中,但是我希望 div 居中在剩余空间内(因此在页眉和页面底部之间)。效果很好,但是您可以看到标题留下了大量的空白(请参阅我们两个小提琴上多余的红色)
  • 快速编辑我的评论:“div.vertically-centered-text”必须在“div.viewheight-background”中垂直居中。我几乎可以肯定这与“flex-wrap: wrap”是一件令人头疼的事情有关。
  • HERE 是你想要的吗? (我将标题放在 vh 之外)。这是红色(标题)只使用它需要的空间,而蓝色(潜文本)使用其余部分并显示在中心的地方。
  • 不完全是。 vh 在那里,因此背景从顶部一直延伸到底部(vh 只是此特定页面的第一部分)。所以标题也必须在 vh 背景之上。这可以用负边距来完成,但是我需要使用我试图避免的固定高度
  • 那么如何设置 max-height: 在垂直居中的文本上?除此之外,如果没有 full 标记,几乎不可能建议/查看问题所在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-30
  • 2017-07-18
  • 2022-01-26
  • 2018-07-06
  • 1970-01-01
  • 2021-10-29
  • 2020-11-18
相关资源
最近更新 更多