首页 前端知识 CSS Grid网格布局

CSS Grid网格布局

2024-11-05 23:11:47 前端知识 前端哥 395 803 我要收藏

一、前言

二、Grid布局

1、基本介绍

2、核心概念

(1)网格容器

(2)网格元素

(3)网格列

(4)网格行

(5)网格间距

(6)网格线

三、Grid布局常用属性

1、网格容器常用属性

(1)属性说明

【 grid-template-columns属性 】

【 grid-template-rows属性 】

【 grid-column-gap属性 】

【 grid-row-gap属性 】

【 grid-gap属性 】

(2)使用实例

2、网格元素常用属性

(1)属性说明

【grid-column-start属性】

【grid-column-end属性】

【grid-column属性】

【grid-row-start属性】

【grid-row-end属性】

【grid-row属性】

(2)使用实例

3、fr单位

4、grid布局优势

三、Grid布局示例

1、布局效果

2、完整代码

四、实现过程

1、添加元素

2、划分网格行列

3、找出网格线

4、定位网格元素

四、总结


一、前言

下面这些布局效果应该用什么方式实现呢?

布局1

布局2

 

 布局3

布局4

 

类似这样的页面效果可能会有多种实现的方法,但更推荐使用Grid网格布局实现;

二、Grid布局

1、基本介绍

  • 网格是一组相交的水平线和垂直线,形成了它的行和列;
  • CSS基于网格,提供了一套带有行和列的网格布局系统;
  • 无需使用浮动和定位也能完成一个整齐漂亮的网页布局;
  • Grid布局由一个父元素,及一个或多个子元素组成;

2、核心概念

(1)网格容器

将元素的display属性设置为grid或者inline-grid,变成了一个网格容器;

类似于表格,在网格容器内,有多行多列网格元素;

(2)网格元素

网格容器的所有直系子元素——下图中的9个绿色盒子; 

(3)网格列

网格元素的垂直线方向称为列(Column);

(4)网格行

网格元素的水平线方向称为行(Row)。

(5)网格间距

两个网格单元之间的网格横向间距(Row Gap)或网格纵向间距(Column Gap)。

(6)网格线

列与列,行与行之间的交接处就是网格线(Line)。

三、Grid布局常用属性

1、网格容器常用属性

序号属性描述
1grid-template-columns指定网格布局中列的大小,以及列的数量;
2grid-template-rows指定网格布局中行的大小,以及行的数量;
3grid-column-gap指定网格元素的列间距;
4grid-row-gap指定网格元素的行间距;
5

grid-gap

grid-row-gap,grid-column-gap的缩写形式;

(1)属性说明

【 grid-template-columns属性 

该属性用来定义网格中的列,指定列的数量和列的宽度;

.grid-container{
    grid-template-columns : value1,value2, ...;
}
  • value的取值可以使用任何长度单位进行定义;
  • value的个数决定列的个数;
  • value的大小决定列的宽度;
【 grid-template-rows属性 】

该属性用来定义网格中的行,指定行的数量和行的高度;

.grid-container{
    grid-template-rows : value1,value2, ...;
}
  • value的取值可以使用任何长度单位进行定义;
  • value的个数决定行的个数;
  • value的大小决定行的高度;
【 grid-column-gap属性 】

该属性用来指定网格元素的列间距;

.grid-container{
    grid-column-gap : value;
}
  • value的取值可以使用任何长度单位进行定义;
  • value的大小决定列间距的大小;
【 grid-row-gap属性 】

该属性用来指定网格元素的行间距;

.grid-container{
    grid-row-gap : value;
}
  • value的取值可以使用任何长度单位进行定义;
  • value的大小决定行间距的大小;
【 grid-gap属性 】

该属性为grid-row-gap属性与grid-column-gap属性的缩写形式,可以同时定义网格元素的行间距与列间距;

.grid-container{
     grid-gap : value1 [, value2];
}
  • value的取值可以使用任何长度单位进行定义;
  • 只有一个value时,表示列间距与行间距都使用该值;
  • 有两个value时,第一个表示行间距,第二个表示列间距;

