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

如何定义导航栏占满高度、右侧分两行的CSS Grid布局?

CSS Grid实现导航栏占满高度+右侧内容/页脚布局问题解决

需求与问题

我想要通过CSS Grid实现如下布局:

nav content
nav footer

即nav元素占满页面高度并拥有固定宽度,剩余空间分为内容区(content)和页脚区(footer)两部分。编写了如下SCSS代码:

$nav-width: 8.75rem;
$navbar-height: 6.125rem;
$footer-height: 6.438rem;

.auth-grid {
  display: grid;
  grid-template-rows: 1fr $footer-height;
  grid-template-columns: $nav-width 1fr;
  grid-template-areas: 'nav content' 'nav footer';
}

nav {
  grid-area: nav;
}

main {
  grid-area: content;
}

footer {
  grid-area: footer;
}

但实际渲染时出现了第三行空白区域,导航栏未占满页面高度,内容区和页脚区被挤到上方。

问题原因

出现额外行的核心原因是网格容器未设置高度,默认情况下网格容器高度由内部内容撑开,当子元素总高度超出容器默认高度时,Grid会自动创建额外行来容纳内容,导致布局错位。

修复方案

方案1:为网格容器设置全屏高度

先确保页面根元素占满视口高度,再给网格容器设置100%高度:

// 确保根元素占满视口,清除默认边距
html, body {
  height: 100%;
  margin: 0;
  padding: 0;
}

$nav-width: 8.75rem;
$footer-height: 6.438rem;

.auth-grid {
  display: grid;
  height: 100%; // 关键:让网格容器占满父元素高度
  grid-template-rows: 1fr $footer-height;
  grid-template-columns: $nav-width 1fr;
  grid-template-areas: 'nav content' 'nav footer';
}

nav {
  grid-area: nav;
  // 可选:添加背景色便于观察布局
  background-color: #f5f5f5;
}

main {
  grid-area: content;
  background-color: #eeeeee;
}

footer {
  grid-area: footer;
  background-color: #e0e0e0;
}

方案2:使用网格线定位(更简洁)

如果不想依赖grid-template-areas,可以直接通过网格线指定元素位置,效果一致:

html, body {
  height: 100%;
  margin: 0;
}

$nav-width: 8.75rem;
$footer-height: 6.438rem;

.auth-grid {
  display: grid;
  height: 100%;
  grid-template-columns: $nav-width 1fr;
  grid-template-rows: 1fr $footer-height;
}

nav {
  grid-column: 1 / 2;
  grid-row: 1 / -1; // 从第1行延伸到最后一行,自动占满高度
}

main {
  grid-column: 2 / 3;
  grid-row: 1 / 2;
}

footer {
  grid-column: 2 / 3;
  grid-row: 2 / 3;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 05:00:25