最强大的 CSS 布局方案 -- Grid 简单入门!

1,218 阅读3分钟

一、简介

Grid网格布局,是目前唯一一种CSS二维布局方式,一种新的布局模型,能够同时处理行和列,号称最强大的CSS布局方案。

Grid布局是将容器划分成“行”和“列”,产生了一个个的网格,我们可以将网格元素放在与这些行和列对应的位置上,从而达到我们布局的效果

二、Grid布局的属性可以分为两大类容器属性,项目属性

2.1容器属性:采用网格布局的区域,称为"容器"(container)

2.1.1 display: grid, display: grid: inline-grid

display: grid 该容器元素为块级元素。

display: inline-grid 该容器元素为行内元素。

2.1.2 grid-template-columns,grid-template-rows

grid-template-columns 属性定义每一列的列宽。

grid-template-rows 属性定义每一行的行高。

注:也可以使用auto子项会自适应父容器剩余的大小去撑开。


.main {

  display: grid;

  /*  声明了三列,宽度分别为 200px 100px 100px */

  grid-template-columns: 200px 100px 100px;

  /*  声明了两行,行高分别为 50px 100px  */

  grid-template-rows: 50px 100px;

}

.main div {

    background: pink;

    border: 1px solid black;

}

效果图:

image.png

2.1.3 grid-row-gap、grid-column-gap、grid-gap 属性

grid-row-gap:设置行间距

grid-column-gap:设置列间距

grid-gap:设置行间和列间距离

.main {

    display: grid;

    grid-template-columns: 200px 100px 100px;

    grid-template-rows: 50px 100px;

    margin: 50px;

    /* 行间距是10px */

    grid-row-gap: 10px;

    /* 列间距是20px */

    grid-column-gap: 20px;

}

.main div {

    background: pink;

    border: 1px solid black;

}

.main {

    display: grid;

    grid-template-columns: 200px 100px 100px;

    grid-template-rows: 50px 100px;

    margin: 50px;

    /* 语法 grid-gap: grid-row-gap grid-column-gap; */

    grid-gap: 10px 20px;

}

.main div {

    background: pink;

    border: 1px solid black;

}

效果图:

image.png

2.2 项目属性:容器内部采用网格定位的子元素,称为"项目"(item)

2.2.1 grid-template-areas

grid-template-areas 属性用于定义区域,一个区域由一个或者多个单元格组成。

grid-area 属性用于指定单元格放在区域中的哪个位置。

// css 案例1
/* .box {
    display: grid;
    grid-template-rows: 50px 100px; // 行高
    grid-template-areas:
        "a a c"
        "b b c";
} */

// css 案列2
.box {
    display: grid;
    grid-template-rows: 100px 100px 100px;
    margin: 50px;
    grid-template-areas:
        "a a c"
        "b b c"
        "d e f";
}

.a {
    grid-area: a;
    background: palegoldenrod;
}
.b {
    grid-area: b;
    background: palegreen;
}
.c {
    grid-area: c;
    background: paleturquoise;
}
.d {
    grid-area: d;
    background: peachpuff;
}
.e {
    grid-area: e;
    background: pink;
}
.f {
    grid-area: f;
    background: mediumturquoise;
}
// html
 <div class="box">
    <div class="a"></div>
    <div class="b"></div>
    <div class="c"></div>
    <div class="d"></div>
    <div class="e"></div>
    <div class="f"></div>
</div>

案例1 详细单元格位置: image.png

案例1 布局效果: image.png

案例2 详细单元格位置: image.png

案例2 布局效果: image.png

三、行、列、单元格、区域、网格线

容器里面的水平区域称为“行”即row,垂直区域称为“列”即column。

行和列的交叉区域,称为“单元格”即cell。正常情况下,n行和m列会产生n 乘 m个单元格。

一定数量的单元格可以组成“区域”即area,区域必须是正方形/长方形的。

gridline.jpg

划分网格的线,称为“网格线”即grid line。

image.png

四、总结

Grid网格布局是最强大的 CSS 布局方案。

Grid网格布局是一种二维布局、更适用于多行和多列布局,可以任意组合不同的网格做出各种各样的布局。

这里就是基本的使用,想学习更多可以参考

CSS Grid 网格布局教程 - 阮一峰的网络日志 (ruanyifeng.com)

最强大的 CSS 布局 —— Grid 布局 - 掘金 (juejin.cn)