1 前言
CSS Grid 布局是一种强大而灵活的布局系统,可以让开发者通过简单的 CSS 规则轻松创建复杂的网页布局。
1.1 设备支持支持时间点
Google Chrome: 从 2017 年的版本 57 开始全面支持。
Firefox: 从 2017 年的版本 52 开始支持。
Safari: 从 2017 年的版本 10.1 开始支持。
Microsoft Edge: 从 2017 年的版本 16 开始支持。
Internet Explorer: 仅 IE 11 部分支持,且需要使用旧版语法。
移动端浏览器(如 Chrome for Android、Safari for iOS)也在 2017 年后开始支持。
微信小程序:微信小程序自 2018 年的更新起,已经支持了 display: grid
布局。根据其官方开发文档,绝大多数的现代设备和微信版本都支持这一特性,因此你可以在大部分微信小程序中安全使用 grid
布局。
支付宝小程序:支付宝小程序同样支持 display: grid
布局。不过,某些特定情况下,例如使用 grid
组件嵌套 grid
时,可能会遇到问题,尤其是在 slot
插入组件时。这种情况下可能会导致父子组件之间的关系失效,从而导致布局出错
1.2 容器布局属性(应用于 Grid 容器)
这些属性定义网格的布局方式:
display: grid | inline-grid
:将一个容器定义为网格容器。
grid-template-columns
:定义网格的列数和每列的宽度。
grid-template-rows
:定义网格的行数和每行的高度。
grid-template-areas
:通过命名区域定义布局。
grid-column-gap
/ grid-row-gap
/ gap
:设置行列之间的间距。
grid-auto-columns
:为自动生成的列定义宽度。
grid-auto-rows
:为自动生成的行定义高度。
grid-auto-flow
:控制自动布局项的填充顺序。
justify-items
:设置网格项在网格单元中的水平对齐方式。
align-items
:设置网格项在网格单元中的垂直对齐方式。
justify-content
:控制整个网格容器在其容器中的水平对齐方式。
align-content
:控制整个网格容器在其容器中的垂直对齐方式。
1.3 内部元素属性(应用于 Grid 项目)
这些属性定义每个网格项在网格中的行为:
grid-column-start
/ grid-column-end
:定义项目在列的起始位置和结束位置。
grid-row-start
/ grid-row-end
:定义项目在行的起始位置和结束位置。
grid-area
:指定网格项的命名区域,或者用来定义该项在网格中的位置。
justify-self
:设置单个网格项在单元格中的水平对齐方式。
align-self
:设置单个网格项在单元格中的垂直对齐方式。
place-self
:同时设置 align-self
和 justify-self
。
2 容器布局属性
2.1 display
display: grid;
display: inline-grid;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
:root {
--grid-gap: 10px;
--grid-item-height: 50px;
--bg-color: #9900FF;
--text-color: white;
}
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
}
.grid-container {
display: grid;
gap: 5px;
}
.grid-item {
height: 30px;
background-color: var(--bg-color);
border-radius: 10px;
display: flex;
justify-content: center;
align-items: center;
color: var(--text-color);
font-size: 20px;
}
</style>
</head>
<body>
<h1><center>有勇气的牛排</center></h1>
<div class="grid-container">
<div class="grid-item">1</div>
<div class="grid-item">2</div>
<div class="grid-item">3</div>
<div class="grid-item">4</div>
<div class="grid-item">5</div>
<div class="grid-item">6</div>
<div class="grid-item">7</div>
</div>
</body>
</html>

2.2 grid-templage-rows 行高 与 grid-template-columns 列属性
定义网格容器中的列布局,即每一列的宽度和数量(按顺序定义每一列的大小)。
语法: grid-template-columns: <track-size> <track-size> ...;
track-size
: 指每个列的宽度,可以是:像素px、百分比%、可用空间份额fr、auto。
2.2.1 行高 px指定
<style>
.grid-container {
display: grid;
grid-template-rows: 80px 50px auto;
gap: 10px;
}
.grid-item {
background-color: var(--bg-color);
border-radius: 10px;
display: flex;
justify-content: center;
align-items: center;
color: var(--text-color);
font-size: 20px;
}
</style>
<div class="grid-container">
<div class="grid-item">1 高80px</div>
<div class="grid-item">2 高50px</div>
<div class="grid-item">3</div>
<div class="grid-item">4</div>
<div class="grid-item">5</div>
<div class="grid-item">6</div>
<div class="grid-item">7</div>
</div>

2.2.2 行高 px与repeat
<style>
.grid-container {
display: grid;
grid-template-rows: repeat(3, 50px) 100px;
gap: 10px;
}
.grid-item {
background-color: var(--bg-color);
border-radius: 10px;
display: flex;
justify-content: center;
align-items: center;
color: var(--text-color);
font-size: 20px;
}
</style>
<div class="grid-container">
<div class="grid-item">1 重复50px</div>
<div class="grid-item">2 重复50px</div>
<div class="grid-item">3 重复50px</div>
<div class="grid-item">4 指定100px</div>
<div class="grid-item">5</div>
<div class="grid-item">6</div>
<div class="grid-item">7</div>
</div>

2.2.3 列 空间份额 fr
<style>
.grid-container {
display: grid;
grid-template-rows: repeat(10, 50px);
grid-template-columns: 1fr 2fr;
gap: 10px;
}
</style>
<div class="grid-container">
<div class="grid-item">1</div>
<div class="grid-item">2</div>
<div class="grid-item">3</div>
<div class="grid-item">4</div>
<div class="grid-item">5</div>
<div class="grid-item">6</div>
<div class="grid-item">7</div>
</div>

2.2.4 列 repeat
grid-template-columns: repeat(3, 1fr);

2.2.5 列 auto-fill 关键字
通常与 repeat()
函数一起使用,可以在创建网格时自动填充尽可能多的列,并根据容器的可用空间动态调整列的数量,从而实现响应式的布局。
语法:grid-template-columns: repeat(auto-fill, <track-size>);
grid-template-columns: repeat(auto-fill, 150px);
2.2.6 列 minmax() 函数
定义最小、嘴大尺寸,适用于响应式,不至于元素过大或过小。
grid-template-columns: repeat(3, minmax(100px, 200px));
2.2.7 列 auto 关键字
.grid-container {
display: grid;
grid-template-rows: repeat(10, 50px);
grid-template-columns: 100px auto 100px;
gap: 10px;
}

2.3 网格间距
grid-row-gap 行间距
grid-column-gap:列间距
grid-row-gap: 10px;
grid-column-gap: 20px;
等同于
grid-gap: 10px 20px;
2.4 grid-auto-flow 属性(自动排列)
grid-auto-flow 属性是 CSS Grid布局中的一个属性,用于控制自动放置网格项的顺序和方式。当创建一个网格布局时,有时网格项并不明确放置在特定的网格单元中,grid-auto-flow 就巨鼎了这些未明确指定位置的网格项如何被自动排列。
语法:grid-auto-flow: row | column | dense | row dense | column dense;
row: 默认值,未指定位置的网格项将按行的顺序(从左到右,从上到下)自动放置。
columu: 未指定位置的,从上到下,从左到右。
dense: 启用“紧密填充”,会尝试在先前的空白位置放置网格项,避免空格。
row dense: 按行顺序自动放置,但会尝试紧密填充空白区域。
column dense: 按行顺序自动防止,但会尝试紧密填充空白区域。
2.4.1 按行填充
<style>
.grid-container {
display: grid;
grid-template-columns: repeat(3, 100px);
grid-auto-rows: 100px;
gap: 10px;
grid-auto-flow: row;
}
.grid-item {
background-color: var(--bg-color);
border-radius: 10px;
display: flex;
justify-content: center;
align-items: center;
color: var(--text-color);
font-size: 20px;
}
</style>
<div class="grid-container">
<div class="grid-item">1</div>
<div class="grid-item">2</div>
<div class="grid-item">3</div>
<div class="grid-item">4</div>
<div class="grid-item">5</div>
<div class="grid-item">6</div>
<div class="grid-item">7</div>
</div>
2.4.2 紧密填充 dense
.grid-container {
display: grid;
/* 三列布局 */
grid-template-columns: repeat(3, 100px);
/* 每行高度为 100px */
grid-auto-rows: 100px;
gap: 10px;
grid-auto-flow: dense;
}
<div class="grid-container">
<div class="grid-item" style="grid-column: 1 / 3;">1</div>
<div class="grid-item">2</div>
<div class="grid-item" style="grid-column: 1 / 3;">33</div>
<div class="grid-item">4</div>
<div class="grid-item">5</div>
<div class="grid-item">6</div>
<div class="grid-item">7</div>
</div>

