Appearance
第5章:网格轨道尺寸设置
在本节中,我们将介绍如何设置网格轨道的尺寸,这是Grid布局的核心功能之一。
5.1 grid-template-columns:设置列轨道尺寸
grid-template-columns属性用于设置网格的列轨道尺寸,定义列数和每列的宽度。
语法
css
.container {
grid-template-columns: <track-size> [<track-size> ...];
}常用值
1. 固定尺寸(px)
- 固定列宽,适用于固定布局
- 例如:
grid-template-columns: 100px 200px 150px
2. 相对尺寸(%)
- 相对于容器宽度,适配不同屏幕
- 例如:
grid-template-columns: 25% 50% 25%
3. 弹性尺寸(fr)
- 按比例分配剩余空间,Grid布局的核心优势
- 例如:
grid-template-columns: 1fr 2fr 1fr
4. auto
- 自动适应内容或容器尺寸
- 例如:
grid-template-columns: auto 1fr auto
5. repeat()函数
- 简化重复列设置,高频使用
- 例如:
grid-template-columns: repeat(3, 1fr)等价于grid-template-columns: 1fr 1fr 1fr
代码示例
html
<!DOCTYPE html>
<html>
<head>
<title>grid-template-columns</title>
<style>
.container {
display: grid;
gap: 10px;
background-color: #f0f0f0;
padding: 10px;
margin-bottom: 20px;
}
.fixed {
grid-template-columns: 100px 200px 150px;
}
.relative {
grid-template-columns: 25% 50% 25%;
}
.flexible {
grid-template-columns: 1fr 2fr 1fr;
}
.auto {
grid-template-columns: auto 1fr auto;
}
.repeat {
grid-template-columns: repeat(3, 1fr);
}
.item {
background-color: #3498db;
color: white;
display: flex;
justify-content: center;
align-items: center;
padding: 20px;
border-radius: 4px;
}
</style>
</head>
<body>
<h1>grid-template-columns 示例</h1>
<h2>固定尺寸(px)</h2>
<div class="container fixed">
<div class="item">100px</div>
<div class="item">200px</div>
<div class="item">150px</div>
</div>
<h2>相对尺寸(%)</h2>
<div class="container relative">
<div class="item">25%</div>
<div class="item">50%</div>
<div class="item">25%</div>
</div>
<h2>弹性尺寸(fr)</h2>
<div class="container flexible">
<div class="item">1fr</div>
<div class="item">2fr</div>
<div class="item">1fr</div>
</div>
<h2>auto</h2>
<div class="container auto">
<div class="item">auto</div>
<div class="item">1fr</div>
<div class="item">auto</div>
</div>
<h2>repeat()函数</h2>
<div class="container repeat">
<div class="item">1fr</div>
<div class="item">1fr</div>
<div class="item">1fr</div>
</div>
</body>
</html>5.2 grid-template-rows:设置行轨道尺寸
grid-template-rows属性用于设置网格的行轨道尺寸,定义行数和每行的高度,用法与grid-template-columns类似。
语法
css
.container {
grid-template-rows: <track-size> [<track-size> ...];
}常用值
- 固定尺寸(px):
grid-template-rows: 100px 200px - 相对尺寸(%):
grid-template-rows: 30% 70% - 弹性尺寸(fr):
grid-template-rows: 1fr 2fr - auto:
grid-template-rows: auto 1fr - repeat()函数:
grid-template-rows: repeat(2, 100px)
代码示例
html
<!DOCTYPE html>
<html>
<head>
<title>grid-template-rows</title>
<style>
.container {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 10px;
background-color: #f0f0f0;
padding: 10px;
margin-bottom: 20px;
}
.fixed {
grid-template-rows: 100px 150px;
}
.flexible {
grid-template-rows: 1fr 2fr;
}
.auto {
grid-template-rows: auto 1fr;
}
.repeat {
grid-template-rows: repeat(2, 120px);
}
.item {
background-color: #e74c3c;
color: white;
display: flex;
justify-content: center;
align-items: center;
border-radius: 4px;
}
</style>
</head>
<body>
<h1>grid-template-rows 示例</h1>
<h2>固定尺寸(px)</h2>
<div class="container fixed">
<div class="item">100px</div>
<div class="item">100px</div>
<div class="item">150px</div>
<div class="item">150px</div>
</div>
<h2>弹性尺寸(fr)</h2>
<div class="container flexible">
<div class="item">1fr</div>
<div class="item">1fr</div>
<div class="item">2fr</div>
<div class="item">2fr</div>
</div>
<h2>auto</h2>
<div class="container auto">
<div class="item">auto</div>
<div class="item">auto</div>
<div class="item">1fr</div>
<div class="item">1fr</div>
</div>
<h2>repeat()函数</h2>
<div class="container repeat">
<div class="item">120px</div>
<div class="item">120px</div>
<div class="item">120px</div>
<div class="item">120px</div>
</div>
</body>
</html>5.3 实操案例:不同尺寸组合,实现多列多行网格布局
代码示例
html
<!DOCTYPE html>
<html>
<head>
<title>多列多行网格布局</title>
<style>
.container {
display: grid;
grid-template-columns: 1fr 2fr 1fr;
grid-template-rows: 100px auto 150px;
gap: 10px;
background-color: #f0f0f0;
padding: 10px;
height: 400px;
}
.item {
background-color: #2ecc71;
color: white;
display: flex;
justify-content: center;
align-items: center;
border-radius: 4px;
}
.item1 {
grid-column: 1 / -1; /* 跨越所有列 */
background-color: #3498db;
}
.item6 {
grid-column: 1 / -1; /* 跨越所有列 */
background-color: #3498db;
}
</style>
</head>
<body>
<h1>多列多行网格布局</h1>
<div class="container">
<div class="item item1">头部</div>
<div class="item">左侧</div>
<div class="item">中间</div>
<div class="item">右侧</div>
<div class="item">内容</div>
<div class="item item6">底部</div>
</div>
</body>
</html>5.4 新手易错点:fr单位与px/%的混用技巧
常见问题
- fr单位与px/%混用导致布局错乱
- 不知道如何计算fr单位的实际尺寸
解决方案
1. 理解fr单位的计算方式
- fr单位是基于剩余空间的比例
- 计算公式:剩余空间 = 容器宽度 - 固定尺寸总和
- 每个fr的尺寸 = 剩余空间 / fr总和
2. 混用技巧
- 固定尺寸 + fr:
grid-template-columns: 200px 1fr 1fr - 相对尺寸 + fr:
grid-template-columns: 25% 1fr 1fr - 混合使用:
grid-template-columns: 100px 1fr 2fr 150px
代码示例
html
<!DOCTYPE html>
<html>
<head>
<title>fr单位与px/%混用</title>
<style>
.container {
display: grid;
gap: 10px;
background-color: #f0f0f0;
padding: 10px;
margin-bottom: 20px;
}
.mixed1 {
grid-template-columns: 200px 1fr 1fr;
}
.mixed2 {
grid-template-columns: 25% 1fr 1fr;
}
.mixed3 {
grid-template-columns: 100px 1fr 2fr 150px;
}
.item {
background-color: #9b59b6;
color: white;
display: flex;
justify-content: center;
align-items: center;
padding: 20px;
border-radius: 4px;
}
</style>
</head>
<body>
<h1>fr单位与px/%混用</h1>
<h2>固定尺寸 + fr</h2>
<div class="container mixed1">
<div class="item">200px</div>
<div class="item">1fr</div>
<div class="item">1fr</div>
</div>
<h2>相对尺寸 + fr</h2>
<div class="container mixed2">
<div class="item">25%</div>
<div class="item">1fr</div>
<div class="item">1fr</div>
</div>
<h2>混合使用</h2>
<div class="container mixed3">
<div class="item">100px</div>
<div class="item">1fr</div>
<div class="item">2fr</div>
<div class="item">150px</div>
</div>
</body>
</html>实操练习
- 创建一个3列2行的网格,使用不同的尺寸单位
- 尝试使用repeat()函数简化网格轨道的设置
- 混合使用fr、px和%单位,实现复杂的网格布局
- 计算fr单位的实际尺寸,验证布局效果
通过本节的学习,你已经掌握了如何设置网格轨道的尺寸。这是Grid布局的核心功能之一,合理设置网格轨道尺寸将帮助你创建各种复杂的布局。
