2016-11-08 41 views
3

我的CMS有相当严格设置2列有标题和内容,如下图所示:Flexbox垂直对齐包装器中的特定内容?

.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每列垂直对齐中间但保持标题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所有元素。

有人会知道一种方法,我可以'目标'.content类,并获得相同的效果(记住我不能真正改变HTML)?

+0

为什么你的头有类 '左'?也许为它做一个类,用vertical-align:middle; –

回答

2

这是一种黑客攻击,但它的工作原理:

  1. wrapperflex:1到柔性孩子取出align-items: centerleftright

  2. 使内部leftright容器column flexbox和中心h3content使用justify-content:center

  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>

0

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

谢谢,但'正确'的文字与顶部对齐。我希望标题与顶部对齐,但是'正确'的内容与中心对齐 – MeltingDog