Grid布局示例代码
示例一
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Grid布局</title>
</head>
<style>
* {
padding: 0;
margin: 0;
box-sizing: border-box;
}
body {
background-color: #f6f6f6;
}
.headTitle {
text-align: center;
padding: 30px 0;
font-size: 26px;
color: #555;
}
.layout {
min-height: 500px;
background-color: #fff;
border-radius: 10px;
margin: 0 auto;
box-shadow: 0 0 20px rgba(0, 0, 0, 0.05);
padding: 30px;
}
.flex .box {
width: 300px;
height: 200px;
background-color: #7c9fb0;
border-radius: 8px;
padding: 10px;
display: flex;
align-items: center;
justify-content: center;
color: #fff;
margin-bottom: 40px;
}
.flex {
width: 1400px;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.grid {
width: 80%;
display: grid;
/* 开启网格布局 */
/* 四列均匀分布,第一列宽度为200px,中间两列为1fr,最后一列为2fr宽度 */
/* grid-template-columns:200px repeat(2, 1fr) 2fr; */
/* 四列均匀分布,效果同上 */
/* grid-template-columns: 200px 1fr 1fr 2fr; */
/* 响应式布局可以使用,自定义最小宽度份数(最小值不能小于260px)和最大份数,同样的容器宽度应该以百分比为单位,不能写死像素了,当屏幕被缩放时会自动布局 */
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
/* 除了columns还有对应的rows,用法和上面一致,可以自定义行高度和自适应行高度 */
grid-template-rows: 1fr 1fr;
/* 定义列间距 */
/* grid-column-gap: 40px; */
/* 定义行间距 */
/* grid-row-gap: 40px; */
/* 元素上下左右之间的间距,也可以拆分单独设置 */
gap:40px
;
}
.grid .box {
background-color: #7c9fb0;
border-radius: 8px;
padding: 10px;
display: flex;
align-items: center;
justify-content: center;
color: #fff;
}
.gridbilibli {
width: 1400px;
display: grid;
grid-template-columns: repeat(5,1fr);
gap: 40px;
}
.gridbilibli .box {
background-color: #7c9fb0;
border-radius: 8px;
padding: 10px;
display: flex;
align-items: center;
justify-content: center;
color: #fff;
}
.gridbilibli .box:nth-child(1) {
/* span固定写法 后面数字代表合并列或者行数 */
/* 合并的建议使用数字标记一下做好布局再写页面,因为合并只是将当前单元格扩大占位,并不是跟其他单元格合并了,因此跨度结束之后会多出几个占位的,需要手动去掉这些,以免影响布局 */
grid-column: span 2;
grid-row: span 2;
}
</style>
<body>
<div class="headTitle">flex布局(最后一行要么都居中要么都居左,不合适,除非数量固定)</div>
<div class="layout flex">
<div class="box">box方块</div>
<div class="box">box方块</div>
<div class="box">box方块</div>
<div class="box">box方块</div>
<div class="box">box方块</div>
<div class="box">box方块</div>
<div class="box">box方块</div>
</div>
<div class="headTitle">Grid(推荐的布局使用)</div>
<div class="layout grid">
<div class="box">box方块</div>
<div class="box">box方块</div>
<div class="box">box方块</div>
<div class="box">box方块</div>
<div class="box">box方块</div>
<div class="box">box方块</div>
<div class="box">box方块</div>
</div>
<div class="headTitle">Grid(仿bilibili)</div>
<div class="layout gridbilibli">
<div class="box">box方块1</div>
<div class="box">box方块2</div>
<div class="box">box方块3</div>
<div class="box">box方块4</div>
<div class="box">box方块5</div>
<div class="box">box方块6</div>
<div class="box">box方块7</div>
<div class="box">box方块8</div>
<div class="box">box方块9</div>
<div class="box">box方块10</div>
<div class="box">box方块11</div>
<div class="box">box方块12</div>
</div>
</body>
</html>示例二
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Grid Layout Example</title>
<style>
/* 基础样式 */
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
align-items: center;
gap: 20px;
padding: 20px;
}
.grid-container {
display: grid;
gap: 10px;
/* 间隔 */
border: 1px solid #ccc;
padding: 10px;
width: 100%;
max-width: 600px;
}
.grid-item {
background-color: #f0f0f0;
padding: 10px;
text-align: center;
border: 1px solid #ddd;
}
/* 单行多列布局 */
.single-row {
grid-template-columns: repeat(4, 1fr);
/* 创建4列,每列占1份 */
}
/* 单列多行布局 */
.single-column {
grid-template-rows: repeat(4, 1fr);
/* 创建4行,每行占1份 */
}
/* 多行多列布局 */
.multi-row-column {
grid-template-columns: repeat(3, 1fr);
/* 创建3列 */
grid-template-rows: repeat(2, 1fr);
/* 创建2行 */
}
/* 自适应布局 */
.auto-fit {
grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
/* 自适应列数,每列最小宽度100px */
}
/* 带有间隔的布局 */
.gap {
grid-template-columns: repeat(3, 1fr);
/* 创建3列 */
grid-template-rows: repeat(2, 1fr);
/* 创建2行 */
gap: 20px;
/* 增大间隔 */
}
/* 对齐方式布局 */
.align-items {
grid-template-columns: repeat(3, 1fr);
/* 创建3列 */
grid-template-rows: repeat(2, 1fr);
/* 创建2行 */
align-items: center;
/* 垂直居中对齐 */
justify-items: center;
/* 水平居中对齐 */
}
</style>
</head>
<body>
<!-- 单行多列布局 -->
<div class="grid-container single-row">
<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>
<!-- 单列多行布局 -->
<div class="grid-container single-column">
<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>
<!-- 多行多列布局 -->
<div class="grid-container multi-row-column">
<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>
<!-- 自适应布局 -->
<div class="grid-container auto-fit">
<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>
<!-- 带有间隔的布局 -->
<div class="grid-container gap">
<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>
<!-- 对齐方式布局 -->
<div class="grid-container align-items">
<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>
</body>
</html>示例三
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Grid Layout Example</title>
<style>
/* 基础样式 */
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
background-color: #f0f0f0;
}
.grid-container {
display: grid;
grid-template-columns: repeat(3, 1fr); /* 创建3列,每列占1份 */
grid-template-rows: repeat(3, 1fr); /* 创建3行,每行占1份 */
gap: 10px; /* 设置行和列之间的间隔 */
width: 300px;
height: 300px;
background-color: #fff;
border: 1px solid #ccc;
padding: 10px;
}
.grid-item {
background-color: #f0f0f0;
padding: 10px;
text-align: center;
border: 1px solid #ddd;
}
/* 第一个格子占两列两行 */
.item1 {
grid-column: 1 / 3; /* 从第1列到第3列 */
grid-row: 1 / 3; /* 从第1行到第3行 */
}
/* 第二个格子占一列一行 */
.item2 {
grid-column: 3 / 4; /* 从第3列到第4列 */
grid-row: 1 / 2; /* 从第1行到第2行 */
}
/* 第三个格子占一列一行 */
.item3 {
grid-column: 3 / 4; /* 从第3列到第4列 */
grid-row: 2 / 3; /* 从第2行到第3行 */
}
/* 第二行的格子都是一列一行 */
.item4 {
grid-column: 1 / 2; /* 从第1列到第2列 */
grid-row: 3 / 4; /* 从第3行到第4行 */
}
.item5 {
grid-column: 2 / 3; /* 从第2列到第3列 */
grid-row: 3 / 4; /* 从第3行到第4行 */
}
.item6 {
grid-column: 3 / 4; /* 从第3列到第4列 */
grid-row: 3 / 4; /* 从第3行到第4行 */
}
</style>
</head>
<body>
<div class="grid-container">
<!-- 第一行 -->
<div class="grid-item item1">1 (占两列两行)</div>
<div class="grid-item item2">2 (占一列一行)</div>
<div class="grid-item item3">3 (占一列一行)</div>
<!-- 第二行 -->
<div class="grid-item item4">4 (占一列一行)</div>
<div class="grid-item item5">5 (占一列一行)</div>
<div class="grid-item item6">6 (占一列一行)</div>
</div>
</body>
</html>