Grid是砖墙式版面,使用二维的排版方式,与flexbox不同的地方是Grid一次可以控制水平及垂直方向。Grid像是美工软件,有许多参考线帮助你定位,要将元素设定相同大小、间距的排列都可以使用Grid制作。
Grid是由父元素(Grid Container)和子元素(Grid items)组成。子元素之间的空隙,为格线间距(Grid gap)。
目前浏览器支援较新版本的浏览器,想看浏览器支援可以到 can i use 网站
display: grid/inline-grid
grid-template-columns:定义容器有多少栏;grid-template-rows:定义容器有多少列
要制作一个 4x3 的容器可以这样写,每个区块的宽度为auto(适萤幕宽度大小来决定),高度为100px
<div class="grid-container">
<div class="item1">1</div>
<div class="item2">2</div>
<div class="item3">3</div>
<div class="item4">4</div>
<div class="item5">5</div>
<div class="item6">6</div>
<div class="item7">7</div>
<div class="item8">8</div>
<div class="item9">9</div>
<div class="item10">10</div>
<div class="item11">11</div>
<div class="item12">12</div>
</div>
.grid-container {
display: grid;
grid-template-columns: auto auto auto auto;
grid-template-rows: 100px 100px 100px;
grid-gap: 10px;
background-color: #2196F3;
padding: 10px;
}
.grid-container > div {
background-color: #d7ebfd;
text-align: center;
padding: 20px 0;
}
fr为fraction比例的缩写,会依照画面宽度比例伸缩。
.grid-container {
display: grid;
grid-template-columns: 1fr 2fr 2fr 1fr;
}
一个长度范围。minmax(最小值, 最大值)
范例中,minmax(100px, 1fr)表示宽度不小於100px,不大於1fr。
.grid-container {
display: grid;
grid-template-columns: 1fr 2fr minmax(100px, 1fr) 1fr;
}
自动设定项目尺寸
像是px, %...
可以不用重复写一样的设定
.grid-container {
display: grid;
grid-template-columns: repeat(5,1fr);
}
.grid-container {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
}
auto-fit会将後面表格合并成一个
.grid-container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
}
grid-template-areas用来定义每个单元格的名称,可以使用grid-area
指定名称跟放置位置
<div class="grid-container">
<div class="item1">header</div>
<div class="item2">sider</div>
<div class="item3">main</div>
<div class="item4">footer</div>
</div>
指定区域名称,当不使用该区域时,可以使用点 . (点)来略过。
.grid-container {
display: grid;
grid-template-columns: repeat(3,1fr);
grid-template-rows: 80px 300px 50px;
grid-template-areas: "header header header"
"sider main main"
"sider footer ."
}
.item1{
background-color: #00bcd4;
grid-area: header;
}
.item2{
background-color: #ffc107;
grid-area: sider;
}
.item3{
background-color: #cddc39;
grid-area: main;
}
.item4{
background-color: #607d8b;
grid-area: footer;
}
.grid-container {
display: grid;
grid-template-columns: repeat(3, auto);
grid-template-rows: repeat(2, auto);
grid-auto-flow: row;
}
.grid-container {
display: grid;
grid-template-columns: repeat(3, auto);
grid-template-rows: repeat(2, auto);
grid-auto-flow: column;
}
第三区块比较大,如果止血grid-auto-flow:row,就会有空缺
将grid-auto-flow改为row dense,第四区块就会去填补空缺
.grid-container {
display: grid;
grid-template-columns: repeat(3, auto);
grid-template-rows: repeat(2, auto);
grid-gap: 5px;
background-color: #2196F3;
padding: 10px;
grid-auto-flow:row dense;
}
.item3 {
grid-column: auto / span 2;
}
第二区块起始位置从第三区块开始,他前面就有一个空缺
.grid-container {
display: grid;
grid-template-columns: repeat(3, auto);
grid-template-rows: repeat(2, auto);
grid-gap: 5px;
background-color: #2196F3;
padding: 10px;
grid-auto-flow:column;
}
.item2{
grid-row-start:3;
}
所以,在grid-auto-flow改为column dense;第三区块就去补空缺位置
.grid-container {
grid-row-gap:20px;
}
gap: row-gap column-gap
垂直间距:20px 水平间距:10px
.grid-container {
gap: 20px 10px;
}
垂直水平间距相同gap:10px;
.grid-container {
gap: 10px;
}
.item2{
grid-column-start: 3; /* 起始位置从3开始 */
grid-column-end: span 3; /* 跨三区块 */
}
grid-column及grid-row,可以使用斜线 (/) 将起始位置/结束位置隔开,上面的code可以简写成:
.item2{
grid-column: 3 / span 3;
}
方式与flexbox相同
space-around
空白比space-around多介绍完grid的每个样式功能,让我们用一个完整个切版来做整理
步骤一:建立一个并将图片插入html里
<div class="box">
<div class="item">
<img src="img/img2.jpg" alt="">
</div>
<div class="item">
<img src="img/img.jpg" alt="">
</div>
<div class="item">
<img src="img/img3.jpg" alt="">
</div>
<div class="item">
<img src="img/img4.jpg" alt="">
</div>
<div class="item">
<img src="img/img5.jpg" alt="">
</div>
<div class="item">
<img src="img/img6.jpg" alt="">
</div>
<div class="item">
<img src="img/img7.jpg" alt="">
</div>
<div class="item">
<img src="img/img.jpg" alt="">
</div>
<div class="item">
<img src="img/img2.jpg" alt="">
</div>
<div class="item">
<img src="img/img3.jpg" alt="">
</div>
<div class="item">
<img src="img/img4.jpg" alt="">
</div>
<div class="item">
<img src="img/img5.jpg" alt="">
</div>
<div class="item">
<img src="img/img6.jpg" alt="">
</div>
</div>
.box{
max-width: 1000px;
margin: 0 auto;
display: grid;
gap: 10px;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
}
gap设定留白距离
grid-template-columns设定repeat(重复次数),因为图片宽度都一样
auto-fit:让元素依画面宽度自动换行
mixmax(300px, 1fr),表示元素的宽度不会小於300px,并会符合画面缩放
步骤二:图片尺寸不同,用object-fit属性裁切图片
.box img{
height: 100%;
width: 100%;
object-fit: cover;
object-position: center center;
}
步骤三:将第一张图item设定big-box
设定grid-column水平范围的宽度(黄色数字)及grid-row垂直范围的高度(紫色数字),1/3 为开始线/终止线
<div class="box">
<div class="item big-box">
<img src="img/img2.jpg" alt="">
</div>
...
</div>
.big-box{
grid-column: 1/3;
grid-row: 1/3;
}
步骤四:随萤幕装置缩放将big-box grid-column属性及row-column属性设定auto
@media(max-width:414px){
.big-box{
grid-column: auto;
grid-row: auto;
}
}
这样就完成啦~
完整的css样式整理
.box{
max-width: 1000px;
margin: 0 auto;
display: grid;
gap: 10px;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
}
.big-box{
grid-column: 1/3;
grid-row: 1/3;
}
.box img{
height: 100%;
width: 100%;
object-fit: cover;
object-position: center center;
}
@media(max-width:414px){
.big-box{
grid-column: auto;
grid-row: auto;
}
}
资料来源:
https://medium.com/enjoy-life-enjoy-coding/css-所以我说那个版能不能好切一点-grid-基本用法-cd763091cf70
https://developer.mozilla.org/zh-TW/docs/Web/CSS/CSS_Grid_Layout/Basic_Concepts_of_Grid_Layout
>>: [25] 用 python 刷 Leetcode: 155 min-stack
函式会将参数传入函式里面,让它们成为函式里的变数,让程序码去做运算。参数只能在函式里刷存在感(期间...
从资源配置的角度思考 产品经理不一定有人事决定权,但是可以从资源的角度给予建议 这个是一个特别的经历...
前言 经由前几篇文中应该对於全域作用域或嵌套全域作用域有一定的了解,但这仅仅只知道这麽变量是在哪一个...
前言 BMI 作业做得还好吗?不知道你有没有完成,但是这边时间不等人,所以我们就接着聊聊下一个主题吧...
在 Java 的世界中,有很多种 json library 任君挑选,其中最多人使用的应该是 Jac...