Flexbox 垂直对齐包装器中的特定内容?

Flexbox vertical align specific content within a wrapper?

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

.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 垂直居中对齐,但 header h3 垂直对齐顶部。

通常我会这样使用 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 内的所有元素。

有谁知道我可以 'target' .content 类 并获得相同效果的方法(请记住,我无法真正改变 HTML)?

检查这个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
}

这是一种 hack,但它有效:

  1. wrapperflex:1 中删除 align-items: center 到 flex 子项 leftright

  2. 将内部 leftright 容器设为 column flexbox 并使用 [=22= 将 h3content 居中]

  3. 使用margin-bottom:auto将两个h3推到顶部,让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>