2.5 justify-items 、align-items 、 place-items 属性
2.5.1 justify-items
start: 对齐单元格的起始边缘。
end: 对齐单元格的结束边缘。
centet: 单元格内部中间。
stretch: 拉伸,沾满单元格的整个宽度(默认值)。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.grid-container, .grid-container2, .grid-container3, .grid-container4 {
display: grid;
grid-template-columns: 100px 200px 100px;
grid-gap: 5px;
grid-auto-rows: 50px;
justify-items: start;
border: 1px solid blue;
margin-bottom: 10px;
font-size: 20px;
}
.grid-container2 {
justify-items: end;
}
.grid-container3 {
justify-items: center;
}
.grid-container4 {
justify-items: stretch;
}
p {
font-size: 20px;
font-weight: 800;
}
</style>
</head>
<body>
<p>justify-items: start;</p>
<div class="grid-container">
<div class="grid-item" style="background-color: #66FFCC">1</div>
<div class="grid-item" style="background-color: #990000">2</div>
<div class="grid-item" style="background-color: #9900FF">3</div>
<div class="grid-item" style="background-color: #996633">4</div>
<div class="grid-item" style="background-color: #9966CC">5</div>
<div class="grid-item" style="background-color: #99FF00">6</div>
<div class="grid-item" style="background-color: #CC0099">7</div>
<div class="grid-item" style="background-color: #CC6600">8</div>
<div class="grid-item" style="background-color: #FF00FF">9</div>
</div>
<p>justify-items: end;</p>
<div class="grid-container2">
<div class="grid-item" style="background-color: #66FFCC">1</div>
<div class="grid-item" style="background-color: #990000">2</div>
<div class="grid-item" style="background-color: #9900FF">3</div>
<div class="grid-item" style="background-color: #996633">4</div>
<div class="grid-item" style="background-color: #9966CC">5</div>
<div class="grid-item" style="background-color: #99FF00">6</div>
<div class="grid-item" style="background-color: #CC0099">7</div>
<div class="grid-item" style="background-color: #CC6600">8</div>
<div class="grid-item" style="background-color: #FF00FF">9</div>
</div>
<p>justify-items: center;</p>
<div class="grid-container3">
<div class="grid-item" style="background-color: #66FFCC">1</div>
<div class="grid-item" style="background-color: #990000">2</div>
<div class="grid-item" style="background-color: #9900FF">3</div>
<div class="grid-item" style="background-color: #996633">4</div>
<div class="grid-item" style="background-color: #9966CC">5</div>
<div class="grid-item" style="background-color: #99FF00">6</div>
<div class="grid-item" style="background-color: #CC0099">7</div>
<div class="grid-item" style="background-color: #CC6600">8</div>
<div class="grid-item" style="background-color: #FF00FF">9</div>
</div>
<p>justify-items: stretch;</p>
<div class="grid-container4">
<div class="grid-item" style="background-color: #66FFCC">1</div>
<div class="grid-item" style="background-color: #990000">2</div>
<div class="grid-item" style="background-color: #9900FF">3</div>
<div class="grid-item" style="background-color: #996633">4</div>
<div class="grid-item" style="background-color: #9966CC">5</div>
<div class="grid-item" style="background-color: #99FF00">6</div>
<div class="grid-item" style="background-color: #CC0099">7</div>
<div class="grid-item" style="background-color: #CC6600">8</div>
<div class="grid-item" style="background-color: #FF00FF">9</div>
</div>
</body>
</html>

2.5.2 align-content
与justify-items同理,方向为垂直方向。
3 内部元素属性
3.1 grid-area 定义区域
3.1.1 固定布局
如果单元没有内容,则用点号代替。
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>有勇气的牛排 语义化的 Grid 布局示例</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
color: black;
}
.grid-container {
display: grid;
grid-template-columns: 1fr 2fr 1fr;
grid-template-areas:
"header header header"
"sidebar main aside"
"footer footer footer";
gap: 10px;
}
header {
grid-area: header;
background-color: #ff6666;
padding: 20px;
text-align: center;
color: white;
font-size: 24px;
}
nav {
grid-area: sidebar;
background-color: #66ccff;
padding: 20px;
color: white;
}
main {
grid-area: main;
background-color: #99ff99;
padding: 20px;
color: white;
}
article {
background-color: rgba(0, 0, 0, 0.1);
margin-bottom: 15px;
padding: 10px;
border-radius: 5px;
}
aside {
grid-area: aside;
background-color: #ff99ff;
padding: 20px;
color: white;
}
footer {
grid-area: footer;
background-color: #ffcc66;
padding: 20px;
text-align: center;
color: white;
font-size: 18px;
}
</style>
</head>
<body>
<div class="grid-container">
<header>
有勇气的牛排博客
</header>
<nav>
<ul>
<li><a href="#" style="color:white;">链接 1</a></li>
<li><a href="#" style="color:white;">链接 2</a></li>
<li><a href="#" style="color:white;">链接 3</a></li>
</ul>
</nav>
<main>
<article>
<h2>文章标题 1</h2>
<p>这是文章 1 的内容。语义化标签使页面更具结构性和可读性。</p>
</article>
</main>
<aside>
侧边栏
</aside>
<footer>
© 2024 有勇气的牛排
</footer>
</div>
</body>
</html>

2.1.2 响应式布局
有勇氣的牛排創作:
https://www.couragesteak.com/article/487
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>响应式 Grid 布局示例</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
}
.grid-container {
display: grid;
gap: 10px;
padding: 10px;
height: 100vh;
grid-template-areas:
"header"
"main"
"footer";
}
header {
grid-area: header;
background-color: #ff6666;
padding: 20px;
text-align: center;
color: white;
font-size: 24px;
}
aside {
grid-area: aside;
display: none;
background-color: #ff99ff;
padding: 20px;
color: white;
}
main {
grid-area: main;
background-color: #99ff99;
padding: 20px;
color: white;
}
footer {
grid-area: footer;
background-color: #ffcc66;
padding: 20px;
text-align: center;
color: white;
font-size: 18px;
}
nav {
grid-area: sidebar;
display: none;
background-color: #66ccff;
padding: 20px;
color: white;
}
article {
background-color: rgba(0, 0, 0, 0.1);
margin-bottom: 15px;
padding: 10px;
border-radius: 5px;
}
@media (min-width: 600px) {
.grid-container {
grid-template-columns: 1fr 2fr 1fr;
grid-template-rows: auto 1fr auto;
grid-template-areas:
"header header header"
"main main aside"
"footer footer footer";
}
footer {
font-size: 16px;
}
aside {
display: block;
}
}
@media (min-width: 1024px) {
.grid-container {
grid-template-columns: 1fr 2fr 1fr;
grid-template-rows: auto 1fr auto;
grid-template-areas:
"header header header"
"sidebar main aside"
"footer footer footer";
}
header {
font-size: 30px;
}
footer {
font-size: 20px;
}
nav {
display: block;
}
aside {
display: block;
}
}
</style>
</head>
<body>
<div class="grid-container">
<header>
有勇气的牛排博客
</header>
<nav>
<ul>
<li><a href="#" style="color:white;">链接 1</a></li>
<li><a href="#" style="color:white;">链接 2</a></li>
<li><a href="#" style="color:white;">链接 3</a></li>
</ul>
</nav>
<main>
<article>
<h2>文章标题 1</h2>
<p>这是文章 1 的内容。语义化标签使页面更具结构性和可读性。</p>
</article>
<article>
<h2>文章标题 2</h2>
<p>这是文章 2 的内容。使用语义化标签能够提高 SEO 排名。</p>
</article>
</main>
<aside>
<h3>附加内容</h3>
<p>这里可以是附加的文章或广告信息。</p>
</aside>
<footer>
© 2024 有勇气的牛排
</footer>
</div>
</body>
</html>

