You need to enable JavaScript to run this app. 仅用CSS Grid实现无aside时main自动撑满全宽
优惠活动
大模型
产品
解决方案
定价
更多

仅用CSS Grid实现无aside时main自动撑满全宽

纯CSS Grid实现侧边栏缺失时main自动撑满全宽
  • 原有代码的核心错误:显式写死2列网格轨道,显式轨道无论是否有对应子元素都会强制存在,导致aside被移除后,空轨道仍然占用宽度,main无法撑满容器。

实现代码

CSS部分:

html,
body {
  height: 100%;
  margin: 0;
  padding: 0;
  font-size: 2rem;
}

div.root {
  height: 100%;
  background-color: blueviolet;
  display: grid;
  /* 默认单列,main自动撑满全宽 */
  grid-template-columns: 1fr;
}

/* 检测到root直接包含aside时,动态切换为两列布局 */
div.root:has(> aside) {
  grid-template-columns: 200px 1fr;
}

aside {
  background-color: aquamarine;
}

main {
  background-color: burlywood;
}

HTML部分(两种场景通用):

<!-- 存在aside时,自动触发两列布局 -->
<div class="root">
  <aside> aside </aside>
  <main> main </main>
</div>

<!-- 移除/注释aside时,自动回到单列布局,main撑满全宽 -->
<!-- <div class="root">
  <main> main </main>
</div> -->

效果说明

  • 当aside存在时,网格自动切换为200px 1fr两列布局,aside占固定200px宽度,main占满剩余空间。
  • 当aside被移除/注释时,网格回到默认单列1fr布局,main自动撑满容器全部宽度。
  • 兼容性说明::has() 已在Chrome 105+、Safari 15.4+、Firefox 121+等现代浏览器中支持,生产环境可正常使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 01:54:09