我想使用 flexbox 水平排列元素,以便水平规则对齐。似乎 align-items: baseline 会做正确的事情
align-items: baseline
在这里对您没有帮助,因为您希望将不同的元素与另一个元素对齐(而hr
不是根据文本基线对齐相同的元素)。
如果您可以使用.element
s 的固定高度,那么在不更改标记的情况下,您可以进行嵌套flex
并均衡您的.top
and .bottom
,如下所示:
.top, .bottom {
height: 49%;
display: flex; flex-direction: column;
align-items: center;
}
.top > div, .bottom > div { flex: 0 0 auto; }
然后,要将.top
一个与底部对齐(即靠近hr
),您将执行一个margin-top: auto
,如下所示:
.top > div { margin-top: auto; }
这也将与您的flex-wrap: wrap
. 尝试在下面的示例中更改小提琴窗格的宽度或窗口大小。
完整示例片段:
* { box-sizing: border-box; padding: 0; margin: 0; }
.container {
height: 320px; border: 1px solid #ddd;
display: flex; flex-wrap: wrap;
align-items: center;
}
.element {
flex: 1 1 auto;
height: 120px; width: 200px;
padding: 0.5em;
}
.top, .bottom {
height: 49%;
display: flex; flex-direction: column;
align-items: center;
}
.top > div, .bottom > div { flex: 0 0 auto; }
.top > div { margin-top: auto; }
<div class="container">
<div class="element">
<div class="top">
<div>A</div>
<div>B</div>
</div>
<hr/>
<div class="bottom">
<div>C</div>
</div>
</div>
<div class="element">
<div class="top">
<div>A</div>
</div>
<hr/>
<div class="bottom">
<div>B</div>
<div>C</div>
</div>
</div>
<div class="element">
<div class="top">
<div>A</div>
</div>
<hr/>
<div class="bottom">
<div>B</div>
</div>
</div>
</div>
小提琴:http: //jsfiddle.net/abhitalks/vym76nyn/
代码笔:http : //codepen.io/anon/pen/ZbOyzE
.