前端

[CSS]之Grid布局

2019-07-30  本文已影响0人  是苏菇凉呀

网格布局(Grid)将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局

一、Grid布局与Flex布局的区别

二、容器属性

1. display: grid

指定一个容器采用网格布局

2. display: inline-grid

将容器元素设置成行内元素

3. grid-template-columns 和 grid-template-rows

grid-template-columns
定义每一列的宽度
grid-template-rows
定义每一行的高度

(3.1) repeat(重复的次数,所要重复的值)
.container {
  display: grid;
  grid-template-columns: repeat(3, 20%);
  grid-template-rows: repeat(3, 20%);
}
(3.2) auto-fill关键字

当单元格的大小是固定的,容器的大小不确定,实现每一行或每一列容纳尽可能多的单元格时,使用auto-fill实现自动填充

.container {
  display: grid;
  grid-template-columns: repeat(auto-fill, 100px);
  grid-template-rows: repeat(auto-fill, 100px);
}
(3.3) fr关键字

表示比例关系,fraction的缩写

.container {
  display: grid;
  grid-template-columns: 1fr 2fr 150px;
}
表示第二列的宽度是第一列的2倍,第三列宽度是150px
(3.4) minmax(最小值,最大值)

将长度设置在一个范围内

.container {
  display: grid;
  grid-template-colunms: 150px 20% (100px,1fr);
}
表示第三列的列宽不小于100px,不大于1fr
(3.5) auto关键字

表示由浏览器自己决定长度

4. row-gap 和 column-gap 和 gap
.container {
  gap: 20px 30px;
}
设置行间距为20px,列间距为30px
5. grid-template-areas

用于定义区域

.container {
  display: grid;
  grid-template-columns: 50px 50px 50px;
  grid-template-rows: 50px 50px 50px;
  grid-template-areas: 'header header header'
                       'slidbar main .'
                       'footer footer footer';
}
划分成9个单元格,顶部是header区域,中间分为slidebar和main(.表示这个区域不需要利用),底部是footer区域
6. grid-auto-flow

设置容器子元素的排列顺序
默认值是row(先行后列)
row dense(先行后列,尽量不出现空格)
column(先列后行)
column dense(先列后行,尽量不出现空格)

.container {
  display: grid;
  grid-template-columns: repeat(3,100px);
  grid-template-columns: repeat(3,100px);
  grid-auto-flow: column
}
7. justify-items属性,align-items属性,place-items属性
(7.1) justify-items

设置单元格内容的水平位置(左中右)

属性值:
.container {
  display: grid;
  grid-template-columns: repeat(3,165px);
  grid-template-rows: repeat(3,165px);
  grid-auto-flow: row;
  border: 1px solid black;
  justify-items: start;
}

效果图


justify-items.png
(7.2) align-items

设置单元格内容的垂直位置(上中下)

属性值:
.container {
  display: grid;
  grid-template-columns: repeat(3,165px);
  grid-template-rows: repeat(3,165px);
  grid-auto-flow: row;
  border: 1px solid black;
  align-items: start;
}

效果图


align-items.png
(7.3) place-items

是align-items和justify-items的缩写

place-items: <align-items> <justify-items>
8. justify-content属性,align-content属性,place-content属性
属性值:
place-content属性是align-content属性和justify-content属性的合并简写形式
place-content: <align-content> <justify-content>
.container {
  height: 500px;
  display: grid;
  grid-template-columns: repeat(3,105px);
  grid-template-rows: repeat(3,105px);
  grid-auto-flow: row;
  border: 1px solid black;
  place-content: space-evenly center;
}

效果图:


space-content.png
9. grid-auto-columns属性,grid-auto-rows属性

用来设置浏览器自动创建的多余网格的列宽和行高

10. grid-template属性,grid属性

三、项目属性

1. grid-column-start属性,grid-column-end属性,grid-row-start属性,grid-row-end属性

用来指定项目的四个边框,分别定位在哪根网格线

2.grid-column属性,grid-row属性
.item {
  grid-column: 3/5;
  grid-row: 1/3;
}
3.grid-area

指定项目放在哪一个区域

.container {
  display: grid;
  grid-template-columns: repeat(3,100px);
  grid-template-rows: repeat(3,100px);
  border: 1px solid black;
  grid-template-areas: 'a b c'
    'd e f'
    'g h i'
}
.item-1 {
  grid-area: e;
}
将1单元格放到e区域

效果图:


grid-area.png
.item {
  grid-area: <row-start> / <column-start> / <row-end> / <column-end>;
}
4.justify-selft属性,align-self属性,place-self属性
place-self: <align-self> <justify-self>
属性值:
上一篇 下一篇

猜你喜欢

热点阅读