
当使用 flex 布局时,若右侧内容较高而左侧 div 背景色未填满,通常是因为 `align-items: center` 限制了子项垂直对齐方式;改为 `stretch` 即可使左右两栏等高并完整渲染背景色。
在 Flex 布局中,align-items 属性控制主轴(此处为垂直方向,因 flex-direction: row)上子元素的对齐方式。默认值为 stretch,它会让所有子元素自动拉伸以填满容器的交叉轴(即高度)。但你的 .container 中显式设置了 align-items: center,这会强制 .left 和 .right 在垂直方向居中对齐——导致 .left 高度仅包裹其内部 元素(通常约 16–20px),无法匹配 .right 的实际高度,因此红色背景无法“撑满”。
✅ 正确做法是将 align-items: center 替换为 align-items: stretch(或直接删除该声明,因其本就是 flex 默认行为):
.container { display: flex; flex-direction: row; justify-content: center; align-items: stretch; /* ✅ 关键修复:使子项在交叉轴(高度)上拉伸 */ border: 1px solid #bebebe; border-radius: 5px; } .left { background-color: red; padding: 0 8px; flex-grow: 1; display: flex; align-items: center; /* 可选:让 radio 水平垂直居中 */ justify-content: center; } .right { width: 100%; background-color: blue; padding: 8px; /* 推荐添加内边距,提升可读性 */ }
⚠️ 注意事项:
- 不要同时声明 align-items: center 和 align-items: stretch(css 后者会覆盖前者,但重复声明易引发维护歧义);
- 若 .left 内部需居中内容(如单个 radio),建议在 .left 上额外设置 align-items: center 和 justify-content: center,而非依赖容器级对齐;
- flex-grow: 1 已确保 .left 占据剩余空间,无需设置固定宽高;
- 如需响应式适配,可结合 min-height 或 max-height 进一步约束,但本例中 stretch 已足够。
这样修改后,.left 将始终与 .right 保持等高,红色背景完整覆盖整个左侧区域,无论右侧内容多少行。