(2)使用实例

...
<style>
    .grid-container {
        /* 添加网格容器:将该元素设置为网格容器 */
        display: grid;
        /* 定义网格列:三个相等宽度的列 */
        grid-template-columns: 1fr 1fr 1fr; 
        /* 定义网格行:第一行高度为100px 第二行高度为160px*/
        grid-template-rows: 100px 160px;
        /* 定义网格间距:行间距和列间距均为20px */
        grid-gap: 20px;

        width: 600px;
        border: 1px solid #ccc;
        border-radius: 6px;
        margin: 100px auto;
        padding: 20px;
    }

    .grid-item {
        background-color: yellowgreen;
    }
</style>
...

<body>
    <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>
</body>
...

2、网格元素常用属性

注意:以下属性值中value的取值均为数值型,代表的是网格线的行或列数;

序号属性描述
1grid-column-start指定网格元素列的开始位置;
2grid-column-end指定网格元素列的结束位置;
3

grid-column 

grid-column-start 和 grid-column-end 的缩写形式;
4grid-row-start指定网格元素行的开始位置;
5grid-row-end指定网格元素行的结束位置;
6grid-rowgrid-row-start 和  grid-row-end 的缩写形式;

(1)属性说明

【grid-column-start属性】

该属性用来指定某一网格元素列的开始位置

.grid-item{
     grid-column-start : value;
}
  • 表示该网格元素【.grid-item】在第value列开始;
【grid-column-end属性】

该属性用来指定某一网格元素列的结束位置

.grid-item{
     grid-column-end : value;
}
  • 表示该网格元素【.grid-item】在第value列结束;
【grid-column属性】

该属性用来指定某一网格元素列的开始位置和结束位置

.grid-item{
     grid-column : value1 / value2;
}
  • 表示该网格元素【.grid-item】在第value1列开始,value2列结束;
  • value2的取值可以是  span x,表示跨x列合并;
【grid-row-start属性】

该属性用来指定某一网格元素行的开始位置

.grid-item{
     grid-row-start : 1;
}
  • 表示该网格元素【.grid-item】在第1行开始;
【grid-row-end属性】

该属性用来指定某一网格元素行的结束位置

.grid-item{
     grid-row-end : 3;
}
  • 表示该网格元素【.grid-item】在第3行结束;
【grid-row属性】

该属性用来指定某一网格元素行的开始位置和结束位置

.grid-item{
     grid-row : value1 / value2;
}
  • 表示该网格元素【.grid-item】在第value1行开始,value2行结束;
  • value2的取值可以是  span x,表示跨x行合并;

(2)使用实例

...
<style>
    .grid-container {
        /* 添加网格容器:将该元素设置为网格容器 */
        display: grid;
        /* 定义网格列:三个相等宽度的列 */
        grid-template-columns: 1fr 1fr 1fr; 
        /* 定义网格行:两行 高度均为160px */
        grid-template-rows: 160px 160px;
        /* 定义网格间距:行间距和列间距均为20px */
        grid-gap: 20px;

        width: 600px;
        border: 1px solid #ccc;
        border-radius: 6px;
        margin: 100px auto;
        padding: 20px;
    }

    .grid-item {
        background-color: yellowgreen;
    }

    .item1{
        /* 设置第一个网格元素 从第1行开始,跨2行合并 */
        grid-row: 1 / span 2;
    }

    .item4{
        /* 设置第四个网格元素 从第2列开始,到第4列结束 */
        grid-column: 2 / 4;
    }
</style>
...

<body>
    <div class="grid-container">
        <div class="grid-item item1">1</div>
        <div class="grid-item">2</div>
        <div class="grid-item">3</div>
        <div class="grid-item item4">4</div>
    </div>
</body>

3、fr单位

  • 网格行、列可以使用任何长度单位进行定义;
  • 网格布局中引入了新的fr单位,可以更灵活的创建网格行或列;
  • 使用以下代码可以创建三个等宽的网格列;
