1. Grid 的基本概念
Grid 容器与 Grid 项目
在 CSS Grid 布局中,主要有两个重要的角色:Grid 容器和 Grid 项目。Grid 容器是包含了所有 Grid 项目的元素,而 Grid 项目则是 Grid 容器内部的直接子元素。
- Grid 容器:通过设置
display: grid;或display: inline-grid;将元素定义为 Grid 容器。 - Grid 项目:Grid 容器的直接子元素自动成为 Grid 项目。
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8" /><title>Grid 示例</title><style>.container {display: grid;grid-template-columns: repeat(3, 1fr);gap: 10px;}.item {background-color: #f0f0f0;padding: 20px;text-align: center;}</style></head><body><div class="container"><div class="item">Item 1</div><div class="item">Item 2</div><div class="item">Item 3</div></div></body></html>
定义网格行与列
通过 grid-template-columns 和 grid-template-rows 属性可以定义网格的列和行。
- 列定义:
grid-template-columns: 100px 200px 100px;表示定义三列,宽度分别为 100px, 200px 和 100px。 - 行定义:
grid-template-rows: 50px 100px;表示定义两行,行高分别为 50px 和 100px。
.container {display: grid;grid-template-columns: 100px 200px 100px;grid-template-rows: 50px 100px;}
网格线与网格区域
- 网格线(Grid Lines):网格中的分割线,列线和行线将网格划分为单元。
- 网格区域(Grid Areas):由网格线围成的矩形区域,可以通过命名区域来简化布局。
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8" /><title>网格区域示例</title><style>.container {display: grid;grid-template-areas:"header header header""sidebar content content""footer footer footer";gap: 10px;}.header {grid-area: header;}.sidebar {grid-area: sidebar;}.content {grid-area: content;}.footer {grid-area: footer;}.item {background-color: #f0f0f0;padding: 20px;text-align: center;}</style></head><body><div class="container"><div class="header item">Header</div><div class="sidebar item">Sidebar</div><div class="content item">Content</div><div class="footer item">Footer</div></div></body></html>
2. 网格布局的应用
创建复杂布局
利用 CSS Grid,可以很容易地创建复杂的布局,如多列布局、重叠布局等。
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8" /><title>复杂布局示例</title><style>.container {display: grid;grid-template-columns: 1fr 2fr 1fr;grid-template-rows: 100px auto 50px;gap: 10px;}.header {grid-column: 1 / span 3;}.sidebar {grid-row: 2;}.content {grid-column: 2 / 4;grid-row: 2 / 3;}.footer {grid-column: 1 / span 3;}.item {background-color: #f0f0f0;padding: 20px;text-align: center;}</style></head><body><div class="container"><div class="header item">Header</div><div class="sidebar item">Sidebar</div><div class="content item">Content</div><div class="footer item">Footer</div></div></body></html>
网格对齐与间距
可以通过 align-items, justify-items, align-content, 和 justify-content 属性来调整网格项目和整个网格的对齐方式。
- align-items:垂直对齐网格项目。
- justify-items:水平对齐网格项目。
- align-content:垂直对齐整个网格。
- justify-content:水平对齐整个网格。
.container {display: grid;grid-template-columns: repeat(3, 1fr);gap: 10px;align-items: center;justify-items: center;}
响应式网格布局
使用 minmax() 函数和媒体查询,可以实现响应式网格布局,适应不同屏幕大小。
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8" /><title>响应式网格示例</title><style>.container {display: grid;grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));gap: 10px;}.item {background-color: #f0f0f0;padding: 20px;text-align: center;}</style></head><body><div class="container"><div class="item">Item 1</div><div class="item">Item 2</div><div class="item">Item 3</div><div class="item">Item 4</div><div class="item">Item 5</div><div class="item">Item 6</div></div></body></html>
