固定宽度容器内中间元素宽度可变时,两侧inline <div>如何平分剩余宽度?
解决固定容器内标题居中+两侧平分黑线的布局问题
嘿,这个需求用flexbox其实就能完美解决,你之前没成功应该是没搭配对正确的属性!我给你两种靠谱的方案,都是直接就能用的:
方案一:Flexbox 实现(推荐)
这是最直观也最易维护的写法,只需要调整几个属性就行:
.headline { width: 700px; display: flex; /* 启用flex布局 */ align-items: center; /* 让黑线和标题垂直居中对齐 */ gap: 16px; /* 可选:给标题和黑线之间加一点间距,视觉更舒服 */ } .blackline { background-color: #000; height: 10px; flex: 1; /* 关键属性:让两个黑线平分容器剩余空间 */ } h1 { margin: 0; /* 去掉h1默认的上下外边距,避免容器高度被撑开 */ }
<div class="headline"> <div class="blackline"></div> <h1>blah blah blah</h1> <div class="blackline"></div> </div>
关键说明:
flex: 1是flex-grow: 1的简写,意思是两个.blackline元素会自动平分容器中除了<h1>内容宽度之外的所有剩余空间align-items: center确保黑线和标题在垂直方向对齐,不会出现黑线贴在标题底部的情况- 可选的
gap属性可以给标题和黑线之间增加间距,提升视觉体验
方案二:Grid 实现
如果你更喜欢用Grid布局,这个写法同样简洁:
.headline { width: 700px; display: grid; grid-template-columns: 1fr auto 1fr; /* 三列:左右平分空间,中间自适应内容 */ align-items: center; gap: 16px; /* 可选间距 */ } .blackline { background-color: #000; height: 10px; } h1 { margin: 0; }
关键说明:
grid-template-columns: 1fr auto 1fr直接定义了三列的宽度规则:左右两列用1fr平分剩余空间,中间列用auto匹配内容宽度,完全符合你的需求
这两种方案都能完美实现你要的效果,而且比float方案更简洁易维护,也不会有inline-block带来的间隙问题~
内容的提问来源于stack exchange,提问作者Voletcat
相关产品推荐
相关产品推荐

