CSS Grid是当前最可靠、语义清晰、响应式友好的左右分栏方案,核心为grid-template-columns定义列宽,配合gap控制间距,小屏用媒体查询切单列;Flexbox适用于主次分明场景,需注意align-items: flex-start防等高拉伸;应避免float、table等过时或语义错误方案。

用 display: grid 是当前最可靠、语义清晰、响应式友好的方式,其他方案要么过时(float)、语义错误(<table>),要么在特定场景下容易失控(<code>display: table)。
直接用 CSS Grid 划分左右双栏
核心就是一行声明列宽比例,不依赖内容撑开,也不需要额外清除浮动或设置 BFC。
-
.container { display: grid; grid-template-columns: 30% 70%; gap: 1.5rem; }—— 左右比例固定,gap控制间距 - 小屏切单栏只需加媒体查询:
@media (max-width: 768px) { .container { grid-template-columns: 1fr; } } - 别给子元素设
width,Grid 已经通过列定义控制了宽度;设了反而可能触发意外收缩或溢出 - 如果右侧内容高度远大于左侧,又不想拉伸左侧(比如简历场景),加
align-items: start防止默认的stretch
用 Flexbox 实现双栏(兼容老浏览器或需简单控制)
Flex 更适合主次关系明确、且不强求列宽像素级对齐的场景,比如侧边栏 + 主内容区。
-
.container { display: flex; gap: 1.5rem; align-items: flex-start; }—— 必须显式写align-items: flex-start,否则两栏会被拉成等高,视觉失衡 - 左栏固定宽、右栏自适应:
.sidebar { flex: 0 0 240px; },.main { flex: 1; } - 不要用
width: 240px单独设左栏——flex: 0 0 240px能防止内容撑大时缩容,更稳 - IE11 支持有限,
gap需用margin模拟,且flex-wrap: wrap在小屏下不会自动换行,得靠媒体查询手动切



















