【CSS】css grid 布局

快来打我* 2022-05-25 12:05 556阅读 0赞

css grid布局出来很久了,可以翻译成栅栏布局,或者网格布局,看到了一个很好的应用,所以写下此篇基础教程。

比如我们要达到下面这样一个效果要怎么做?

20180514221715251

图中有16个元素,我们要其自适应宽度,按照我们以前的想法肯定是直接通过media,媒体查询来完成这个,但是代码肯定不会简洁,但是我们通过grid 布局只需要几行代码!

代码长这样:

CSS:

#container {

display: grid;

grid-gap: 1em;

grid-template-columns: repeat( auto-fill, minmax( 200px, 1fr) ) ;

}

#container > div {

background-color: skyblue;

height: 200px;

}

HTML:

< div id= “container” >

< div >1 </ div >

< div >2 </ div >

< div >3 </ div >

< div >4 </ div >

< div >5 </ div >

< div >6 </ div >

< div >7 </ div >

< div >8 </ div >

< div >9 </ div >

< div >10 </ div >

< div >11 </ div >

< div >12 </ div >

< div >13 </ div >

< div >14 </ div >

< div >15 </ div >

< div >16 </ div >

</ div >

container的CSS代码display: grid;,基础代码,将container的布局设置为网格布局。

第二句grid-gap: 1em;是简写: grid-column-gap 和 grid-row-gap的简写,顾名思义就是行与行 列与列之间的间距。

第三局grid-template-columns: repeat(auto-fill, minmax(200px, 1fr) ) ;。grid-template-columns是显示网格属性,我们可以用此属性来代替flex布局,暂且记住就是处理列的,将一整行分割为多少列,可以使用这个,这句代码的意思是,一行里面所划分多少个单元格的是自适应的(auto-fill),宽度怎么来定,minmax就是最小值和最大值的写到一起的并称,最小值是200px,最大值是 1fr, fr是什么,是css grid一个新的单位,就可以理解为,将目前水平或者垂直宽度分成多少份的距离,这里1fr 就是container水平宽度/1的距离了,也就是父元素最大宽度了,但是我们是不能直接将一个元素比如第三个div设置一个宽度,然后你会想到后面的就挤下去了,而是需要给第三个div设置 grid-column: auto / span 2 【这一句代码就是当前单元格 从任意列开始,将跨2个单元格,水平占据2个单元格的空间,span就有跨越跨度的意思,这和表格里面的colspan是类似的】。

-—————————————————-

好,我们开始,如何画格子?!

.container {

display: grid;

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

grid-row-gap: 1em;

grid-column-gap: 2em;

}

效果是这样:

70

容器这样设置样式,设置grid-template-columns为3个100px,表示该container下面一行有三列,至于有多少行可以通过 grid-template-rows来设置,比如我们添加下面的css。

grid-template-rows: 100px 200px 300px;

变成了下面这样:

70 1

上面的代码我可以优化一下,通过repeat, 来改成下面这样:

grid-template-columns: repeat( 3, 100px);

实际上这个就等于 100px 重复三次。

重点!!!!

但是grid-template-columns 和repeat经常配合起来使用,就比如文章开头提到的那个效果实现。下面列举了一下常见的用法:

/** 模拟flex布局 将一行分成3列,占比为1:2:1 */

/* grid-template-columns: 1fr 2fr 1fr; */

/** 模拟flex布局 第一列200px 剩余的空间分成2等份,占比为1:2 */

/* grid-template-columns: 200px 1fr 2fr; */

/** 格子自适应排列,每一列的宽度最小200px,最大剩余可用宽度 */

grid-template-columns: repeat( auto-fill, minmax( 200px, 1fr)) ;

/** 自适应按照每个格子210px等分 */

/* grid-template-columns: repeat(auto-fill, 210px); */

/** 第一列和最后一列20px 中间剩余空间分成6分【设置了这个,就不要设置grid-item的最大最小宽度,不然显示错乱,自行尝试】 */

/* grid-template-columns: 20px repeat(6, 1fr) 20px; */

/** 每一行分成6等份,实际就等于grid-template-columes: 1fr 1fr 1fr 1fr 1fr 1fr*/

/* grid-template-columns: repeat(6, 1fr); */

/*** 每一行分成5等份,每一等份分成2份,占比是1:2 */

/* grid-template-columns: repeat(5, 1fr 2fr); */

我们先把grid-template-rows设置为3个100px, 或者将cell div高度设置为100px,然后让第四个div跨两行,可以像下面这样写:

  1. /\*\*方法一\*/
  2. grid-column-start: 1;

grid-column-end : 3 ;

/**方法二*/

grid-column: 1 / 3 ;

/**方法三*/

grid-column: 1 / span 2 ;

/**方法一二三有同样的效果*/

最后的效果是这样:

70 2

如果你想使用grid布局做出更加酷的效果,你也许需要了解一下grid-auto-flow

你也可以点击这个链接和这个链接来查看本文的demo html文件,里面会有一些其他小的扩展。

但是更多的需要自己去探索!

参考: MDN

  1. [ https://medium.freecodecamp.org/how-to-recreate-mediums-article-layout-with-css-grid-b4608792bad1 ][https_medium.freecodecamp.org_how-to-recreate-mediums-article-layout-with-css-grid-b4608792bad1]
  2. [https://medium.com/@patrickbrosset/css-grid-css-multi-columns-7664f59bb60c ][https_medium.freecodecamp.org_how-to-recreate-mediums-article-layout-with-css-grid-b4608792bad1]

发表评论

表情:
评论列表 (有 0 条评论,556人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Grid网格布局

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

    相关 css grid 布局

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

    相关 初涉grid布局

    一直觉得grid 是个离我很遥远的技术,以为兼容性差,直到最近查看了 [caniuse][] 发现其实兼容性已经很好了,本篇文章基于[Wes Bos的grid课程][Wes

    相关 【CSS】css grid 布局

    css grid布局出来很久了,可以翻译成栅栏布局,或者网格布局,看到了一个很好的应用,所以写下此篇基础教程。 比如我们要达到下面这样一个效果要怎么做? ![2018051

    相关 Grid 布局

    这是一篇快速介绍网站未来布局的文章。 ![CSS Grid 布局][CSS Grid] Grid 布局是网站设计的基础,CSS Grid 是创建网格布局最强大和最简单的工具

    相关 css grid网格布局

    初次认识grid布局,看了官方的文档也很明了([官方文档][Link 1]),然后通过自己的语言和理解,重新对他进行了总结。 > 摘要:网格布局是网站设计的基础,CSS网格模