Grid网格布局

简介

Flex布局时一维的布局,即水平或垂直方向的布局。而Grid布局则划分成“行”和“列”,产生单元格,可以看作是二维的布局。Grid布局远比Flex布局强大

容器

定义网格布局,定义网格布局后,容器子元素的float、display:inline-block、display:table-cell、vertical-align和column-*都将失效。

.div {
	display: grid; 
	display: inline-grid;   //容器元素可以是块元素或行内元素
}

容器属性

  • grid-template-columns | grid-template-rows
.container {
	display: grid;
	grid-template-columns: 30px 30px 30px;   //定义有多少列,且每列宽度为多少
	grid-template-rows: 33.33% 33.33% 33.33%;  //定义有多少行,且每行行高为多少
	//单位可以是绝对单位,也可以是百分比
}
  1. repeat(num, value)
    可以简化重复的值,避免重复写同样的值,尤其是网格比较多时, num为重复次数,value为重复的值(可以单个,如30px;或多个,如30px 20px 50px)。
.container {
	display: grid;
	grid-template-columns: repeat(3, 30px);
	grid-template-rows: repeat(3,33.33%);
}
  1. auto-fill关键字
    有时候单元格大小固定,但容器却不固定,如希望每行容纳尽可能多的单元格,则使用auto-fill关键字表示自动填充
.container {
	display: grid;
	grid-template-columns: repeat(auto-fill, 100px);
}
  1. fr关键字
    表示比例关系,fr(fraction的缩写,以为片段)
.container {
	display: grid;
	grid-template-columns: 1fr 2fr;   // 表示两列,第二列比第一列宽2倍
	//grid-template-columns: 150px 1fr 2fr;  //可以与绝对单位结合,表示第一列占150px,然后第二、三列按比例瓜分剩余空间(如有的话)
}
  1. minmax()
    定义一个长度范围,表示最小值和最大值
.container {
	display: grid;
	grid-template-columns: 1fr 1fr minmax(100, 1fr); //表示列宽不小于100px,不大于1fr
}
  1. auto关键字
    定义自适应长度
.container {
	display: grid;
	grid-template-columns: 50px auto 100px; //第二列宽度=容器宽度-50px-100px,最小值为0
}
  1. 网格线名称
    定义网格线名称,方便引用
.container {
	display: grid;
	grid-template-columns: [c1] 100px [c2] 100px [c3] 30px [c4];
	grid-template-columns: [r1] 100px [r2] 30px [r3] 40px [r4 end4];   //也可以在一个[ ]中定义两个名称,如[r4 end4]
}
  • grid-column-gap | grid-row-gap | grid-gap
    定义列间,行间间隔大小。根据最新标准,这些属性可省略前缀grid-,即column-gap | row-gap | gap
.container {
	display: grid;
	grid-column-gap: 10px; //表示列间间隔10px
	grid-row-gap: 10px;  //表示行间间隔10px
}

.container {
	display: grid;
	grid-gap: 10px 8px;  //grip-gap时grip-column-gap和grip-row-gap的合并,表示列间间隔10px,行间间隔8px
}
  • grid-template-areas
    指定区域,一个区域可由单个或多个单元格组成
    区域名会影响道网格线,会自动命令该区域起始网格线为【区域名-start】,终止网格线为【区域名-end】
.container {
	display: grid;
	grid-template-columns: 100px 10px 100px;
	grid-template-rows: 100px 100px 100px;
	grid-template-areas: 'a b c'
	                     'd e f'
					      g h i';  //如果某个区域不需要利用,则使用“点”  .  表示
}
  • grid-auto-flow
    定义子元素排列顺序

row(默认值): 即“先行后列”
column: 即“先列后行”
row dense: 表示"先行后列",并且尽可能紧密填满,尽量不出现空格
column dense: 表示"先列后行",并且尽可能紧密填满,尽量不出现空格

  • justify-items | align-items | place-items
    justify-items定义单元格内容水平位置,align-items定义单元格内容垂直位置
    place-items是前两者的合并简写

start: 左(上)对齐
end: 右(下)对齐
center: 居中
stretch: 拉伸,占满整个单元格

  • justify-content | align-content | place-content
    定义整个内容区域的对齐方式,justify-content定义水平方向,align-content定义垂直方向,place-content是前两者的合并简写

start: 左(上)对齐
end: 右(下)对齐
center: 居中
stretch: 拉伸,占满整个单元格
space-around:每个成员两侧(上下)间隔相等
space-between: 成员之间间隔相等,成员与容器边框没有间隔
space-evently: 成员之间,成员与容器边框之间的间隔相等

  • grid-auto-columns | grid-auto-rows
    当成员的指定位置,在现有网格之外,浏览器就会自动生成多余网格,以放置该成员
.container {
	display: grid;
	grid-template-columns: 100px 10px 100px;
	grid-template-rows: 100px 100px 100px;
	grid-auto-rows: 30px;    //表示自动生成网格的行高
	grid-auto-columns: 50px;   //表示自动生成网格的列宽
}

项目属性

  • grid-column-start | grid-column-end | grid-row-start | grid-row-end
    定义成员的位置,指定成员的四个边框分别定位在哪根网格线
    值可以为序号,也可以为网格名,也可以使用span value表示成员跨越多少个网格

grid-column-start:左边框所在的垂直网格线
grid-column-end:右边框所在的垂直网格线
grid-row-start: 上边框所在的水平网格线
grid-row-end: 下边框所在的水平网格线

  • grid-column | grid-row
    grid-column是grid-column-start和grid-column-end的合并简写
    grid-row是grid-row-start和grid-row-end的合并简写
.item{
	grid-column: 1 / 2;
	grid-row: 1 / 3;   // 也可以grid-row: 1 / span 2表示
}
等同于
.item{
	grid-column-start: 1;
	grid-column-end: 2;
	grid-row-start: 1;
	grid-row-end: 3;
}
  • grid-area
    指定成员放在哪个区域
.item{
	grid-area: e;   //指定成员在e单元格
}
// grid-area可以用作grid-row-start,grid-ros-end,grid-column-start,grid-column-end的合并简写,直接指定成员位置+
.item {
	grid-area: <row-start> / <row-end> / <column-start> / <column-end>;   
}
  • jusify-self | align-self | place-self
    指定某个成员的对齐方式,与justify-items和align-items类似,但前者只作用于单个成员
    place-self则是前两者的合并简写

参考

阮一峰大神:http://www.ruanyifeng.com/blog/2019/03/grid-layout-tutorial.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值