grid布局学习

grid网格布局

今天工作清闲时刷到grid布局,之前一直没有关注,趁现在进行记录一下,该文档主要是对翻阅的资料进行整理归纳

实际需求中经常有循环展示数据的情况,以前一直用float,flex等方式,但如果在一些复杂的网页结构中,grid要更加灵活。
对于居中(特别是垂直居中)问题、还有元素的一维分布(一条线上如何分布),用flex再合适不过了。
如果涉及到二维(多行多列)确定的布局,使用Grid。
涉及到响应式的页面元素,使用flex + width百分比宽度简直太好用,因为flex天生的流式布局

发展

grid布局在2010年由Microsoft提出,目前已经成为W3C候选标准,目前还不能用于生产环境,但可以通过设置浏览器来看到效果,在Chrome中地址栏中输入chrome://flags打开浏览器实验网络平台功能,将experimental web platform features设置为enable,这样我们就可以正常使用grid,如果要在项目中使用grid布局,可以安装 css-grid-polyfill

属性

列举一些重要属性
display: grid定义一个网格容器

属性含义属性值
display定义一个网格容器Grid 以块级元素的形式显示;Inline-grid 以内联元素的形式显示;Subgrid 父级网络容器的一个子项,行和列的大小都从父级获取
grid-template-columns网格的行数自定义网格的宽高,单位可以是(px,em,rem,vw,vh,百分比),也可以是网格中自由空间的份数(单位fr);定义网格线的名称,不是必须值,未设定以数字表示
grid-template-rows网格的列数自定义网格的宽高,单位可以是(px,em,rem,vw,vh,百分比),也可以是网格中自由空间的份数(单位fr);定义网格线的名称,不是必须值,未设定以数字表示
grid-column-gap定义网格之间的间距(不包括网格项目到容器边缘的间距)
grid-row-gap定义网格之间的间距(不包括网格项目到容器边缘的间距)

还有一些自适应特性
fraction单位,fraction单位通常简写为fr,它允许你根据需要将容器拆分为多个块,例:grid-template-columns: 1fr 1fr 1fr;
repeat()函数,跟踪列表的重复片段,允许大量显示重复模式的列或行以更紧凑的形式编写。见下方九宫格实例
fit-content(), 内容适配,根据公式min(最大大小、最大值(最小大小、参数))将给定大小夹紧为可用大小

.container {
  grid-template-columns: fit-content([ <length> | <percentage> ]);
  grid-template-rows: fit-content([ <length> | <percentage> ]);
}
  • length:一个绝对的长度。
  • percentage:相对于给定轴上可用空间的百分比。

auto-fit

.container {
    display: grid;
    grid-gap: 5px;
    grid-template-columns: repeat(auto-fit, 100px);
    grid-template-rows: repeat(2, 100px);
}

栅格将会根据容器的宽度调整其数量。它会尝试在容器中容纳尽可能多的 100px 宽的列。但如果我们将所有列硬写为 100px,我们将永远没法获得所需的弹性,因为它们很难填充整个宽度。为了解决上述问题,引入
minmax() minmax()函数定义的范围大于或等于 min, 小于或等于 max。

.container {
    display: grid;
    grid-gap: 5px;
    grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
    grid-template-rows: repeat(2, 100px);
}

object-fit: cover 使图片覆盖它的整个容器

实例

经典九宫格
// html
<div class="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>

// css
.container {
  width: 600px;
  height: 600px;
  margin: 0 auto;
	display: grid;
  grid-template-columns: repeat(3, 30%);
  grid-template-rows: repeat(3, 30%);
  grid-column-gap: 20px;
  grid-row-gap: 20px;
}
.container div {
	background: red;
}
圣杯布局
// html
<div class="box">
    <div class="header">header</div>
    <div class="content">
        <div class="left">left</div>
        <div class="center">center</div>
        <div class="right">right</div>
    </div>
    <div class="footer">footer</div>
</div>
// css
.box {
  width: 1200px;
  height: 80vh;
  display: grid;
  grid-template-rows: 10% 80% 10%;
}
 
.header {
  background-color: #6ac13c;
  display: grid;
  /*居中*/
  align-content: center;
  justify-content: center;
}
 
.content {
  width: 80%;
  margin: 0 auto;
  /*background-color: #f1b0b7;*/
  display: grid;
  grid-template-columns: 15% 66% 15%;
  grid-gap: 2%;
}
 
.footer {
  background-color: #ffc107;
  display: grid;
  align-items: center;
  justify-content: center;
}
 
.left {
  background-color: #5599FF;
}
.center {
  background-color: lightgreen;
}
 
.right {
  background-color: orchid;
}
双数组布局
// html
<div class="box">
	<div class="key">aaa</div>
  	<div class="key">bbb</div>
  	<div class="key">ccc</div>
	<div class="key">ddd</div>
	<div class="value">AAA</div>
	<div class="value">BBB</div>
	<div class="value">CCC</div>
	<div class="value">DDD</div>
 </div>
</body>
// css
.box{
  display: grid;
  grid-template-columns: 60px 180px;
  grid-template-rows: auto;
  grid-auto-flow: dense;
}
.key {
  grid-column-start: 1;
  grid-column-end: 2;
  justify-content: end;
}
.value {
  grid-column-start: 2;
  grid-column-end: 3;
  word-wrap: wrap;
  word-break: break-word;
}
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值