天天看点

Grid 布局01 Grid 布局简介02 父元素/容器属性03 子元素/项目属性04 布局示例05 源码06 相关文章

01 Grid 布局简介

Grid 布局将网页划分成行和列从而形成一个个网格,可以任意组合成不同的网格。

容器:采用 Grid 布局的元素,称为 Grid 容器(Grid container),简称容器。

项目:采用 Grid 布局的元素的所有子元素自动成为容器成员,称为 Grid 项目(Grid item),简称项目。

项目只能是容器的顶层子元素,不包含项目的子元素。

单元格:行和列分割出来的区域叫做单元格(cell)。

网格线:划分容器区域的线,被称为网格线(grid line)。网格线是从 1 开始进行计数的。如有 4 * 4 个格子的容器有 5 根水平网格线和 5 根垂直网格线。

设为网格布局以后,容器子元素(项目)的 float、display: inline-block、display: table-cell、vertical-align 和 column-* 等设置都将失效.

Grid 布局示意图:

Grid 布局01 Grid 布局简介02 父元素/容器属性03 子元素/项目属性04 布局示例05 源码06 相关文章

02 父元素/容器属性

2.1 grid-template-columns; grid-template-rows

上述属性设置网格的宽度和高度。主要有以下几种设置参数值的方法:

  • 使用数值设置单元格宽度

  • 使用百分数设置单元格宽度

  • 使用 repeat() 设置单元格宽度

    该函数接收两个参数:
    • 参数 1:重复的次数
    • 参数 2:要重复的值
    grid-template-columns: repeat(3, 300px);
    grid-template-columns: repeat(1, 250px 400px 350px);
               
  • 使用 auto-fill 设置单元格宽度

    适用于单元格的大小是固定的,但是容器的大小不确定的情况。
  • 使用 fr(fraction "片段"的缩写) 关键字设置单元格宽度

    如果两列的宽度分别为 1fr 和 2fr,就表示后者是前者的两倍。
  • minmax() 函数产生一个长度范围,表示长度在这个范围内

    该函数接收两个参数表示最大值和最小值。

2.2 grid-row-gap; grid-column-gap; grid-gap

上述属性设置容器内部网格线(不包含边缘网格线)的宽度。

目前上述的三个属性分别被 row-gap, column-gap, gap 替代。

2.3 grid-template-areas

该属性用于定义区域。如果某些区域不需要利用,则使用 点(.) 表示。

区域的命名会影响到网格线:每个区域的起始网格线,会自动命名为区域名-start,终止网格线自动命名为区域名-end。

2.4 justify-items; algin-items; place-items

上述属性设置网格内容的位置。

属性名 作用
justify-items 设置单元格内容的水平位置(左中右)
align-items 设置单元格内容的垂直位置(上中下)
place-items align-items 属性和 justify-items 属性的合并简写形式

place-items: <align-items> <justify-items>

2.5 justify-content; algin-content; place-content

上述属性设置整个内容区域在容器里面的位置。

属性名 作用
justify-content 设置单元格内容的水平位置(左中右)
align-content 设置单元格内容的垂直位置(上中下)
place-content align-items 属性和 justify-items 属性的合并简写形式

place-content: <align-content> <justify-content>

03 子元素/项目属性

3.1 grid-column-start; rid-column-end; grid-row-start; grid-row-end

上述属性通过指定项目的四个边框(具体的网格线)指定项目的位置。

属性名 作用
grid-column-start 左边框所在的垂直网格线
grid-column-end 右边框所在的垂直网格线
grid-row-start 上边框所在的水平网格线
grid-row-end 下边框所在的水平网格线

这四个属性的值还可以使用 span 关键字,表示跨越,即左右/上下边框之间跨越多少个网格。

如果产生了项目的重叠,则使用 z-index 属性指定项目的重叠顺序。

3.2 grid-area

上述属性是 3.1 中属性的缩写形式

grid-area: <row-start> / <column-start> / <row-end> / <column-end>
           

