Skip to content
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>