Grid 布局

2021-10-27  本文已影响0人  洪锦一

Grid 布局与 Flex 布局有一定的相似性,都可以指定容器内部多个项目的位置。但是,它们也存在重大区别。

Flex 布局是轴线布局,只能指定"项目"针对轴线的位置,可以看作是一维布局。Grid 布局则是将容器划分成"行"和"列",产生单元格,然后指定"项目所在"的单元格,可以看作是二维布局。Grid 布局远比 Flex 布局强大。

容器属性:

display 布局
grid-template-columns
grid-template-rows
grid-template-areas 区域
grid-template 行 列 区域简写

grid-column-gap 列间隔
grid-row-gap 行间隔
grid-gap 简写

justify-items 项目内容横向排列方式
align-items 项目内容纵向排列方式
place-items 简写

justify-content 内容横向排列方式
align-content 内容纵向排列方式
place-content 简写

grid-auto-columns 隐式(多出来未定义的格子)列宽
grid-auto-rows 隐式(多出来未定义的格子)行高

grid-auto-flow 排列方式

grid 行 列 区域 隐式格子宽 隐式格子高 排列方式简写

项目属性:

grid-column-start 定位列线开始位置
grid-column-end 定位列线结束位置
grid-column 简写

grid-row-start 定位行线开始位置
grid-row-end 定位行线结束位置
grid-row 简写

grid-area 区域

justify-self 单个项目内容横向对其方式
align-self 单个项目内容纵向对其方式
place-self 简写

网格容器(Grid Container) 属性

display

.box{
   display: grid;  /*生成一个块级网格*/
   display: inline-grid;  /*生成一个内联网格*/
}

设置行列 grid-template-columns | grid-template-rows

设置列宽、行高

可以是以下单位:

区域 grid-template-areas | grid-template

设置定义区域(在子项目中可以直接使用)

/*容器(下面这个是定义了3行3列布局)*/
.box{
    grid-template-areas: 'a a b'
                         'a a b'
                         'c c c';
}

/*项目*/
.box .item1{
    grid-area: a;/*a占了4个单元格*/
}

.box .item2{
    grid-area: b; /*b占了2个单元格*/
}

grid-templategrid-template-rowsgrid-template-columnsgrid-template-areas 简写属性

.box{
    display: grid;
    grid-template-rows: 35px 50px 30px;
    grid-template-columns: 100px 100px 100px;
    grid-template-areas:
        "a a a"
        "b c c"
        "d e f";
}
//下面写法等于上面的写法
.box {
    display: grid;
    grid-template: "a a a" 35px "b c c" 50px "d e f" 30px / 100px 100px 100px;
}

间隔 grid-column-gap | grid-row-gap | grid-gap

每个单元格之间的间隔

grid-column-gap == column-gap

grid-row-gap == row-gap

grid-gap == gap

.box{
    row-gap: 20px;
    column-gap: 20px;
}

/*简写*/
.box{
    gap: 10px 30px;   /*行 列*/
}

所有子元素对其方式 justify-items | align-items | place-items

设置所有子元素内容的对齐方式

水平方向

.box{
    justify-items: start | end | center | stretch;
}

垂直方向

.box{
    align-items: start | end | center | stretch;
}

简写方式

.box{
    place-items: start end; /*垂直 水平*/
}

内容对其方式 justify-content | align-content | place-content

设置整个内容在容器内对齐方式

水平方向

.box{
    justify-content: start | end | center | stretch | space-around | space-between | space-evenly;  
}

垂直方向

.box{
    align-content: start | end | center | stretch | space-around | space-between | space-evenly;  
}

简写方式

.box{
    place-content: end start; /*垂直 水平*/
}

多出来的项目宽高 grid-auto-columns | grid-auto-rows

设置多出来的项目宽和高(我们设置了3*3个项目,但是实际有10个,这个属性就是用来设置多出来的项目)

.box{
    grid-auto-columns: 50px 60px 80px;  /*多出来 1格 2格 3格*/
    grid-auto-rows: 50px;
}

子元素排列方式 grid-auto-flow

子元素的排列顺序,默认是先行后列(先填满第一行,在放入第二行)

.box{
    grid-auto-flow: row | column | row dense | column dense
}

简写 grid

在一个声明中设置所有以下属性的简写:grid-template-rows,grid-template-columns, grid-template-areas, grid-auto-rows, grid-auto-columns, 和grid-auto-flow。(注意:您只能在单个网格声明中指定显式或隐式网格属性)。

网格项(Grid Items) 属性

定位 grid-column-start | grid-column-end | grid-row-start | grid-row-end | grid-column | grid-row

用来指定item的具体位置,根据在那跟网格线

grid-column-start | grid-column-end 列从第几根线开始,第几根线结束

grid-row-start | grid-row-end 行从第几根线开始,第几根线结束

grid-column | grid-row 简写

.box .item:nth-child(1) {
    grid-column-start: 2;
    grid-column-end: 4;
    grid-row-start: 3;
    grid-row-end: 5;
}

/*简写*/
.box .item:nth-child(1) {
    grid-column: 2/4;
    grid-row: 3/5;
}

/*简写2*/
.box .item:nth-child(1) {
    /*行开始 列开始 行结束 列结束*/
    grid-area: 3/2/5/4;
}

表示跨几行或几列

.box .item:nth-child(1) {
    grid-column-start:span 2; /* ===> grid-column-end:span 2*/
    grid-row-start:span 2;/* ===> grid-row-end:span 2*/
}

区域 grid-area

父容器定义了区域,在项目中可以直接使用

/*容器(下面这个是定义了3行3列布局)*/
.box{
    grid-template-areas: 'a a b'
                         'a a b'
                         'c c c';
}

/*项目*/
.box .item1{
    grid-area: a;/*a占了4个单元格*/
}

.box .item2{
    grid-area: b; /*b占了2个单元格*/
}

子元素对其方式 justify-self | align-self | place-self

设置单个子元素内容的对齐方式(跟 justify-items 属性用法完全一致,justify-items 是设置所有的,justify-self 是设置单个的)

水平方向

.box .item1{
    justify-self: start | end | center | stretch;
}

垂直方向

.box .item1{
    align-self: start | end | center | stretch;
}

简写方式

.box .item1{
    place-self: start end; /*垂直 水平*/
}
上一篇 下一篇

猜你喜欢

热点阅读