css - 将 3 个不相等的块左、中、右对齐
问题描述
我正在尝试对齐由 3 个内容块组成的顶部菜单。
我想要实现的是:
- 块 1:左对齐
- 块 2:水平居中
- 块 3:右对齐
如果所有 3 个块的大小相同,我可以使用 flexbox(如代码段中所示),但它们不是,所以它不会产生我需要的输出。
相反,flexbox 在 3 个块之间放置相等的空间 - 导致中间块偏离中心对齐。
我想知道这是否可以通过 flexbox 来实现,或者如果不能,另一种解决方案。这需要在生产中稳健地工作,因此“网格”解决方案不适用,因为支持不足。
.container {
margin: 20px 0;
}
.row {
background-color: lime;
display: flex;
justify-content: space-between;
}
.item {
background-color: blue;
color: #fff;
padding: 16px;
}
<div class="container">
<div class="row">
<div class="item">left, slightly longer</div>
<div class="item">center, this item is much longer</div>
<div class="item">right</div>
</div>
</div>
解决方案
你可以考虑flex-grow:1;flex-basis:0%
为left和right元素然后text-align
用来对齐里面的内容。我添加了一个额外的包装器以仅将背景保留在文本周围。
诀窍是通过仅删除中间内容并将其平均拆分为左右元素来计算可用空间。
.container {
margin: 20px 0;
padding-top:10px;
background:linear-gradient(#000,#000) center/5px 100% no-repeat; /*the center*/
}
.row {
background-color: lime;
display: flex;
color: #fff;
}
.item:not(:nth-child(2)) {
flex-basis: 0%;
flex-grow: 1;
}
.item:last-child {
text-align: right;
}
.item span{
background-color: blue;
display:inline-block;
padding: 16px;
border: 2px solid red;
box-sizing:border-box;
}
<div class="container">
<div class="row">
<div class="item"><span>left, slightly longer</span></div>
<div class="item"><span>center, this item is much longer</span></div>
<div class="item"><span>right</span></div>
</div>
</div>
您也可以通过保持元素关闭来执行相同的操作。只需调整文本对齐:
.container {
margin: 20px 0;
padding-top: 10px;
background: linear-gradient(#000, #000) center/5px 100% no-repeat; /*the center*/
}
.row {
background-color: lime;
display: flex;
color: #fff;
}
.item:not(:nth-child(2)) {
flex-basis: 0%;
flex-grow: 1;
}
.item:first-child {
text-align: right;
}
.item span {
background-color: blue;
display: inline-block;
padding: 16px;
border: 2px solid red;
box-sizing: border-box;
}
<div class="container">
<div class="row">
<div class="item"><span>left, slightly longer</span></div>
<div class="item"><span>center, this item is much longer</span></div>
<div class="item"><span>right</span></div>
</div>
</div>
推荐阅读
- python - Pandas scatter_matrix:标记垂直(x)和水平(y)而不被截断
- python - Keras 功能 API:“检查输入时出错:预期 input_1 有 4 个维度,但得到了形状为 (X, Y) 的数组”
- reactjs - 即使在reactjs中的组件之间切换后如何保持下拉选项值?
- python - 使用 numpy where 子句中的索引数组从数据框中获取行
- javascript - 使用自定义端点扩展现有 API
- azure - How to automate Azure P2S VPN connection on Windows 10 with Jenkins pipeline
- python-3.x - Python3,Gtk3,Glade,从代码中设置标签颜色
- javascript - 删除元素后更新数组长度
- javascript - 如何获取属性的值而不是 [Object object] ?(JavaScript)
- amazon-web-services - AWS Lambda 中的可视化配置视图在哪里?