CSS的grid布局

传统布局有三种:

  • 传统布局

利用position + display + float布局,兼容性好,但是效率低

  • flex布局

有自己的一套属性,效率高,学习成本低,兼容性强

  • grid布局

网格布局是最强大的css布局方案,但是知识点多,学习成本相对困难,目前的兼容性不如flex好

基本概念

在这里插入图片描述


在这里插入图片描述

容器----有容器属性(container)
项目----有项目属性(item)

容器属性

  • grid-template-columns
  • grid-template-rows
  • row-gap
  • column-gap
  • grid-gap
  • grid-template-areas
  • grid-auto-flow
  • justify-items
  • align-items
  • place-items
  • justify-content
  • align-content
  • place-content
  • grid-auto-columns
  • grid-auto-rows
grid-template-*

grid-template-columns: 250px 200px 180px; 用来设置有几列,且每一列的宽度分别是多少 ,这个设置的就是有3列,即宽度分别为:250px 200px 180px
grid-template-rows: 150px 80px 102px 60px; 用来设置有几行,且每一行的宽度分别是多少 ,这个设置的就是有4行,即高度分别为:150px 80px 102px 60px

eg:

.container{
  display: grid;
  color: white;
  text-align: center;
  font-size: 25px;
  line-height: 25px;
  width: 1000px;
  height: 800px;
  grid-template-columns: 250px 200px 180px;
  grid-template-rows: 150px 80px 102px 60px;
}

