You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在父容器存在左侧div时仅用flex布局让第二个div相对父容器居中

可以实现,仅用Flex布局就能满足你的需求,以下是两种符合要求的实现方案:


方案一:无需修改HTML结构,仅调整CSS(仅用position: relative,不属于你禁用的absolute定位)

修改后的CSS代码如下:

.parent {
  width: 100%;
  display: flex;
  background: antiquewhite;
  height: 50px;
  align-items: center; /* 可选,实现内容垂直居中 */
}

.left {
  flex: 0 0 auto; /* 等价于你原来的flex-basis:auto + flex-shrink:0配置 */
  border: solid 2px red;
}

.right {
  display: flex;
  justify-content: center;
  border: solid 2px green;
  /* 删除原有的width:100%,新增以下两行 */
  position: relative;
  left: 50%;
  transform: translateX(-50%);
}

原理:让右侧元素先偏移到父容器水平50%的位置,再向左回移自身宽度的一半,实现自身中心与父容器中心重合。相对定位不会脱离文档流,也不会影响左侧元素的正常布局。


方案二:完全不使用任何position属性,纯Flex属性实现,需新增1个空占位元素

修改后的HTML代码:

<div class='parent'>
  <div class='left'>
    <span>Text 123 Text 123 Text 123</span> <!-- 给左侧内容套一层标签避免折行 -->
  </div>  
  <div class='right'>Text 321 Text 321 Text 321</div>
  <div class="spacer"></div> <!-- 新增空占位元素 -->
</div>

对应修改后的CSS代码:

.parent {
  width: 100%;
  display: flex;
  background: antiquewhite;
  height: 50px;
  align-items: center;
}

.left {
  flex: 1; /* 和右侧占位元素平分剩余宽度 */
  border: solid 2px red;
}

.left span {
  white-space: nowrap; /* 保证左侧内容不折行 */
}

.right {
  flex: 0 0 auto; /* 宽度自适应内容 */
  display: flex;
  justify-content: center;
  border: solid 2px green;
}

.spacer {
  flex: 1; /* 和左侧元素平分剩余宽度,撑起左侧和中间元素的间距 */
}

原理:通过左右两个占比相同的flex元素把中间的右侧元素“挤”到父容器正中间,完全不需要定位相关属性,完全符合纯Flex实现的要求。


内容的提问来源于stack exchange,提问作者Andrej Denisov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 16:09:03