贝利信息

css布局两列等分如何写_通过 flex 1 或 grid fr 单位实现

日期:2026-01-25 00:00 / 作者:P粉602998670
两列等分应优先用grid的1fr 1fr,语义清晰且不受内容干扰;若用flex:1,需确保父容器display:flex、子元素无固定宽度,并设min-width:0防长内容撑破。

flex: 1 实现两列等分的注意事项

直接给两个子元素都设 flex: 1 确实能等分,但前提是父容器必须是 display: flex,且子元素不能有固定宽度(如 widthmin-width)干扰伸缩计算。

.container {
  display: flex;
}
.col {
  flex: 1;
}
.col:first-child {
  background: #e0f7fa;
}
.col:last-child {
  background: #ffccbc;
}

grid1fr 1fr 更直观可靠

grid 方案语义清晰、行为确定:两列各占 1 份可用轨道空间,不受内容尺寸干扰,也不依赖 flex-basis 魔法值。

.container {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
}
.col {
  min-width: 0; /* 防止长内容撑破 */
}

为什么 min-width: 0 在两种方案里都常被忽略

浏览器默认给 flex/grid 子项设 min-width: auto,意味着它不会压缩到比内容最窄宽度还小——比如一个长单词或未换行的链接,会导致列宽失衡甚至溢出。

两列等分本身简单,但真实页面里内容不可控,min-width: 0 和内容截断处理才是决定是否“真等分”的关键。