![image.png](https://img-blog.csdnimg.cn/img_convert/5f93fa5b9c9f399ab44109cf293281ec.png#clientId=u612f459d-1d89-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=314&id=ue8ac3a21&margin=[object Object]&name=image.png&originHeight=627&originWidth=896&originalType=binary&ratio=1&rotation=0&showTitle=false&size=78434&status=done&style=none&taskId=u5e3518c8-5ddd-444a-b66e-7922b67276e&title=&width=448)

与grid-template-*相关
  1. repeat(),第一个参数是重复的次数,第二个参数是所要重复的值
grid-template-columns: 150px 150px;
//可简写为
//grid-template-columns: repeat(重复次数,其数值大小);
grid-template-columns: repeat(3,150px);
  1. auto-fill,有时,单元格的大小是固定的,但是容器的大小不确定,这个属性就会自动填充
grid-template-columns: repeat(auto-fill,150px);

![image.png](https://img-blog.csdnimg.cn/img_convert/34e489b375b80b96d707da162e09b209.png#clientId=u612f459d-1d89-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=285&id=ubdc761e4&margin=[object Object]&name=image.png&originHeight=570&originWidth=1256&originalType=binary&ratio=1&rotation=0&showTitle=false&size=94644&status=done&style=none&taskId=u732aa98c-0a2d-473d-a687-bdfe55cba2a&title=&width=628)

  1. fr,为了方便表示比例关系,网格布局提供了fr关键字(fraction的缩写,意为"片段")
grid-template-columns: repeat(4, 1fr); //宽度平均分成4份

![image.png](https://img-blog.csdnimg.cn/img_convert/5fbcce66d3aa2ebc01823bd390dc8be9.png#clientId=u612f459d-1d89-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=284&id=ua81893d4&margin=[object Object]&name=image.png&originHeight=568&originWidth=1389&originalType=binary&ratio=1&rotation=0&showTitle=false&size=98799&status=done&style=none&taskId=u2354cd16-4b2d-4c31-b170-eed3abbc766&title=&width=694.5)

  1. minmax(),函数产生一个长度范围,表示长度就在这个范围之中,它接受两个参数,分别为最小值和最大值
grid-template-columns: 1fr minmax(150px, 1fr) 1fr;

![image.png](https://img-blog.csdnimg.cn/img_convert/e2e3acb16a617f5df26bbf21d48b4b07.png#clientId=u612f459d-1d89-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=305&id=u62a4594a&margin=[object Object]&name=image.png&originHeight=609&originWidth=1410&originalType=binary&ratio=1&rotation=0&showTitle=false&size=96635&status=done&style=none&taskId=u34bc7248-3ace-437b-99de-389ea18bf6c&title=&width=705)

  1. auto,表示由浏览器自己决定长度
grid-template-columns: 100px auto 100px;

![image.png](https://img-blog.csdnimg.cn/img_convert/183e5f352ef0d1de4c16ea86a0709304.png#clientId=u612f459d-1d89-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=304&id=u56f63173&margin=[object Object]&name=image.png&originHeight=608&originWidth=1501&originalType=binary&ratio=1&rotation=0&showTitle=false&size=85777&status=done&style=none&taskId=u0bbfa230-f68c-4450-8e26-ebebaa1f68a&title=&width=750.5)

  1. 网格线,可以用方括号定义网格线名称,方便以后的引用
grid-template-columns: [c1] 100px [c2] 100px [c3] 100px [c4];

![image.png](https://img-blog.csdnimg.cn/img_convert/ba198835f7672f061830c74060890f1b.png#clientId=u612f459d-1d89-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=577&id=u80a5a0ef&margin=[object Object]&name=image.png&originHeight=628&originWidth=477&originalType=binary&ratio=1&rotation=0&showTitle=false&size=75231&status=done&style=none&taskId=ua95c9979-2dd1-4cf0-9d2b-db5b1660719&title=&width=438.5)

column-gap与row-gap

一句话解释就是,item(项目)相互之间的距离

eg:

column-gap: 20px;
row-gap: 15px;

效果:

![image.png](https://img-blog.csdnimg.cn/img_convert/6a49a0041544193ad75bf1e552b7ceda.png#clientId=u612f459d-1d89-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=400&id=uca2a3d38&margin=[object Object]&name=image.png&originHeight=680&originWidth=946&originalType=binary&ratio=1&rotation=0&showTitle=false&size=142046&status=done&style=none&taskId=ude2acc2e-223b-475c-9a0d-823e89fe432&title=&width=556)

grid-template-areas

一个区域由单个或多个单元格组成,由你决定(具体使用,需要在项目属性里面设置)
区域不需要利用,则使用"点"(.)表示
区域的命名会影响到网格线。每个区域的起始网格线,
会自动命名为区域名-start,终止网格线自动命名为区
域名-end

eg:

grid-template-areas: 'a . c'
'd . f'
'g . i';

效果:
![image.png](https://img-blog.csdnimg.cn/img_convert/023952ccd0d5ae62f7df4486862ed624.png#clientId=u612f459d-1d89-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=404&id=u0df3d423&margin=[object Object]&name=image.png&originHeight=692&originWidth=948&originalType=binary&ratio=1&rotation=0&showTitle=false&size=85722&status=done&style=none&taskId=u88f93c85-d799-4244-979c-e8649781dfa&title=&width=553)

grid-auto-flow

划分网格以后,容器的子元素会按照顺序,自动放置在每一个网格。默认的放置顺序是“先行后列”,即先填满第一行,再开始放入第二行(就是子元素的排放顺序)

eg:

//先行后列
grid-auto-flow: row; 

效果:
![image.png](https://img-blog.csdnimg.cn/img_convert/d3abee8674b8ba560b6905883d77672b.png#clientId=u612f459d-1d89-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=341&id=u265175f2&margin=[object Object]&name=image.png&originHeight=682&originWidth=944&originalType=binary&ratio=1&rotation=0&showTitle=false&size=85157&status=done&style=none&taskId=u0d797a38-098b-4174-9df6-8ee65354d94&title=&width=472)

eg:

//先列后行
grid-auto-flow: column

效果:
![image.png](https://img-blog.csdnimg.cn/img_convert/3ba0c38d97056d60ff100d0838bd015c.png#clientId=u612f459d-1d89-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=338&id=u9b9e44a3&margin=[object Object]&name=image.png&originHeight=675&originWidth=1033&originalType=binary&ratio=1&rotation=0&showTitle=false&size=108532&status=done&style=none&taskId=u0746f04f-ffc3-4a46-a38b-994797eff49&title=&width=516.5)

![image.png](https://img-blog.csdnimg.cn/img_convert/3837fdf470d0eeeb5894a470c976af8d.png#clientId=u612f459d-1d89-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=322&id=u91fea54e&margin=[object Object]&name=image.png&originHeight=539&originWidth=979&originalType=binary&ratio=1&rotation=0&showTitle=false&size=54076&status=done&style=none&taskId=u560feccc-619b-479d-a1ba-ef5cbed7572&title=&width=584.5)

justify-items(水平方向)和align-items(垂直方向)

设置单元格内容的水平和垂直的对齐方式
justify-items:start | end | center | stretch
align-items:start | end | center | stretch;

![image.png](https://img-blog.csdnimg.cn/img_convert/bef8da16588cf22a0997f0c053982567.png#clientId=u612f459d-1d89-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=401&id=uc45c7521&margin=[object Object]&name=image.png&originHeight=707&originWidth=1226&originalType=binary&ratio=1&rotation=0&showTitle=false&size=154247&status=done&style=none&taskId=ucab6339a-c2aa-4676-80d6-1dbcdb5b440&title=&width=696)
![image.png](https://img-blog.csdnimg.cn/img_convert/775f21a11c6935a3de289c6a69f2eb95.png#clientId=u612f459d-1d89-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=440&id=u0116ea7a&margin=[object Object]&name=image.png&originHeight=679&originWidth=1068&originalType=binary&ratio=1&rotation=0&showTitle=false&size=145653&status=done&style=none&taskId=ue83c4eb6-5692-47bb-b57d-91b99f73d88&title=&width=692)
![image.png](https://img-blog.csdnimg.cn/img_convert/27a93e5d53bbeed6dc1f72a0dbc4d1ca.png#clientId=u612f459d-1d89-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=481&id=u7bbb2c76&margin=[object Object]&name=image.png&originHeight=689&originWidth=992&originalType=binary&ratio=1&rotation=0&showTitle=false&size=141920&status=done&style=none&taskId=u7c6a91be-8e92-4c6d-a408-712462490ad&title=&width=692)
![image.png](https://img-blog.csdnimg.cn/img_convert/4bf75bbdcb05074582ff5cb702fd5bb5.png#clientId=u612f459d-1d89-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=485&id=uf559d3de&margin=[object Object]&name=image.png&originHeight=693&originWidth=994&originalType=binary&ratio=1&rotation=0&showTitle=false&size=140412&status=done&style=none&taskId=u0c28f40b-5a8b-421e-a6a1-48d9889e6be&title=&width=695)
![image.png](https://img-blog.csdnimg.cn/img_convert/3545c8cfced083410741f374cc8ba378.png#clientId=u612f459d-1d89-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=492&id=u556059c5&margin=[object Object]&name=image.png&originHeight=683&originWidth=961&originalType=binary&ratio=1&rotation=0&showTitle=false&size=135492&status=done&style=none&taskId=u36ba93cd-67a5-44be-a48f-a7a5435f044&title=&width=692.5)
![image.png](https://img-blog.csdnimg.cn/img_convert/d0918ba638d7a1d3379a933ac58ac970.png#clientId=u612f459d-1d89-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=485&id=u0920799a&margin=[object Object]&name=image.png&originHeight=680&originWidth=976&originalType=binary&ratio=1&rotation=0&showTitle=false&size=134860&status=done&style=none&taskId=ua7892b41-1640-4ef9-988b-1959686fec0&title=&width=696)
![image.png](https://img-blog.csdnimg.cn/img_convert/15dc2ff3d4df276af890a7f3cb9a1859.png#clientId=u612f459d-1d89-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=499&id=ud110ff28&margin=[object Object]&name=image.png&originHeight=674&originWidth=945&originalType=binary&ratio=1&rotation=0&showTitle=false&size=134740&status=done&style=none&taskId=u4c21ae5e-e1d7-415f-ba6d-9426b49e435&title=&width=699.5)
![image.png](https://img-blog.csdnimg.cn/img_convert/5ebae1f5848730a3bfefcc50bb123659.png#clientId=u612f459d-1d89-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=510&id=u651044a4&margin=[object Object]&name=image.png&originHeight=690&originWidth=953&originalType=binary&ratio=1&rotation=0&showTitle=false&size=137261&status=done&style=none&taskId=ud7e00237-73ed-4f34-99e7-062fc3fe8a5&title=&width=704.5)

justify-content(水平方向)和align-content(垂直方向)

设置整个内容区域的水平和垂直的对齐方式
justify-content:start | end | center | stretch | space-around | space-between | space-evenly;
align-content:start | end | center | stretch | space-around | space-between | space-evenly;

![image.png](https://img-blog.csdnimg.cn/img_convert/fa3a7a4081ca80e97c289fd890a3d652.png#clientId=u612f459d-1d89-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=488&id=u5c614c2d&margin=[object Object]&name=image.png&originHeight=719&originWidth=1015&originalType=binary&ratio=1&rotation=0&showTitle=false&size=141358&status=done&style=none&taskId=u44ce2771-adf2-48b8-b699-92672cda328&title=&width=688.5)![image.png](https://img-blog.csdnimg.cn/img_convert/977995ff6e15c893ceffb5f0df9ea5fc.png#clientId=u612f459d-1d89-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=354&id=u6fdf862f&margin=[object Object]&name=image.png&originHeight=708&originWidth=1402&originalType=binary&ratio=1&rotation=0&showTitle=false&size=116739&status=done&style=none&taskId=u380c3aec-297f-424f-a705-3ebb3335fd8&title=&width=701)
![image.png](https://img-blog.csdnimg.cn/img_convert/708b55b485c2cd33832152ceb07bd66c.png#clientId=u612f459d-1d89-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=576&id=u235bf437&margin=[object Object]&name=image.png&originHeight=771&originWidth=958&originalType=binary&ratio=1&rotation=0&showTitle=false&size=145254&status=done&style=none&taskId=u0e1171b1-ecca-4c70-a799-40c690f6bd0&title=&width=716)
![image.png](https://img-blog.csdnimg.cn/img_convert/14beda9d5d092298f7df2629a5f8eb4f.png#clientId=u612f459d-1d89-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=585&id=u58561892&margin=[object Object]&name=image.png&originHeight=907&originWidth=1095&originalType=binary&ratio=1&rotation=0&showTitle=false&size=237057&status=done&style=none&taskId=u03ccb319-af8c-428b-a5ad-c6f5ba4ce99&title=&width=706.5)

grid-auto-columns/grid-auto-rows

用来设置多出来的项目宽和高
我只设置了3x3个项目,但是实际有10个,整个属性就是用来设置多出来的项目

![image.png](https://img-blog.csdnimg.cn/img_convert/72aec0dcd8a80019c12ac5540ff89782.png#clientId=u612f459d-1d89-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=460&id=u662ecc97&margin=[object Object]&name=image.png&originHeight=629&originWidth=993&originalType=binary&ratio=1&rotation=0&showTitle=false&size=104831&status=done&style=none&taskId=ub84a8090-fc9d-417a-bced-f63dcd8aad6&title=&width=726.5)

项目属性

  • grid-column-start
  • grid-column-end
  • grid-row-start
  • grid-row-end
  • grid-column (1和2的简写形式)
  • grid-row (3和4的简写形式)
  • grid-area
  • justify-self
  • align-self
  • place-self(8和9的简写形式)
grid-column-start/grid-column-end/grid-row-start/grid-row-end

一句话解释,用来指定item的具体位置,根据在哪根网格线
列方向4根网格线,第一个项目占用了从第一根到第三根

![image.png](https://img-blog.csdnimg.cn/img_convert/ea83ce935104d7bc017f213220aacfac.png#clientId=u612f459d-1d89-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=406&id=uac4fd28b&margin=[object Object]&name=image.png&originHeight=701&originWidth=1180&originalType=binary&ratio=1&rotation=0&showTitle=false&size=183500&status=done&style=none&taskId=ue8c565de-e298-446f-adca-38993dfaa4a&title=&width=684)
![image.png](https://img-blog.csdnimg.cn/img_convert/005a5592327f8241d884a042c821e189.png#clientId=u612f459d-1d89-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=377&id=u52812f85&margin=[object Object]&name=image.png&originHeight=711&originWidth=1353&originalType=binary&ratio=1&rotation=0&showTitle=false&size=221692&status=done&style=none&taskId=u6cf68504-a911-49c5-87f8-e2848998a38&title=&width=717.5)

grid-column/grid-row

grid-column属性是grid-column-start和grid-column-end的合并简写形式
grid-row属性是grid-row-start属性和grid-row-end的合并简写形式

eg:

//将
.item-1 {
  grid-column-start: 1;
  grid-column-end: 3;
  grid-row-start: 2;
  grid-row-end: 4;
}
//可简写为
.item-1 {
  grid-column: 1 / 3;
  grid-row: 2 / 4;
}

效果:

![image.png](https://img-blog.csdnimg.cn/img_convert/201e72b11323fd92c70be4834fd9d1c4.png#clientId=u612f459d-1d89-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=496&id=ua0c179f1&margin=[object Object]&name=image.png&originHeight=704&originWidth=984&originalType=binary&ratio=1&rotation=0&showTitle=false&size=133200&status=done&style=none&taskId=ube9bb4e1-a45e-4141-81dc-1421c9e5310&title=&width=693)

grid-area

指定项目放在哪一个区域
grid-area属性还可用作grid-row-start、grid-column-start、grid-row-end、grid-column-end的合并简写形式,直接指定项目的位置
grid-area: / / / ;

![image.png](https://img-blog.csdnimg.cn/img_convert/8413f4cd9d0fbfc748df3e1882e3ba38.png#clientId=u612f459d-1d89-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=424&id=u451ea6d4&margin=[object Object]&name=image.png&originHeight=659&originWidth=1199&originalType=binary&ratio=1&rotation=0&showTitle=false&size=162731&status=done&style=none&taskId=uc1cf3efb-12ea-466f-815b-d28e8186224&title=&width=771.5)

eg:

//将
grid-column-start: 1;
grid-column-end: 3;
grid-row-start: 2;
grid-row-end: 4;
//kejianxiew
grid-area: 1 / 3 / 2 / 4;
justify-self/align-self/place-self

justify-self属性设置单元格内容的水平位置(左中右),跟justify-items属性的用法完全一致,但只作用于单个项目(水平方向)
align-self属性设置单元格内容的垂直位置(上中下),跟align-items属性的用法完全一致,也是只作用于单个项目(垂直方向)
justify-self:start | end | center | stretch;
align-self:start | end | center | stretch;
place-self属性是align-self属性和justify-self属性的合并简写形式place-self:centercenter;

![image.png](https://img-blog.csdnimg.cn/img_convert/577a87db10b02cc6b1fc769ac3e66870.png#clientId=u612f459d-1d89-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=483&id=u6ab8f9fc&margin=[object Object]&name=image.png&originHeight=700&originWidth=1031&originalType=binary&ratio=1&rotation=0&showTitle=false&size=148328&status=done&style=none&taskId=u66e78c68-ee22-4ac9-9512-e12c4e7503e&title=&width=711.5)

![image.png](https://img-blog.csdnimg.cn/img_convert/2ac961d7fea127c1bb1f541c866799e2.png#clientId=u612f459d-1d89-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=500&id=ub145be4f&margin=[object Object]&name=image.png&originHeight=699&originWidth=990&originalType=binary&ratio=1&rotation=0&showTitle=false&size=141573&status=done&style=none&taskId=u704df25d-e7a0-42f8-9580-bdd6b101d85&title=&width=708)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呐呐呐呐。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值