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

任意层级嵌套Flex子元素等宽实现:能否用纯CSS支持动态添加?

当然可以用纯CSS实现!

你的需求完全能通过纯CSS达成——不管是初始的1、2、3,还是后续动态添加的4、5、6,所有元素都能保持相同宽度。

问题根源

你当前代码里的flex: 1是flex: 1 1 auto的简写,其中flex-basis: auto会让元素以自身内容的宽度作为基准来分配剩余空间。在嵌套的flex结构下,父容器的宽度层级不同,就会导致子元素的最终宽度出现差异。

解决方案

把flex: 1替换成flex: 1 1 0%(或者0px也可以)。flex-basis: 0%会强制元素的基准宽度为0,这样所有子元素都会严格平分父容器的可用空间,不管嵌套多少层,最终每个数字元素的宽度都会完全一致。

修改后的完整代码

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="flex">
  <div>
    1
  </div>
  <div class="flex">
    <div>
      2
    </div>
    <div class="flex active">
      <div>
        3
      </div>
    </div>
  </div>
</div>
<button>add</button>

<style>
.flex {
  display: flex;
  flex-direction: row;
  box-sizing: border-box;
  border-left: solid 1px #000;
}

.flex > div {
  flex: 1 1 0%;
}
</style>

<script>
let x = 4;
$("button").on("click", () => {
  $(".active").removeClass("active").append(`
    <div class="flex active">
      <div>
        ${x++}
      </div>
    </div>
  `);
});
</script>

我还把通用的div选择器改成了.flex > div,避免样式意外影响页面其他div元素,让样式作用更精准。

内容的提问来源于stack exchange,提问作者Richard Yan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 08:02:27