4 案例
4.1 基础案例
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>有勇气的牛排 CSS Grid宫格 示例</title>
<style>
:root {
--grid-gap: 10px;
--grid-item-height: 50px;
--bg-color: #9900FF;
--text-color: white;
}
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
}
.grid-container {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 5px;
padding: 10px;
}
.grid-item {
height: 150px;
background-color: var(--bg-color);
border-radius: 10px;
display: flex;
justify-content: center;
align-items: center;
color: var(--text-color);
font-size: 20px;
}
@media (max-width: 900px) {
.grid-container {
grid-template-columns: repeat(2, 1fr);
}
}
</style>
</head>
<body>
<h1>有勇气的牛排</h1>
<div class="grid-container">
<div class="grid-item">1</div>
<div class="grid-item">2</div>
<div class="grid-item">3</div>
<div class="grid-item">4</div>
<div class="grid-item">5</div>
<div class="grid-item">6</div>
<div class="grid-item">7</div>
</div>
</body>
</html>


<h2><a id="1__0"></a>1 前言</h2>
<p>CSS Grid 布局是一种强大而灵活的布局系统,可以让开发者通过简单的 CSS 规则轻松创建复杂的网页布局。</p>
<h3><a id="11__4"></a>1.1 设备支持支持时间点</h3>
<p><strong>Google Chrome</strong>: 从 <strong>2017 年</strong>的版本 57 开始全面支持。</p>
<p><strong>Firefox</strong>: 从 <strong>2017 年</strong>的版本 52 开始支持。</p>
<p><strong>Safari</strong>: 从 <strong>2017 年</strong>的版本 10.1 开始支持。</p>
<p><strong>Microsoft Edge</strong>: 从 <strong>2017 年</strong>的版本 16 开始支持。</p>
<p><strong>Internet Explorer</strong>: 仅 IE 11 部分支持,且需要使用旧版语法。</p>
<p><strong>移动端浏览器</strong>(如 Chrome for Android、Safari for iOS)也在 2017 年后开始支持。</p>
<p><strong>微信小程序</strong>:微信小程序自 2018 年的更新起,已经支持了 <code>display: grid</code> 布局。根据其官方开发文档,绝大多数的现代设备和微信版本都支持这一特性,因此你可以在大部分微信小程序中安全使用 <code>grid</code> 布局。</p>
<p><strong>支付宝小程序</strong>:支付宝小程序同样支持 <code>display: grid</code> 布局。不过,某些特定情况下,例如使用 <code>grid</code> 组件嵌套 <code>grid</code> 时,可能会遇到问题,尤其是在 <code>slot</code> 插入组件时。这种情况下可能会导致父子组件之间的关系失效,从而导致布局出错</p>
<h3><a id="12__Grid__24"></a>1.2 容器布局属性(应用于 Grid 容器)</h3>
<p>这些属性定义网格的布局方式:</p>
<ul>
<li><code>display: grid | inline-grid</code>:将一个容器定义为网格容器。</li>
<li><code>grid-template-columns</code>:定义网格的列数和每列的宽度。</li>
<li><code>grid-template-rows</code>:定义网格的行数和每行的高度。</li>
<li><code>grid-template-areas</code>:通过命名区域定义布局。</li>
<li><code>grid-column-gap</code> / <code>grid-row-gap</code> / <code>gap</code>:设置行列之间的间距。</li>
<li><code>grid-auto-columns</code>:为自动生成的列定义宽度。</li>
<li><code>grid-auto-rows</code>:为自动生成的行定义高度。</li>
<li><code>grid-auto-flow</code>:控制自动布局项的填充顺序。</li>
<li><code>justify-items</code>:设置网格项在网格单元中的水平对齐方式。</li>
<li><code>align-items</code>:设置网格项在网格单元中的垂直对齐方式。</li>
<li><code>justify-content</code>:控制整个网格容器在其容器中的水平对齐方式。</li>
<li><code>align-content</code>:控制整个网格容器在其容器中的垂直对齐方式。</li>
</ul>
<h3><a id="13__Grid__41"></a>1.3 内部元素属性(应用于 Grid 项目)</h3>
<p>这些属性定义每个网格项在网格中的行为:</p>
<ul>
<li><code>grid-column-start</code> / <code>grid-column-end</code>:定义项目在列的起始位置和结束位置。</li>
<li><code>grid-row-start</code> / <code>grid-row-end</code>:定义项目在行的起始位置和结束位置。</li>
<li><code>grid-area</code>:指定网格项的命名区域,或者用来定义该项在网格中的位置。</li>
<li><code>justify-self</code>:设置单个网格项在单元格中的水平对齐方式。</li>
<li><code>align-self</code>:设置单个网格项在单元格中的垂直对齐方式。</li>
<li><code>place-self</code>:同时设置 <code>align-self</code> 和 <code>justify-self</code>。</li>
</ul>
<h2><a id="2__54"></a>2 容器布局属性</h2>
<h3><a id="21_display_56"></a>2.1 display</h3>
<pre><div class="hljs"><code class="lang-css"><span class="hljs-attribute">display</span>: grid; <span class="hljs-comment">/* 构建块级元素 */</span>
<span class="hljs-attribute">display</span>: inline-grid; <span class="hljs-comment">/* 构建行内元素 */</span>
</code></div></pre>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-meta"><!DOCTYPE <span class="hljs-keyword">html</span>></span>
<span class="hljs-tag"><<span class="hljs-name">html</span> <span class="hljs-attr">lang</span>=<span class="hljs-string">"en"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">head</span>></span>
<span class="hljs-tag"><<span class="hljs-name">meta</span> <span class="hljs-attr">charset</span>=<span class="hljs-string">"UTF-8"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">title</span>></span>Title<span class="hljs-tag"></<span class="hljs-name">title</span>></span>
<span class="hljs-tag"><<span class="hljs-name">style</span>></span><span class="language-css">
<span class="hljs-selector-pseudo">:root</span> {
<span class="hljs-attr">--grid-gap</span>: <span class="hljs-number">10px</span>; <span class="hljs-comment">/* 网格间距 */</span>
<span class="hljs-attr">--grid-item-height</span>: <span class="hljs-number">50px</span>; <span class="hljs-comment">/* 网格项高度 */</span>
<span class="hljs-attr">--bg-color</span>: <span class="hljs-number">#9900FF</span>; <span class="hljs-comment">/* 背景色 */</span>
<span class="hljs-attr">--text-color</span>: white; <span class="hljs-comment">/* 字体颜色 */</span>
}
<span class="hljs-selector-tag">body</span> {
<span class="hljs-attribute">font-family</span>: Arial, sans-serif;
<span class="hljs-attribute">margin</span>: <span class="hljs-number">0</span>;
<span class="hljs-attribute">padding</span>: <span class="hljs-number">0</span>;
}
<span class="hljs-selector-class">.grid-container</span> {
<span class="hljs-attribute">display</span>: grid;
<span class="hljs-attribute">gap</span>: <span class="hljs-number">5px</span>; <span class="hljs-comment">/* 设置网格之间的间距 */</span>
}
<span class="hljs-selector-class">.grid-item</span> {
<span class="hljs-attribute">height</span>: <span class="hljs-number">30px</span>;
<span class="hljs-attribute">background-color</span>: <span class="hljs-built_in">var</span>(--bg-color);
<span class="hljs-attribute">border-radius</span>: <span class="hljs-number">10px</span>;
<span class="hljs-comment">/* 内容、文字样式 */</span>
<span class="hljs-attribute">display</span>: flex;
<span class="hljs-attribute">justify-content</span>: center;
<span class="hljs-attribute">align-items</span>: center;
<span class="hljs-attribute">color</span>: <span class="hljs-built_in">var</span>(--text-color);
<span class="hljs-attribute">font-size</span>: <span class="hljs-number">20px</span>;
}
</span><span class="hljs-tag"></<span class="hljs-name">style</span>></span>
<span class="hljs-tag"></<span class="hljs-name">head</span>></span>
<span class="hljs-tag"><<span class="hljs-name">body</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h1</span>></span><span class="hljs-tag"><<span class="hljs-name">center</span>></span>有勇气的牛排<span class="hljs-tag"></<span class="hljs-name">center</span>></span><span class="hljs-tag"></<span class="hljs-name">h1</span>></span> <span class="hljs-comment"><!-- 添加标题以提高可读性 --></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-container"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>1<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>2<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>3<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>4<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>5<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>6<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>7<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"></<span class="hljs-name">body</span>></span>
<span class="hljs-tag"></<span class="hljs-name">html</span>></span>
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/966eef2c465a1c6f6fb8a4681168d4f0.png" alt="image.png" /></p>
<h3><a id="22_gridtemplagerows___gridtemplatecolumns__119"></a>2.2 grid-templage-rows 行高 与 grid-template-columns 列属性</h3>
<p>定义网格容器中的列布局,即每一列的宽度和数量(按顺序定义每一列的大小)。</p>
<p>语法: <code>grid-template-columns: <track-size> <track-size> ...;</code></p>
<p><code>track-size</code>: 指每个列的宽度,可以是:像素px、百分比%、可用空间份额fr、auto。</p>
<h4><a id="221__px_127"></a>2.2.1 行高 px指定</h4>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">style</span>></span><span class="language-css">
<span class="hljs-selector-class">.grid-container</span> {
<span class="hljs-attribute">display</span>: grid;
<span class="hljs-attribute">grid-template-rows</span>: <span class="hljs-number">80px</span> <span class="hljs-number">50px</span> auto;
<span class="hljs-attribute">gap</span>: <span class="hljs-number">10px</span>;
}
<span class="hljs-selector-class">.grid-item</span> {
<span class="hljs-attribute">background-color</span>: <span class="hljs-built_in">var</span>(--bg-color);
<span class="hljs-attribute">border-radius</span>: <span class="hljs-number">10px</span>;
<span class="hljs-comment">/* 内容、文字样式 */</span>
<span class="hljs-attribute">display</span>: flex;
<span class="hljs-attribute">justify-content</span>: center;
<span class="hljs-attribute">align-items</span>: center;
<span class="hljs-attribute">color</span>: <span class="hljs-built_in">var</span>(--text-color);
<span class="hljs-attribute">font-size</span>: <span class="hljs-number">20px</span>;
}
</span><span class="hljs-tag"></<span class="hljs-name">style</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-container"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>1 高80px<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>2 高50px<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>3<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>4<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>5<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>6<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>7<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/2077d240731b32f38bc9cd73d3b06106.png" alt="image.png" /></p>
<h4><a id="222__pxrepeat_162"></a>2.2.2 行高 px与repeat</h4>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">style</span>></span><span class="language-css">
<span class="hljs-selector-class">.grid-container</span> {
<span class="hljs-attribute">display</span>: grid;
<span class="hljs-attribute">grid-template-rows</span>: <span class="hljs-built_in">repeat</span>(<span class="hljs-number">3</span>, <span class="hljs-number">50px</span>) <span class="hljs-number">100px</span>;
<span class="hljs-attribute">gap</span>: <span class="hljs-number">10px</span>;
}
<span class="hljs-selector-class">.grid-item</span> {
<span class="hljs-attribute">background-color</span>: <span class="hljs-built_in">var</span>(--bg-color);
<span class="hljs-attribute">border-radius</span>: <span class="hljs-number">10px</span>;
<span class="hljs-comment">/* 内容、文字样式 */</span>
<span class="hljs-attribute">display</span>: flex;
<span class="hljs-attribute">justify-content</span>: center;
<span class="hljs-attribute">align-items</span>: center;
<span class="hljs-attribute">color</span>: <span class="hljs-built_in">var</span>(--text-color);
<span class="hljs-attribute">font-size</span>: <span class="hljs-number">20px</span>;
}
</span><span class="hljs-tag"></<span class="hljs-name">style</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-container"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>1 重复50px<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>2 重复50px<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>3 重复50px<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>4 指定100px<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>5<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>6<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>7<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/235cd8d475337728a8b73a606586b49b.png" alt="image.png" /></p>
<h4><a id="223___fr_198"></a>2.2.3 列 空间份额 fr</h4>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">style</span>></span><span class="language-css">
<span class="hljs-selector-class">.grid-container</span> {
<span class="hljs-attribute">display</span>: grid;
<span class="hljs-comment">/* 指定行高 */</span>
<span class="hljs-attribute">grid-template-rows</span>: <span class="hljs-built_in">repeat</span>(<span class="hljs-number">10</span>, <span class="hljs-number">50px</span>);
<span class="hljs-comment">/* 指定列 两列,第一列占1/3,第二列占2/3 */</span>
<span class="hljs-attribute">grid-template-columns</span>: <span class="hljs-number">1</span>fr <span class="hljs-number">2</span>fr;
<span class="hljs-attribute">gap</span>: <span class="hljs-number">10px</span>;
}
</span><span class="hljs-tag"></<span class="hljs-name">style</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-container"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>1<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>2<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>3<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>4<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>5<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>6<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>7<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/8c5b28b696fb39a8beb6f174696a6877.png" alt="image.png" /></p>
<h4><a id="224__repeat_225"></a>2.2.4 列 repeat</h4>
<pre><div class="hljs"><code class="lang-css"><span class="hljs-attribute">grid-template-columns</span>: <span class="hljs-built_in">repeat</span>(<span class="hljs-number">3</span>, <span class="hljs-number">1</span>fr);
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/9fd89f34754e7f6a9e52d788e8ac5eca.png" alt="image.png" /></p>
<h4><a id="225__autofill__233"></a>2.2.5 列 auto-fill 关键字</h4>
<p>通常与 <code>repeat()</code> 函数一起使用,可以在创建网格时自动填充尽可能多的列,并根据容器的可用空间动态调整列的数量,从而实现响应式的布局。</p>
<p>语法:<code>grid-template-columns: repeat(auto-fill, <track-size>);</code></p>
<pre><div class="hljs"><code class="lang-css"><span class="hljs-comment">/* 每列宽150px,自动填充尽可能多的列 */</span>
<span class="hljs-attribute">grid-template-columns</span>: <span class="hljs-built_in">repeat</span>(auto-fill, <span class="hljs-number">150px</span>);
</code></div></pre>
<h4><a id="226__minmax__244"></a>2.2.6 列 minmax() 函数</h4>
<p>定义最小、嘴大尺寸,适用于响应式,不至于元素过大或过小。</p>
<pre><div class="hljs"><code class="lang-css"><span class="hljs-attribute">grid-template-columns</span>: <span class="hljs-built_in">repeat</span>(<span class="hljs-number">3</span>, <span class="hljs-built_in">minmax</span>(<span class="hljs-number">100px</span>, <span class="hljs-number">200px</span>));
</code></div></pre>
<h4><a id="227__auto__252"></a>2.2.7 列 auto 关键字</h4>
<pre><div class="hljs"><code class="lang-css"><span class="hljs-selector-class">.grid-container</span> {
<span class="hljs-attribute">display</span>: grid;
<span class="hljs-attribute">grid-template-rows</span>: <span class="hljs-built_in">repeat</span>(<span class="hljs-number">10</span>, <span class="hljs-number">50px</span>);
<span class="hljs-attribute">grid-template-columns</span>: <span class="hljs-number">100px</span> auto <span class="hljs-number">100px</span>;
<span class="hljs-attribute">gap</span>: <span class="hljs-number">10px</span>;
}
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/1094231d5dd811c41d011c8e266d9bfb.png" alt="image.png" /></p>
<h3><a id="23__265"></a>2.3 网格间距</h3>
<p>grid-row-gap 行间距</p>
<p>grid-column-gap:列间距</p>
<pre><div class="hljs"><code class="lang-css"><span class="hljs-attribute">grid-row</span>-<span class="hljs-attribute">gap</span>: <span class="hljs-number">10px</span>;
<span class="hljs-attribute">grid-column</span>-<span class="hljs-attribute">gap</span>: <span class="hljs-number">20px</span>;
</code></div></pre>
<p>等同于</p>
<pre><div class="hljs"><code class="lang-css"><span class="hljs-attribute">grid-gap</span>: <span class="hljs-number">10px</span> <span class="hljs-number">20px</span>;
</code></div></pre>
<h3><a id="24_gridautoflow__282"></a>2.4 grid-auto-flow 属性(自动排列)</h3>
<p>grid-auto-flow 属性是 CSS Grid布局中的一个属性,用于控制自动放置网格项的顺序和方式。当创建一个网格布局时,有时网格项并不明确放置在特定的网格单元中,grid-auto-flow 就巨鼎了这些未明确指定位置的网格项如何被自动排列。</p>
<p>语法:<code>grid-auto-flow: row | column | dense | row dense | column dense;</code></p>
<pre><div class="hljs"><code class="lang-shell">row: 默认值,未指定位置的网格项将按行的顺序(从左到右,从上到下)自动放置。
columu: 未指定位置的,从上到下,从左到右。
dense: 启用“紧密填充”,会尝试在先前的空白位置放置网格项,避免空格。
row dense: 按行顺序自动放置,但会尝试紧密填充空白区域。
column dense: 按行顺序自动防止,但会尝试紧密填充空白区域。
</code></div></pre>
<h4><a id="241__296"></a>2.4.1 按行填充</h4>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">style</span>></span><span class="language-css">
<span class="hljs-selector-class">.grid-container</span> {
<span class="hljs-attribute">display</span>: grid;
<span class="hljs-attribute">grid-template-columns</span>: <span class="hljs-built_in">repeat</span>(<span class="hljs-number">3</span>, <span class="hljs-number">100px</span>); <span class="hljs-comment">/* 三列布局 */</span>
<span class="hljs-attribute">grid-auto-rows</span>: <span class="hljs-number">100px</span>; <span class="hljs-comment">/* 每行高度为 100px */</span>
<span class="hljs-attribute">gap</span>: <span class="hljs-number">10px</span>;
<span class="hljs-comment">/* 默认按行填充 */</span>
<span class="hljs-attribute">grid-auto-flow</span>: row;
}
<span class="hljs-selector-class">.grid-item</span> {
<span class="hljs-attribute">background-color</span>: <span class="hljs-built_in">var</span>(--bg-color);
<span class="hljs-attribute">border-radius</span>: <span class="hljs-number">10px</span>;
<span class="hljs-comment">/* 内容、文字样式 */</span>
<span class="hljs-attribute">display</span>: flex;
<span class="hljs-attribute">justify-content</span>: center;
<span class="hljs-attribute">align-items</span>: center;
<span class="hljs-attribute">color</span>: <span class="hljs-built_in">var</span>(--text-color);
<span class="hljs-attribute">font-size</span>: <span class="hljs-number">20px</span>;
}
</span><span class="hljs-tag"></<span class="hljs-name">style</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-container"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>1<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>2<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>3<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>4<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>5<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>6<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>7<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
</code></div></pre>
<h4><a id="242__dense_334"></a>2.4.2 紧密填充 dense</h4>
<pre><div class="hljs"><code class="lang-html">.grid-container {
display: grid;
/* 三列布局 */
grid-template-columns: repeat(3, 100px);
/* 每行高度为 100px */
grid-auto-rows: 100px;
gap: 10px;
grid-auto-flow: dense;
}
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-container"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"grid-column: 1 / 3;"</span>></span>1<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>2<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"grid-column: 1 / 3;"</span>></span>33<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>4<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>5<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>6<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>7<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/82f9ec1811755ffbd8572dbd6f1196be.png" alt="image.png" /></p>
<h3><a id="25_justifyitems_alignitems__placeitems__361"></a>2.5 justify-items 、align-items 、 place-items 属性</h3>
<h4><a id="251_justifyitems_363"></a>2.5.1 justify-items</h4>
<p>start: 对齐单元格的起始边缘。</p>
<p>end: 对齐单元格的结束边缘。</p>
<p>centet: 单元格内部中间。</p>
<p>stretch: 拉伸,沾满单元格的整个宽度(默认值)。</p>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-meta"><!DOCTYPE <span class="hljs-keyword">html</span>></span>
<span class="hljs-tag"><<span class="hljs-name">html</span> <span class="hljs-attr">lang</span>=<span class="hljs-string">"en"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">head</span>></span>
<span class="hljs-tag"><<span class="hljs-name">meta</span> <span class="hljs-attr">charset</span>=<span class="hljs-string">"UTF-8"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">title</span>></span>Title<span class="hljs-tag"></<span class="hljs-name">title</span>></span>
<span class="hljs-tag"><<span class="hljs-name">style</span>></span><span class="language-css">
<span class="hljs-selector-class">.grid-container</span>, <span class="hljs-selector-class">.grid-container2</span>, <span class="hljs-selector-class">.grid-container3</span>, <span class="hljs-selector-class">.grid-container4</span> {
<span class="hljs-attribute">display</span>: grid;
<span class="hljs-attribute">grid-template-columns</span>: <span class="hljs-number">100px</span> <span class="hljs-number">200px</span> <span class="hljs-number">100px</span>;
<span class="hljs-attribute">grid-gap</span>: <span class="hljs-number">5px</span>;
<span class="hljs-attribute">grid-auto-rows</span>: <span class="hljs-number">50px</span>;
justify-items: start;
<span class="hljs-attribute">border</span>: <span class="hljs-number">1px</span> solid blue;
<span class="hljs-attribute">margin-bottom</span>: <span class="hljs-number">10px</span>;
<span class="hljs-attribute">font-size</span>: <span class="hljs-number">20px</span>;
}
<span class="hljs-selector-class">.grid-container2</span> {
justify-items: end;
}
<span class="hljs-selector-class">.grid-container3</span> {
justify-items: center;
}
<span class="hljs-selector-class">.grid-container4</span> {
justify-items: stretch;
}
<span class="hljs-selector-tag">p</span> {
<span class="hljs-attribute">font-size</span>: <span class="hljs-number">20px</span>;
<span class="hljs-attribute">font-weight</span>: <span class="hljs-number">800</span>;
}
</span><span class="hljs-tag"></<span class="hljs-name">style</span>></span>
<span class="hljs-tag"></<span class="hljs-name">head</span>></span>
<span class="hljs-tag"><<span class="hljs-name">body</span>></span>
<span class="hljs-tag"><<span class="hljs-name">p</span>></span>justify-items: start;<span class="hljs-tag"></<span class="hljs-name">p</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-container"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #66FFCC"</span>></span>1<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #990000"</span>></span>2<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #9900FF"</span>></span>3<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #996633"</span>></span>4<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #9966CC"</span>></span>5<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #99FF00"</span>></span>6<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #CC0099"</span>></span>7<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #CC6600"</span>></span>8<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #FF00FF"</span>></span>9<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">p</span>></span>justify-items: end;<span class="hljs-tag"></<span class="hljs-name">p</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-container2"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #66FFCC"</span>></span>1<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #990000"</span>></span>2<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #9900FF"</span>></span>3<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #996633"</span>></span>4<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #9966CC"</span>></span>5<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #99FF00"</span>></span>6<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #CC0099"</span>></span>7<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #CC6600"</span>></span>8<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #FF00FF"</span>></span>9<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">p</span>></span>justify-items: center;<span class="hljs-tag"></<span class="hljs-name">p</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-container3"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #66FFCC"</span>></span>1<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #990000"</span>></span>2<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #9900FF"</span>></span>3<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #996633"</span>></span>4<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #9966CC"</span>></span>5<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #99FF00"</span>></span>6<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #CC0099"</span>></span>7<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #CC6600"</span>></span>8<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #FF00FF"</span>></span>9<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">p</span>></span>justify-items: stretch;<span class="hljs-tag"></<span class="hljs-name">p</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-container4"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #66FFCC"</span>></span>1<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #990000"</span>></span>2<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #9900FF"</span>></span>3<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #996633"</span>></span>4<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #9966CC"</span>></span>5<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #99FF00"</span>></span>6<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #CC0099"</span>></span>7<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #CC6600"</span>></span>8<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-color: #FF00FF"</span>></span>9<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"></<span class="hljs-name">body</span>></span>
<span class="hljs-tag"></<span class="hljs-name">html</span>></span>
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/f4a0b87253de1bd22dc69ee9a5dabc61.png" alt="image.png" /></p>
<h4><a id="252_aligncontent_467"></a>2.5.2 align-content</h4>
<p>与justify-items同理,方向为垂直方向。</p>
<h2><a id="3__471"></a>3 内部元素属性</h2>
<h3><a id="31_gridarea__473"></a>3.1 grid-area 定义区域</h3>
<h4><a id="311__475"></a>3.1.1 固定布局</h4>
<p>如果单元没有内容,则用点号代替。</p>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-meta"><!DOCTYPE <span class="hljs-keyword">html</span>></span>
<span class="hljs-tag"><<span class="hljs-name">html</span> <span class="hljs-attr">lang</span>=<span class="hljs-string">"zh"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">head</span>></span>
<span class="hljs-tag"><<span class="hljs-name">meta</span> <span class="hljs-attr">charset</span>=<span class="hljs-string">"UTF-8"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">meta</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"viewport"</span> <span class="hljs-attr">content</span>=<span class="hljs-string">"width=device-width, initial-scale=1.0"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">title</span>></span>有勇气的牛排 语义化的 Grid 布局示例<span class="hljs-tag"></<span class="hljs-name">title</span>></span>
<span class="hljs-tag"><<span class="hljs-name">style</span>></span><span class="language-css">
<span class="hljs-selector-tag">body</span> {
<span class="hljs-attribute">font-family</span>: Arial, sans-serif;
<span class="hljs-attribute">margin</span>: <span class="hljs-number">0</span>;
<span class="hljs-attribute">padding</span>: <span class="hljs-number">0</span>;
<span class="hljs-attribute">color</span>: black;
}
<span class="hljs-selector-class">.grid-container</span> {
<span class="hljs-attribute">display</span>: grid;
<span class="hljs-attribute">grid-template-columns</span>: <span class="hljs-number">1</span>fr <span class="hljs-number">2</span>fr <span class="hljs-number">1</span>fr;
<span class="hljs-attribute">grid-template-areas</span>:
<span class="hljs-string">"header header header"</span>
<span class="hljs-string">"sidebar main aside"</span>
<span class="hljs-string">"footer footer footer"</span>;
<span class="hljs-attribute">gap</span>: <span class="hljs-number">10px</span>;
}
<span class="hljs-selector-tag">header</span> {
<span class="hljs-attribute">grid-area</span>: header;
<span class="hljs-attribute">background-color</span>: <span class="hljs-number">#ff6666</span>;
<span class="hljs-attribute">padding</span>: <span class="hljs-number">20px</span>;
<span class="hljs-attribute">text-align</span>: center;
<span class="hljs-attribute">color</span>: white;
<span class="hljs-attribute">font-size</span>: <span class="hljs-number">24px</span>;
}
<span class="hljs-selector-tag">nav</span> {
<span class="hljs-attribute">grid-area</span>: sidebar;
<span class="hljs-attribute">background-color</span>: <span class="hljs-number">#66ccff</span>;
<span class="hljs-attribute">padding</span>: <span class="hljs-number">20px</span>;
<span class="hljs-attribute">color</span>: white;
}
<span class="hljs-selector-tag">main</span> {
<span class="hljs-attribute">grid-area</span>: main;
<span class="hljs-attribute">background-color</span>: <span class="hljs-number">#99ff99</span>;
<span class="hljs-attribute">padding</span>: <span class="hljs-number">20px</span>;
<span class="hljs-attribute">color</span>: white;
}
<span class="hljs-selector-tag">article</span> {
<span class="hljs-attribute">background-color</span>: <span class="hljs-built_in">rgba</span>(<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0.1</span>);
<span class="hljs-attribute">margin-bottom</span>: <span class="hljs-number">15px</span>;
<span class="hljs-attribute">padding</span>: <span class="hljs-number">10px</span>;
<span class="hljs-attribute">border-radius</span>: <span class="hljs-number">5px</span>;
}
<span class="hljs-selector-tag">aside</span> {
<span class="hljs-attribute">grid-area</span>: aside;
<span class="hljs-attribute">background-color</span>: <span class="hljs-number">#ff99ff</span>;
<span class="hljs-attribute">padding</span>: <span class="hljs-number">20px</span>;
<span class="hljs-attribute">color</span>: white;
}
<span class="hljs-selector-tag">footer</span> {
<span class="hljs-attribute">grid-area</span>: footer;
<span class="hljs-attribute">background-color</span>: <span class="hljs-number">#ffcc66</span>;
<span class="hljs-attribute">padding</span>: <span class="hljs-number">20px</span>;
<span class="hljs-attribute">text-align</span>: center;
<span class="hljs-attribute">color</span>: white;
<span class="hljs-attribute">font-size</span>: <span class="hljs-number">18px</span>;
}
</span><span class="hljs-tag"></<span class="hljs-name">style</span>></span>
<span class="hljs-tag"></<span class="hljs-name">head</span>></span>
<span class="hljs-tag"><<span class="hljs-name">body</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-container"</span>></span>
<span class="hljs-comment"><!-- 页眉 --></span>
<span class="hljs-tag"><<span class="hljs-name">header</span>></span>
有勇气的牛排博客
<span class="hljs-tag"></<span class="hljs-name">header</span>></span>
<span class="hljs-comment"><!-- 侧边导航 --></span>
<span class="hljs-tag"><<span class="hljs-name">nav</span>></span>
<span class="hljs-tag"><<span class="hljs-name">ul</span>></span>
<span class="hljs-tag"><<span class="hljs-name">li</span>></span><span class="hljs-tag"><<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"#"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"color:white;"</span>></span>链接 1<span class="hljs-tag"></<span class="hljs-name">a</span>></span><span class="hljs-tag"></<span class="hljs-name">li</span>></span>
<span class="hljs-tag"><<span class="hljs-name">li</span>></span><span class="hljs-tag"><<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"#"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"color:white;"</span>></span>链接 2<span class="hljs-tag"></<span class="hljs-name">a</span>></span><span class="hljs-tag"></<span class="hljs-name">li</span>></span>
<span class="hljs-tag"><<span class="hljs-name">li</span>></span><span class="hljs-tag"><<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"#"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"color:white;"</span>></span>链接 3<span class="hljs-tag"></<span class="hljs-name">a</span>></span><span class="hljs-tag"></<span class="hljs-name">li</span>></span>
<span class="hljs-tag"></<span class="hljs-name">ul</span>></span>
<span class="hljs-tag"></<span class="hljs-name">nav</span>></span>
<span class="hljs-comment"><!-- 主要内容 --></span>
<span class="hljs-tag"><<span class="hljs-name">main</span>></span>
<span class="hljs-tag"><<span class="hljs-name">article</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span>></span>文章标题 1<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-tag"><<span class="hljs-name">p</span>></span>这是文章 1 的内容。语义化标签使页面更具结构性和可读性。<span class="hljs-tag"></<span class="hljs-name">p</span>></span>
<span class="hljs-tag"></<span class="hljs-name">article</span>></span>
<span class="hljs-tag"></<span class="hljs-name">main</span>></span>
<span class="hljs-comment"><!-- 侧边栏 --></span>
<span class="hljs-tag"><<span class="hljs-name">aside</span>></span>
侧边栏
<span class="hljs-tag"></<span class="hljs-name">aside</span>></span>
<span class="hljs-comment"><!-- 页脚 --></span>
<span class="hljs-tag"><<span class="hljs-name">footer</span>></span>
<span class="hljs-symbol">&copy;</span> 2024 有勇气的牛排
<span class="hljs-tag"></<span class="hljs-name">footer</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"></<span class="hljs-name">body</span>></span>
<span class="hljs-tag"></<span class="hljs-name">html</span>></span>
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/dc96c90f3f3bd7157f9a0b7221b190a0.png" alt="image.png" /></p>
<h4><a id="212__603"></a>2.1.2 响应式布局</h4>
<p>有勇氣的牛排創作:<br />
<a href="https://www.couragesteak.com/article/487" target="_blank">https://www.couragesteak.com/article/487</a></p>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-meta"><!DOCTYPE <span class="hljs-keyword">html</span>></span>
<span class="hljs-tag"><<span class="hljs-name">html</span> <span class="hljs-attr">lang</span>=<span class="hljs-string">"zh"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">head</span>></span>
<span class="hljs-tag"><<span class="hljs-name">meta</span> <span class="hljs-attr">charset</span>=<span class="hljs-string">"UTF-8"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">meta</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"viewport"</span> <span class="hljs-attr">content</span>=<span class="hljs-string">"width=device-width, initial-scale=1.0"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">title</span>></span>响应式 Grid 布局示例<span class="hljs-tag"></<span class="hljs-name">title</span>></span>
<span class="hljs-tag"><<span class="hljs-name">style</span>></span><span class="language-css">
<span class="hljs-selector-tag">body</span> {
<span class="hljs-attribute">font-family</span>: Arial, sans-serif;
<span class="hljs-attribute">margin</span>: <span class="hljs-number">0</span>;
<span class="hljs-attribute">padding</span>: <span class="hljs-number">0</span>;
}
<span class="hljs-selector-class">.grid-container</span> {
<span class="hljs-attribute">display</span>: grid;
<span class="hljs-attribute">gap</span>: <span class="hljs-number">10px</span>;
<span class="hljs-attribute">padding</span>: <span class="hljs-number">10px</span>;
<span class="hljs-attribute">height</span>: <span class="hljs-number">100vh</span>;
<span class="hljs-attribute">grid-template-areas</span>:
<span class="hljs-string">"header"</span>
<span class="hljs-string">"main"</span>
<span class="hljs-comment">/*"aside"*/</span>
<span class="hljs-comment">/*"sidebar"*/</span>
<span class="hljs-string">"footer"</span>;
}
<span class="hljs-selector-tag">header</span> {
<span class="hljs-attribute">grid-area</span>: header;
<span class="hljs-attribute">background-color</span>: <span class="hljs-number">#ff6666</span>;
<span class="hljs-attribute">padding</span>: <span class="hljs-number">20px</span>;
<span class="hljs-attribute">text-align</span>: center;
<span class="hljs-attribute">color</span>: white;
<span class="hljs-attribute">font-size</span>: <span class="hljs-number">24px</span>;
}
<span class="hljs-selector-tag">aside</span> {
<span class="hljs-attribute">grid-area</span>: aside;
<span class="hljs-attribute">display</span>: none;
<span class="hljs-attribute">background-color</span>: <span class="hljs-number">#ff99ff</span>;
<span class="hljs-attribute">padding</span>: <span class="hljs-number">20px</span>;
<span class="hljs-attribute">color</span>: white;
}
<span class="hljs-selector-tag">main</span> {
<span class="hljs-attribute">grid-area</span>: main;
<span class="hljs-attribute">background-color</span>: <span class="hljs-number">#99ff99</span>;
<span class="hljs-attribute">padding</span>: <span class="hljs-number">20px</span>;
<span class="hljs-attribute">color</span>: white;
}
<span class="hljs-selector-tag">footer</span> {
<span class="hljs-attribute">grid-area</span>: footer;
<span class="hljs-attribute">background-color</span>: <span class="hljs-number">#ffcc66</span>;
<span class="hljs-attribute">padding</span>: <span class="hljs-number">20px</span>;
<span class="hljs-attribute">text-align</span>: center;
<span class="hljs-attribute">color</span>: white;
<span class="hljs-attribute">font-size</span>: <span class="hljs-number">18px</span>;
}
<span class="hljs-selector-tag">nav</span> {
<span class="hljs-attribute">grid-area</span>: sidebar;
<span class="hljs-attribute">display</span>: none;
<span class="hljs-attribute">background-color</span>: <span class="hljs-number">#66ccff</span>;
<span class="hljs-attribute">padding</span>: <span class="hljs-number">20px</span>;
<span class="hljs-attribute">color</span>: white;
}
<span class="hljs-selector-tag">article</span> {
<span class="hljs-attribute">background-color</span>: <span class="hljs-built_in">rgba</span>(<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0.1</span>);
<span class="hljs-attribute">margin-bottom</span>: <span class="hljs-number">15px</span>;
<span class="hljs-attribute">padding</span>: <span class="hljs-number">10px</span>;
<span class="hljs-attribute">border-radius</span>: <span class="hljs-number">5px</span>;
}
<span class="hljs-comment">/* 响应式设计 */</span>
<span class="hljs-comment">/* 针对平板 */</span>
<span class="hljs-keyword">@media</span> (<span class="hljs-attribute">min-width</span>: <span class="hljs-number">600px</span>) {
<span class="hljs-selector-class">.grid-container</span> {
<span class="hljs-attribute">grid-template-columns</span>: <span class="hljs-number">1</span>fr <span class="hljs-number">2</span>fr <span class="hljs-number">1</span>fr;
<span class="hljs-attribute">grid-template-rows</span>: auto <span class="hljs-number">1</span>fr auto;
<span class="hljs-attribute">grid-template-areas</span>:
<span class="hljs-string">"header header header"</span>
<span class="hljs-string">"main main aside"</span>
<span class="hljs-string">"footer footer footer"</span>;
}
<span class="hljs-selector-tag">footer</span> {
<span class="hljs-attribute">font-size</span>: <span class="hljs-number">16px</span>;
}
<span class="hljs-comment">/*nav {*/</span>
<span class="hljs-comment">/* display: block;*/</span>
<span class="hljs-comment">/*}*/</span>
<span class="hljs-selector-tag">aside</span> {
<span class="hljs-attribute">display</span>: block;
}
}
<span class="hljs-comment">/* 针对PC大屏 */</span>
<span class="hljs-keyword">@media</span> (<span class="hljs-attribute">min-width</span>: <span class="hljs-number">1024px</span>) {
<span class="hljs-selector-class">.grid-container</span> {
<span class="hljs-attribute">grid-template-columns</span>: <span class="hljs-number">1</span>fr <span class="hljs-number">2</span>fr <span class="hljs-number">1</span>fr;
<span class="hljs-attribute">grid-template-rows</span>: auto <span class="hljs-number">1</span>fr auto;
<span class="hljs-attribute">grid-template-areas</span>:
<span class="hljs-string">"header header header"</span>
<span class="hljs-string">"sidebar main aside"</span>
<span class="hljs-string">"footer footer footer"</span>;
}
<span class="hljs-selector-tag">header</span> {
<span class="hljs-attribute">font-size</span>: <span class="hljs-number">30px</span>;
}
<span class="hljs-selector-tag">footer</span> {
<span class="hljs-attribute">font-size</span>: <span class="hljs-number">20px</span>;
}
<span class="hljs-selector-tag">nav</span> {
<span class="hljs-attribute">display</span>: block;
}
<span class="hljs-selector-tag">aside</span> {
<span class="hljs-attribute">display</span>: block;
}
}
</span><span class="hljs-tag"></<span class="hljs-name">style</span>></span>
<span class="hljs-tag"></<span class="hljs-name">head</span>></span>
<span class="hljs-tag"><<span class="hljs-name">body</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-container"</span>></span>
<span class="hljs-comment"><!-- 页眉 --></span>
<span class="hljs-tag"><<span class="hljs-name">header</span>></span>
有勇气的牛排博客
<span class="hljs-tag"></<span class="hljs-name">header</span>></span>
<span class="hljs-comment"><!-- 侧边导航 --></span>
<span class="hljs-tag"><<span class="hljs-name">nav</span>></span>
<span class="hljs-tag"><<span class="hljs-name">ul</span>></span>
<span class="hljs-tag"><<span class="hljs-name">li</span>></span><span class="hljs-tag"><<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"#"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"color:white;"</span>></span>链接 1<span class="hljs-tag"></<span class="hljs-name">a</span>></span><span class="hljs-tag"></<span class="hljs-name">li</span>></span>
<span class="hljs-tag"><<span class="hljs-name">li</span>></span><span class="hljs-tag"><<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"#"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"color:white;"</span>></span>链接 2<span class="hljs-tag"></<span class="hljs-name">a</span>></span><span class="hljs-tag"></<span class="hljs-name">li</span>></span>
<span class="hljs-tag"><<span class="hljs-name">li</span>></span><span class="hljs-tag"><<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"#"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"color:white;"</span>></span>链接 3<span class="hljs-tag"></<span class="hljs-name">a</span>></span><span class="hljs-tag"></<span class="hljs-name">li</span>></span>
<span class="hljs-tag"></<span class="hljs-name">ul</span>></span>
<span class="hljs-tag"></<span class="hljs-name">nav</span>></span>
<span class="hljs-comment"><!-- 主要内容 --></span>
<span class="hljs-tag"><<span class="hljs-name">main</span>></span>
<span class="hljs-tag"><<span class="hljs-name">article</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span>></span>文章标题 1<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-tag"><<span class="hljs-name">p</span>></span>这是文章 1 的内容。语义化标签使页面更具结构性和可读性。<span class="hljs-tag"></<span class="hljs-name">p</span>></span>
<span class="hljs-tag"></<span class="hljs-name">article</span>></span>
<span class="hljs-tag"><<span class="hljs-name">article</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span>></span>文章标题 2<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-tag"><<span class="hljs-name">p</span>></span>这是文章 2 的内容。使用语义化标签能够提高 SEO 排名。<span class="hljs-tag"></<span class="hljs-name">p</span>></span>
<span class="hljs-tag"></<span class="hljs-name">article</span>></span>
<span class="hljs-tag"></<span class="hljs-name">main</span>></span>
<span class="hljs-comment"><!-- 侧边栏 --></span>
<span class="hljs-tag"><<span class="hljs-name">aside</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h3</span>></span>附加内容<span class="hljs-tag"></<span class="hljs-name">h3</span>></span>
<span class="hljs-tag"><<span class="hljs-name">p</span>></span>这里可以是附加的文章或广告信息。<span class="hljs-tag"></<span class="hljs-name">p</span>></span>
<span class="hljs-tag"></<span class="hljs-name">aside</span>></span>
<span class="hljs-comment"><!-- 页脚 --></span>
<span class="hljs-tag"><<span class="hljs-name">footer</span>></span>
<span class="hljs-symbol">&copy;</span> 2024 有勇气的牛排
<span class="hljs-tag"></<span class="hljs-name">footer</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"></<span class="hljs-name">body</span>></span>
<span class="hljs-tag"></<span class="hljs-name">html</span>></span>
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/9915b733cffcb3dd3ba967ab6f1df884.png" alt="image.png" /></p>
<h2><a id="4__784"></a>4 案例</h2>
<h3><a id="41__786"></a>4.1 基础案例</h3>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-meta"><!DOCTYPE <span class="hljs-keyword">html</span>></span>
<span class="hljs-tag"><<span class="hljs-name">html</span> <span class="hljs-attr">lang</span>=<span class="hljs-string">"zh"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">head</span>></span>
<span class="hljs-tag"><<span class="hljs-name">meta</span> <span class="hljs-attr">charset</span>=<span class="hljs-string">"UTF-8"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">meta</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"viewport"</span> <span class="hljs-attr">content</span>=<span class="hljs-string">"width=device-width, initial-scale=1.0"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">title</span>></span>有勇气的牛排 CSS Grid宫格 示例<span class="hljs-tag"></<span class="hljs-name">title</span>></span>
<span class="hljs-tag"><<span class="hljs-name">style</span>></span><span class="language-css">
<span class="hljs-selector-pseudo">:root</span> {
<span class="hljs-attr">--grid-gap</span>: <span class="hljs-number">10px</span>; <span class="hljs-comment">/* 网格间距 */</span>
<span class="hljs-attr">--grid-item-height</span>: <span class="hljs-number">50px</span>; <span class="hljs-comment">/* 网格项高度 */</span>
<span class="hljs-attr">--bg-color</span>: <span class="hljs-number">#9900FF</span>; <span class="hljs-comment">/* 背景色 */</span>
<span class="hljs-attr">--text-color</span>: white; <span class="hljs-comment">/* 字体颜色 */</span>
}
<span class="hljs-selector-tag">body</span> {
<span class="hljs-attribute">font-family</span>: Arial, sans-serif;
<span class="hljs-attribute">margin</span>: <span class="hljs-number">0</span>;
<span class="hljs-attribute">padding</span>: <span class="hljs-number">0</span>;
}
<span class="hljs-selector-class">.grid-container</span> {
<span class="hljs-attribute">display</span>: grid;
<span class="hljs-attribute">grid-template-columns</span>: <span class="hljs-built_in">repeat</span>(<span class="hljs-number">3</span>, <span class="hljs-number">1</span>fr);
<span class="hljs-attribute">gap</span>: <span class="hljs-number">5px</span>; <span class="hljs-comment">/*设置网格之间的间距*/</span>
<span class="hljs-attribute">padding</span>: <span class="hljs-number">10px</span>;
}
<span class="hljs-selector-class">.grid-item</span> {
<span class="hljs-attribute">height</span>: <span class="hljs-number">150px</span>;
<span class="hljs-attribute">background-color</span>: <span class="hljs-built_in">var</span>(--bg-color);
<span class="hljs-attribute">border-radius</span>: <span class="hljs-number">10px</span>;
<span class="hljs-comment">/* 内容、文字样式 */</span>
<span class="hljs-attribute">display</span>: flex;
<span class="hljs-attribute">justify-content</span>: center;
<span class="hljs-attribute">align-items</span>: center;
<span class="hljs-attribute">color</span>: <span class="hljs-built_in">var</span>(--text-color);
<span class="hljs-attribute">font-size</span>: <span class="hljs-number">20px</span>;
}
<span class="hljs-comment">/* 响应式设计 */</span>
<span class="hljs-keyword">@media</span> (<span class="hljs-attribute">max-width</span>: <span class="hljs-number">900px</span>) {
<span class="hljs-selector-class">.grid-container</span> {
<span class="hljs-attribute">grid-template-columns</span>: <span class="hljs-built_in">repeat</span>(<span class="hljs-number">2</span>, <span class="hljs-number">1</span>fr); <span class="hljs-comment">/* 小屏幕上使用 2 列 */</span>
}
}
</span><span class="hljs-tag"></<span class="hljs-name">style</span>></span>
<span class="hljs-tag"></<span class="hljs-name">head</span>></span>
<span class="hljs-tag"><<span class="hljs-name">body</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h1</span>></span>有勇气的牛排<span class="hljs-tag"></<span class="hljs-name">h1</span>></span> <span class="hljs-comment"><!-- 添加标题以提高可读性 --></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-container"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>1<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>2<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>3<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>4<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>5<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>6<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"grid-item"</span>></span>7<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"></<span class="hljs-name">body</span>></span>
<span class="hljs-tag"></<span class="hljs-name">html</span>></span>
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/d3b96e66fc004598ab8100c3f8765d8a.png" alt="image.png" /></p>
<p><img src="https://static.couragesteak.com/article/a5beb8a4dd677b791e2358ef24bd667c.png" alt="image.png" /></p>
留言