【发布时间】:2019-10-22 15:03:24
【问题描述】:
我有两个 div。一个需要坐在左边,一个在右边。带有justify-content: space-between 的父 flexbox 非常适合这种情况,除非 flex 项目包裹(它们应该能够这样做)。换行后,它们是左对齐的,因为总共只有两个项目。
如何使包含单个项目的行居中对齐?
<div style="display: flex; justify-content: space-between; flex-wrap: wrap">
<div style="background: orange">
<strong>Canvas Prints</strong><br>
<span style="font-size: 14px; color: #ff0000">Create a masterpiece for any wall in your home!</span>
</div>
<div style="background: pink">
<img width="176" src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTEAPU9xK-mE81DSwYqh_uMb_EUuqXT1yWzIvs9j7diGY-FHh6X">
</div>
</div>
(或者您可以使用小提琴,因为压缩小提琴的输出窗格比调整整个 SO 窗口的大小以查看 div 换行更容易:https://jsfiddle.net/xv6oa418/1/)
附加说明: @KaranTewari 建议将 flex: 1 添加到第一个子 div,但我希望左侧 div 中的文本在绝对必要之前不要换行(具体来说,它应该只开始换行在第二个弹性项目包裹到下一行之后)。第二个 div 实际上将是一个图像,所以我更新了我的 fiddle 和 sn-p 以反映这一点。
【问题讨论】:
-
“包裹后,它们是左对齐的,因为总共只有两个项目。” … 不完全是。它们是左对齐的,因为这是规范中定义的。
-
如果您能够使用
space-around而不是space-between,解决方案非常简单:Center flex items on wrap -
@Michael_B 好吧,规范说如果一行上有一个项目,它应该左对齐,但发挥作用的唯一原因是因为总共有两个项目,它们是分开的线。这就是我的意思。不,
space-around没有做我想做的事。