3.3 justify-self; align-self; place-self

上述属性设置单元格内容的位置。

属性名 作用
justify-self 设置单元格内容的水平位置(左中右)
align-self 设置单元格内容的垂直位置(上中下)
place-self align-self 属性和 justify-self 属性的合并简写形式

place-self: <align-self> <justify-self>;

04 布局示例

<style>
    * {
        margin: 0;
        padding: 0;
    }

    ul {
        list-style: none;
    }

    a {
        text-decoration: none;
    }

    h3 {
        color: red;
        font-size: 25px;
        text-align: center;
    }

    .center-text {
        color: #fff;
        font-size: 50px;
        font-weight: 700;
        text-align: center;
        line-height: 200px;
    }
</style>
           

4.1 父元素/容器属性 grid-template-columns/rows 设置网格的宽度和高度

<style>
    .grid-template-exmaple {
        display: grid;
        /*************************************************************************
            1:  使用数值设置单元格宽度
        *************************************************************************/
        /* grid-template-columns: 300px 300px 300px; */

        /*************************************************************************
            2: 使用百分数设置单元格宽度
        *************************************************************************/
        /* grid-template-columns: 33.33% 33.33% 33.33%; */

        /*************************************************************************
            3:  使用 repeat() 设置单元格宽度
                该函数接收两个参数:
                    参数1: 重复的次数
                    参数2: 要重复的值
        *************************************************************************/
        /* grid-template-columns: repeat(3, 300px); */
        /* grid-template-columns: repeat(1, 250px 400px 350px); */

        /*************************************************************************
            4: 使用 auto-fill 设置单元格宽度
                适用于单元格的大小是固定的,但是容器的大小不确定
        *************************************************************************/
        /* grid-template-columns: repeat(auto-fill, 250px); */
        /* grid-template-columns: repeat(auto-fit, 250px); */

        /*************************************************************************
            5: 使用 fr(fraction "片段"的缩写) 关键字设置单元格宽度
                如果两列的宽度分别为1fr和2fr,就表示后者是前者的两倍
        *************************************************************************/
        /* grid-template-columns: 1fr 1fr 1fr; */

        /*************************************************************************
            6: minmax() 函数产生一个长度范围,表示长度在这个范围内
                该函数接收两个参数表示最大值和最小值
        *************************************************************************/
        /* grid-template-columns: repeat(3, minmax(240px, 1fr)); */

        /*************************************************************************
            7: auto关键字表示由浏览器自己决定长度
        *************************************************************************/
        /* grid-template-columns: 240px auto 240px; */

        grid-template-columns: repeat(3, 1fr);
        grid-template-rows: repeat(3, 300px);
        margin: 0 auto;
        width: 900px;
        background-color: orange;
    }   

    .grid-template-exmaple div {
        width: 200px;
        height: 200px;
        background-color: purple;
    }
</style>

<div class="grid-template-exmaple">
    <div class="center-text">1</div>
    <div class="center-text">2</div>
    <div class="center-text">3</div>
    <div class="center-text">4</div>
    <div class="center-text">5</div>
    <div class="center-text">6</div>
    <div class="center-text">7</div>
    <div class="center-text">8</div>
    <div class="center-text">9</div>
</div>
           
Grid 布局01 Grid 布局简介02 父元素/容器属性03 子元素/项目属性04 布局示例05 源码06 相关文章

4.2 父元素/容器属性 gap 设置网格的宽度和高度(兼容性不好)

<style>
    .grid-gap-exmaple {
        display: grid;
        grid-template-columns: 1fr 1fr 1fr;
        /* 原有的 grid-row-gap; grid-column-gap; grid-gap 属性分别被 row-gap, column-gap, gap 替代  */
        /* row-gap: 150px;
        column-gap: 150px; */
        gap: 150px;
        margin: 0 auto;
        width: 900px;
        background-color: orange;
    }   

    .grid-gap-exmaple div {
        width: 200px;
        height: 200px;
        background-color: purple;
    }
</style>

