【问题标题】:Flexbox vertical align specific content within a wrapper?Flexbox垂直对齐包装器中的特定内容?
【发布时间】:2017-03-21 13:48:05
【问题描述】:

我的 CMS 有一个相当严格的设置,有 2 列带有标题和内容,如下所示:

.wrapper {
    overflow: auto;
    border: 1px solid #ccc;
    text-align: center;
    display: -ms-flexbox;
    display: -webkit-flex;
    display: flex;
    -ms-flex-align: center;
    -webkit-align-items: center;
    -webkit-box-align: center;
    align-items: center;
}
.left,
.right {
    float: left;
    width: 45%;
    padding: 5px;
}
<div class="wrapper">
    <div class="left">
        <h3>Title (should be aligned to top)</h3>
        <div class="content">
            left<br>
            left<br>
            left<br>
            left<br>
        </div>
    </div>
    <div class="right">
        <h3>Title (should be aligned to top)</h3>
        <div class="content">
            right
        </div>
    </div>
</div>

jsFiddle


我想让每列的.content 垂直对齐到中间,但保持标题h3s 垂直对齐到顶部。

通常我会使用 flexbox 来实现垂直对齐:

.wrapper {
    display: -ms-flexbox;
    display: -webkit-flex;
    display: flex;
    -ms-flex-align: center;
    -webkit-align-items: center;
    -webkit-box-align: center;
    align-items: center;
}

但这当然会影响.wrapper 中的所有元素。

有人知道我可以“定位”.content 类并获得相同效果的方法吗(请记住,我无法真正更改 HTML)?

【问题讨论】:

  • 为什么你的标题有“左”类?也许为它创建一个类,vertical-align: middle;

标签: html css flexbox vertical-alignment


【解决方案1】:

这是一种 hack,但它确实有效:

  1. align-items: centerwrapperflex:1 中删除到弹性子leftright

  2. 将内部leftright 容器设为column flexbox 并使用justify-content:centerh3content 居中

  3. 使用margin-bottom:autoh3 推到顶部,并让content 留在中间。

请看下面的演示:

.wrapper {
  overflow: auto;
  border: 1px solid #ccc;
  text-align: center;
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;
}
.left,
.right {
    padding: 5px;
    display: flex;
    flex-direction: column;
    justify-content: center;
    flex: 1;
}
.left h3, .right h3 {
    margin-bottom: auto;
}
.content {
    margin-bottom: auto;
}
<div class="wrapper">

  <div class="left">
    <h3>
    Title (should be aligned to top)
    </h3>
    <div class="content">
      left
      <br>left
      <br>left
      <br>left
      <br>
    </div>
  </div>

  <div class="right">
    <h3>
  Title (should be aligned to top)
  </h3>
    <div class="content">
      right
    </div>
  </div>

</div>

【讨论】:

    【解决方案2】:

    检查这个fiddle

    .wrapper {
        overflow: auto;
        border: 1px solid #ccc;
        text-align: center;
        display: -ms-flexbox;
        display: -webkit-flex;
        display: flex;
        -ms-flex-align: flex-start;
        -webkit-align-items: flex-start;
        -webkit-box-align: flex-start;
        align-items: flex-start; // changed
    }
    

    【讨论】:

    • 谢谢,但“正确”的文字与顶部对齐。我希望标题与顶部对齐,但“正确”的内容与中心对齐
    猜你喜欢
    • 1970-01-01
    • 2019-08-11
    • 2016-02-03
    • 2019-05-13
    • 1970-01-01
    • 2016-09-21
    • 2019-09-25
    • 2012-05-02
    • 2015-03-07
    相关资源
    最近更新 更多