CSS中的grid布局

163 阅读3分钟

grid布局

1. 定义网格

    display: grid;
    /* 将容器分为几行几列,以及每个格子的大小,1fr表示占剩余空间的一份 */
    grid-template: repeat(3, 1fr) / repeat(2, 1fr);
    /*  grid-template: 1fr 1fr 1fr / 1fr 1fr;
        grid-template-rows: 1fr 1fr 1fr;
        grid-template-columns: 1fr 1fr; 
    */

3行2列布局

2. 格子合并

    /* 单元格合并,相邻同名的网格会合并须是矩形的,非矩形无效 */
    grid-template-areas: 
                    "a a a"
                    "b c c"
                    "b c c";

2. 格子间隙

    /* 水平垂直间隙 */
    gap: 8px 5px;
    /* 
        row-gap: 8px; 
        column-gap: 5px;
    */

3. 格子内容对齐方式

    place-items: center center;
    /* 
        justify-items: center;
        align-items: center; 
    */

水平垂直居中

4. 单独设置格子内容对齐方式

    /* 该属性用在 grid 或 flex 布局中子元素上,用来设置该元素的对齐方式,使之不再收到place-items的影响 */
    .three {
        /* 单独设置格子内容对齐方式 */
        place-self: start end;
        /* 
            align-self: start;
            justify-self: end; 
        */
    }

第三个格子右上对齐

5. 网格整体在容器的对齐方式

    /* 当网格所占空间小于容器时,使用这两个属性来指定网格整体在容器中的对齐方式 */
    place-content: space-arounspace-evenly;
    /* 
        justify-content: space-around;
        align-content: space-evenly; 
    */

网格整体对齐方式

6. 隐式创建的网格列宽和行高

    /* 当网格多出指定的数量时,会自动创建,这两个属性指定新创建网格的列宽和行高。
    若不指定,浏览器会根据单元格内容的大小,来决定新增网格的列宽和行高。*/
    grid-auto-columns: 1fr;
    grid-auto-rows: 1fr;

参考MDN

参考CSDN

e.g.

<!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>
        .box {
            display: grid;
            /* 将容器分为几行几列,以及每个格子的大小,1fr表示占剩余空间的一份 */
            grid-template: repeat(3, 1fr) / repeat(2, 1fr);
            /* grid-template: 1fr 1fr 1fr / 1fr 1fr; */
            /* grid-template-rows: 1fr 1fr 1fr;
            grid-template-columns: 1fr 1fr; */

            /* 单元格合并,相邻同名的网格会合并,必须是矩形的,非矩形无效 */
            grid-template-areas: 
                            "a a a"
                            "b c c"
                            "b c c";

            /* 设置网格之间的间隙 */
            gap: 8px 5px;
            /* row-gap: 8px;  
            column-gap: 5px;*/
            /* 设置每个网格中内容的水平垂直对齐方式 */
            place-items: center center;
            /* justify-items: center;
            align-items: center; */

            /* grid-template: 60px 60px 60px / 80px 80px; */
            /* 当网格所占空间小于容器时,使用这两个属性来指定网格整体在容器中的对齐方式 */
            place-content: space-around space-evenly;
            /* justify-content: space-around;
            align-content: space-evenly; */

            /* 当网格多出指定的数量时,会自动创建,这两个属性指定新创建网格的列宽和行高。
            若不指定,浏览器会根据单元格内容的大小,来决定新增网格的列宽和行高。*/
            grid-auto-columns: 1fr;
            grid-auto-rows: 1fr;

            width: 200px;
            height: 200px;
            background-color: skyblue;
        }
        .item {
            width: 50px;
            height: 50px;
            background-color: plum;
        }
        .three {
            /* 单独设置格子内容对齐方式 */
            place-self: start end;
            align-self: start;
            justify-self: end;
        }
    </style>
</head>
<body>
    <div class="box">
        <span class="item"></span>
        <span class="item"></span>
        <span class="item three"></span>
        <span class="item"></span>
        <span class="item"></span>
        <span class="item"></span>

        <!-- 多出指定的网格数 -->
        <span class="item"></span>
    </div>
</body>
</html>