<div class="grid-gap-exmaple">
    <div class="center-text">1</div>
    <div class="center-text">2</div>
    <div class="center-text">3</div>
    <div class="center-text">4</div>
    <div class="center-text">5</div>
    <div class="center-text">6</div>
    <div class="center-text">7</div>
    <div class="center-text">8</div>
    <div class="center-text">9</div>
</div>
           
Grid 布局01 Grid 布局简介02 父元素/容器属性03 子元素/项目属性04 布局示例05 源码06 相关文章

4.3 父元素/容器属性 grid-template-areas 定义网格区域

<style>
    .grid-template-areas-exmaple {
        display: grid;
        grid-template-columns: 1fr 1fr 1fr;
        grid-template-rows: 1fr 1fr 1fr;
        grid-template-areas: 
            "header header header"
            "main . main"
            "footer footer footer";
        margin: 0 auto;
        width: 900px;
        background-color: orange;
    }   

    .grid-template-areas-exmaple div {
        margin: 20px;
        width: 200px;
        height: 200px;
        background-color: purple;
    }
</style>

<div class="grid-template-areas-exmaple">
    <div class="center-text">1</div>
    <div class="center-text">2</div>
    <div class="center-text">3</div>
    <div class="center-text">4</div>
    <div class="center-text">5</div>
    <div class="center-text">6</div>
    <div class="center-text">7</div>
    <div class="center-text">8</div>
    <div class="center-text">9</div>
</div>
           
Grid 布局01 Grid 布局简介02 父元素/容器属性03 子元素/项目属性04 布局示例05 源码06 相关文章

4.4 父元素/容器属性 justify-items; algin-items; place-items 设置网格内容的位置

<style>
    .grid-place-items-exmaple {
        display: grid;
        grid-template-columns: 1fr 1fr 1fr;
        grid-template-rows: 1fr 1fr 1fr;
        /* justify-items: center;
        align-items: center; */
        place-items: center;
        margin: 0 auto;
        width: 900px;
        height: 900px;
        background-color: orange;
    }   

    .grid-place-items-exmaple div {
        width: 200px;
        height: 200px;
        background-color: purple;
    }
</style>

<div class="grid-place-items-exmaple">
    <div class="center-text">1</div>
    <div class="center-text">2</div>
    <div class="center-text">3</div>
    <div class="center-text">4</div>
    <div class="center-text">5</div>
    <div class="center-text">6</div>
    <div class="center-text">7</div>
    <div class="center-text">8</div>
    <div class="center-text">9</div>
</div>
           
Grid 布局01 Grid 布局简介02 父元素/容器属性03 子元素/项目属性04 布局示例05 源码06 相关文章

4.5 父元素/容器属性 justify-content; algin-content; place-content 设置整个内容区域在容器里面的位置

<style>
    .grid-place-content-exmaple {
        display: grid;
        grid-template-columns: repeat(3, 240px);
        grid-template-rows: repeat(3, 240px);
        /* justify-content: center;
        align-content: center; */
        place-content: center;
        margin: 0 auto;
        width: 900px;
        background-color: orange;
    }   

    .grid-place-content-exmaple div {
        margin: 20px;
        width: 200px;
        height: 200px;
        background-color: purple;
    }
</style>

<div class="grid-place-content-exmaple">
    <div class="center-text">1</div>
    <div class="center-text">2</div>
    <div class="center-text">3</div>
    <div class="center-text">4</div>
    <div class="center-text">5</div>
    <div class="center-text">6</div>
    <div class="center-text">7</div>
    <div class="center-text">8</div>
    <div class="center-text">9</div>
</div>
           
Grid 布局01 Grid 布局简介02 父元素/容器属性03 子元素/项目属性04 布局示例05 源码06 相关文章

4.6 子元素/项目属性 grid-row/column-start/end 通过指定项目的四个边框(具体的网格线)指定项目的位置

