CSS Grid网格布局

9,659次阅读
没有评论

共计 5293 个字符,预计需要花费 14 分钟才能阅读完成。

一、前言

二、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

CSS Grid 网格布局

布局 2

 CSS Grid 网格布局

 布局 3

CSS Grid 网格布局

布局 4

 CSS Grid 网格布局

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

二、Grid 布局

1、基本介绍

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

2、核心概念

(1)网格容器

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

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

(2)网格元素

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

CSS Grid 网格布局

(3)网格列

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

CSS Grid 网格布局

(4)网格行

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

CSS Grid 网格布局

(5)网格间距

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

CSS Grid 网格布局

(6)网格线

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

CSS Grid 网格布局

三、Grid 布局常用属性

1、网格容器常用属性

序号 属性 描述
1 grid-template-columns 指定网格布局中列的大小,以及列的数量;
2 grid-template-rows 指定网格布局中行的大小,以及行的数量;
3 grid-column-gap 指定网格元素的列间距;
4 grid-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)使用实例

CSS Grid 网格布局

...

...


    
1
2
3
4
5
6
...

2、网格元素常用属性

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

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

grid-column 

grid-column-start 和 grid-column-end 的缩写形式;
4 grid-row-start 指定网格元素行的开始位置;
5 grid-row-end 指定网格元素行的结束位置;
6 grid-row grid-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)使用实例

CSS Grid 网格布局

...

...


    
1
2
3
4

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、布局效果

CSS Grid 网格布局

2、完整代码





    
    
    Document
    



    
    
1
2
3
4
5
6

四、实现过程

1、添加元素

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

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

CSS Grid 网格布局




    
    
    Document
    



    
    
1
2
3
4
5
6

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

2、划分网格行列

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

先将其划分成三行三列;

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

CSS Grid 网格布局

3、找出网格线

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

CSS Grid 网格布局  

4、定位网格元素

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

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

CSS Grid 网格布局

四、总结

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

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

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

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

原文地址: CSS Grid 网格布局

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-11-07发表,共计5293字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)