传统响应式布局常依赖复杂的媒体查询和浮动/定位,代码冗余且维护困难。CSS Grid 的 grid-template-areas 属性提供了一种更直观、声明式的解决方案,让你通过"画图"的方式轻松定义布局!
痛点场景: 实现一个在桌面端为三栏布局,在移动端堆叠显示的页面。
传统方案: 需要大量媒体查询覆盖不同断点,调整宽度、浮动或定位。
Grid 优雅解法:
<div class="container">
<header>Header</header>
<nav>Nav</nav>
<main>Main Content</main>
<aside>Aside</aside>
<footer>Footer</footer>
</div>
.container {
display: grid;
gap: 1rem;
grid-template-columns: 1fr 3fr 1fr;
/* 像画图一样定义区域布局! */
grid-template-areas:
"header header header"
"nav main aside"
"footer footer footer";
}
header {
grid-area: header; }
nav {
grid-area: nav; }
main {
grid-area: main; }
aside {
grid-area: aside; }
footer {
grid-area: footer; }
/* 移动端:一个区域一行,自然堆叠 */
@media (max-width: 768px) {
.container {
grid-template-columns: 1fr;
grid-template-areas:
"header"
"nav"
"main"
"aside"
"footer";
}
}
核心优势:
- 视觉化布局: 直接在 CSS 中"绘制"布局结构,代码即蓝图。
- 响应式极简: 媒体查询只需重定义
grid-template-areas和列数,无需修改子项样式。 - 无冗余代码: 避免传统方案中重复设置浮动、清除、宽度覆盖等问题。
- 高可读性: 布局结构一目了然,协作与维护更轻松。
进阶技巧:
- 使用
.表示空单元格(如grid-template-areas: "header header" ". content";)。 - 同名区域合并单元格(如
"head head"实现跨列)。
注意: 确保为所有子元素显式分配 grid-area 名称。