.grid-container {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  width:600px;
}

4、grid布局优势

  • 高效率:使用Grid布局的页面元素更加简单有序,使得开发和维护工作更便捷,更高效;
  • 灵活性:使用Grid布局可以定制不同的网页布局,灵活性高;
  • 响应式:使用Grid布局的页面支持响应式,能够自适应不同设备和屏幕尺寸;
  • 语义化:Grid布局中都是语义化属性,容易理解和维护;
  • 多支持:大多数主流浏览器都支持Grid布局,包括Chrome、Firefox、Safari 和 Edge;

三、Grid布局示例

1、布局效果

2、完整代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .grid-container {
            /* 添加网格容器:将该元素设置为网格容器 */
            display: grid;
            /* 定义网格列:三列等宽 */
            grid-template-columns: 1fr 1fr 1fr;
            /* 定义网格行:三行高度均为160px */
            grid-template-rows: 160px 160px 160px;
            /* 定义网格间距:行间距和列间距均为10px */
            grid-gap: 10px;

            width: 600px;
            /* height: 400px; */
            border: 1px solid #ccc;
            border-radius: 6px;
            margin: 80px auto;
            padding: 10px;
        }

        .grid-item {
            background-color: yellowgreen;
        }
        .item6{
            /* 设置该元素从第2列开始,到第4列结束 */
            grid-column: 2 / 4;
            /* 设置该元素从第2行开始,合并两行 */
            grid-row: 2 / span 2;
        }
    </style>
</head>

<body>
    <!-- 网格容器 -->
    <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 item6">6</div>
    </div>
</body>

</html>

四、实现过程

1、添加元素

先准备一个盒子,作为grid布局的网格容器,并在其中添加6个网格元素,如下图所示,

  • 给.grid-container元素添加属性【 display : grid 】,使其成为网格容器;
  • 并在其中添加6个.grid-item元素,即为网格元素;

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .grid-container{
            /* 添加网格容器:将该元素设置为网格容器 */
            display: grid;

            width: 600px;
            height: 400px;
            border: 1px solid #ccc;
            border-radius: 6px;
            margin: 20px auto;
            padding: 10px;
        }
    </style>
</head>

<body>
    <!-- 网格容器 -->
    <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>
</body>
</html>

暂时先给了一个网格容器一个高度,后面使用网格元素撑开时,就不再使用这个高度了;

2、划分网格行列

根据布局的效果图,知道该布局由【三行三列】组成的,只不过最后一个元素独占两行两列;

先将其划分成三行三列;

...
grid-template-columns: 1fr 1fr 1fr ;
grid-template-rows: 160px 160px 160px ;
grid-gap: 10px;
...
  • grid-template-columns:该属性用来定义网格中的三列;
  • grid-template-rows:该属性用来定义网格中的三行;
  • grid-gap:该属性用来定义网格单元的间距;

3、找出网格线

该网格布局中有三行三列网格区域,所以纵向有四条网格线,横向也有四条网格线,依次进行编号,如下图所示:

  

4、定位网格元素

给需要单独定位的网格元素添加样式:

  • 第6个网格元素是从第2列开始,到第4列结束;第2行开始,到第4行结束;
...
.item6{
    /* 设置该元素从第2列开始,到第4列结束 */
    grid-column: 2 / 4;
    /* 设置该元素从第2行开始,合并两行 */
    grid-row: 2 / span 2;
}
...

四、总结

个人觉得,使用Grid网格布局时,一般可以采用以下四个步骤:

  • 1. 添加:添加网格容器和网格元素;
  • 2. 划分:确定好效果图的行和列,进行网格单元划分;
  • 3. 找线:找出所有的网格线,进行编号;
  • 4. 定位:根据所找的网格线编号,对需要特殊处理的网格单元重新定位即可;

======================================================================

每天进步一点点,快来试试这个有趣的布局吧!

转载请注明出处或者链接地址:https://www.qianduange.cn//article/19970.html
标签
评论
发布的文章
大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!