将3列网格网站模板改为2列并移除<nav>元素,求Grid布局指导
一、核心Grid属性直白解析
1. 1fr 到底是什么?
1fr 是Grid的分数单位,专门用来瓜分容器的剩余空间。比如容器总宽度减去所有固定宽度的部分,剩下的空间会按fr的比例分配。举个例子,原来的200px 1fr 200px,就是左右各占200px固定宽度,中间的1fr把剩下的所有宽度全占了。
2. minmax(75px, auto) 怎么理解?
minmax() 就是给元素设置一个尺寸范围:第一个值是最小尺寸,第二个是最大尺寸。minmax(75px, auto) 意思很简单:这个元素的高度至少得有75px,要是里面的内容太多、超过75px了,元素就会自动撑开,跟着内容高度走。
二、彻底移除<nav>元素的操作步骤
要完全删掉nav,必须从HTML和CSS两处彻底清理:
1. HTML部分
直接把整个<nav>标签(包括里面的内容)删掉就行,剩下的结构只留header、main、aside、footer。
2. CSS部分
- 删掉所有和
nav相关的代码:包括.container里的nav网格区域配置,还有单独的nav选择器样式块 - 修改
grid-template-areas,把原来包含nav的区域删掉,重新规划网格布局 - 把网格列数改成2列,重新分配每列的宽度
- 媒体查询里的网格配置也要同步删掉
nav相关的内容
三、修改后的完整代码
HTML代码
<div class="container"> <header> this is the header </header> <main> this is the main </main> <aside> this is the aside </aside> <footer> this is the footer </footer> </div>
CSS代码
body { margin: 0; padding: 0; } .container { display: grid; /* 2列布局:header和footer横跨2列,main和aside各占1列 */ grid-template-areas: "header header" "content side" "footer footer"; /* 列宽配置:main占剩余全部空间,aside固定200px;也可以用1fr 1fr让两列均分宽度 */ grid-template-columns: 1fr 200px; grid-template-rows: auto 1fr auto; grid-gap: 10px; height: 100vh; } header { grid-area: header; background: #baffc9; height: 100px; } main { grid-area: content; } aside { grid-area: side; margin-right: 0.5rem; background: #ffdfba; } footer { grid-area: footer; background: #bae1ff; height: 100px; } @media (max-width: 768px) { .container { /* 移动端改单列,去掉nav的位置 */ grid-template-areas: "header" "content" "side" "footer"; grid-template-columns: 1fr; grid-template-rows: auto /* Header */ 1fr /* Content */ minmax(75px, auto) /* Sidebar */ auto; /* Footer */ } aside { margin: 0; } }
四、额外调整提示
- 要是想让移动端的侧边栏保持最小高度,保留
minmax(75px, auto)就行,它会保证侧边栏至少75px高,内容多了自动撑开 - 2列布局的列宽可以按需改,比如用
300px 1fr让main固定宽度,aside占剩余空间,或者1fr 1fr让两列均分宽度
内容的提问来源于stack exchange,提问作者user22029289
相关产品推荐
相关产品推荐