<style>
    .grid-item-start-end-exmaple {
        display: grid;
        grid-template-columns: repeat(3, 240px);
        grid-template-rows: repeat(3, 240px);
        place-content: center;
        margin: 0 auto;
        width: 900px;
        background-color: orange;
    }   

    .grid-item-start-end-exmaple div {
        margin: 20px;
        width: 200px;
        height: 200px;
        background-color: purple;
    }
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210412232656603.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L213bF9sZWFybmluZw==,size_16,color_FFFFFF,t_70#pic_center)

    .grid-item-start-end-exmaple div:first-child {
        grid-row-start: 1;
        grid-row-end: 2;
        grid-column-start: 1;
        grid-column-end: 3;
        width: 440px;
    }

    .grid-item-start-end-exmaple div:nth-child(4) {
        grid-row-start: span 2;
        grid-column-start: span 2;
        width: 440px;
        height: 440px;
    }
</style>

<div class="grid-item-start-end-exmaple">
    <div class="center-text">1</div>
    <div class="center-text">2</div>
    <div class="center-text">3</div>
    <div class="center-text">4</div>
    <div class="center-text">5</div>
    <div class="center-text">6</div>
    <div class="center-text">7</div>
    <div class="center-text">8</div>
    <div class="center-text">9</div>
</div>
           
Grid 布局01 Grid 布局简介02 父元素/容器属性03 子元素/项目属性04 布局示例05 源码06 相关文章

4.7 子元素/项目属性 grid-area 通过指定项目的四个边框(具体的网格线)指定项目的位置

<style>
    .grid-area-exmaple {
        display: grid;
        grid-template-columns: repeat(3, 240px);
        grid-template-rows: repeat(3, 240px);
        place-content: center;
        margin: 0 auto;
        width: 900px;
        background-color: orange;
    }   

    .grid-area-exmaple div {
        margin: 20px;
        width: 200px;
        height: 200px;
        background-color: purple;
    }

    .grid-area-exmaple div:first-child {
        grid-area: 1 / 1 / 2 / 3;
        width: 440px;
    }

    .grid-area-exmaple div:nth-child(4) {
        grid-area: 2 / 2 / 4 / 4;
        width: 440px;
        height: 440px;
    }

    .grid-area-exmaple div:last-child {
        grid-area: 5 / 1 / 6 / 4;
        width: 680px;
        height: 200px;
    }
</style>

<div class="grid-area-exmaple">
    <div class="center-text">1</div>
    <div class="center-text">2</div>
    <div class="center-text">3</div>
    <div class="center-text">4</div>
    <div class="center-text">5</div>
    <div class="center-text">6</div>
    <div class="center-text">7</div>
    <div class="center-text">8</div>
    <div class="center-text">9</div>
</div>
           
Grid 布局01 Grid 布局简介02 父元素/容器属性03 子元素/项目属性04 布局示例05 源码06 相关文章

4.8 子元素/项目属性 justify-self; align-self; place-self 设置单元格内容的位置

<style>
    .grid-place-self-exmaple {
        display: grid;
        grid-template-columns: repeat(3, 1fr);
        grid-template-rows: repeat(3, 1fr);
        margin: 0 auto;
        width: 900px;
        height: 900px;
        background-color: orange;
    }   

    .grid-place-self-exmaple div {
        justify-self: end;
        align-self: start;
        /* place-self: center; */
        width: 200px;
        height: 200px;
        background-color: purple;
    }
</style>

<div class="grid-place-self-exmaple">
    <div class="center-text">1</div>
    <div class="center-text">2</div>
    <div class="center-text">3</div>
    <div class="center-text">4</div>
    <div class="center-text">5</div>
    <div class="center-text">6</div>
    <div class="center-text">7</div>
    <div class="center-text">8</div>
    <div class="center-text">9</div>
</div>
           
Grid 布局01 Grid 布局简介02 父元素/容器属性03 子元素/项目属性04 布局示例05 源码06 相关文章

05 源码

需要源码的同学可以在评论区留下邮箱地址,我这边会尽快发过去的。

06 相关文章

flex 布局

继续阅读