当前位置: 首页 > news >正文

grid布局基本概念

网格容器

  • 通过在元素上声明display:griddisplay: inline-grid来创建一个网格容器,设定后该元素的所有直系子元素将成为网格元素
<div class="wrapper">
   <div>One</div>
   <div>Two</div>
   <div>Three</div>
   <div>Four</div>
   <div>Five</div>
   <div>Six</div>
</div>
.wrapper {
    display: grid;
}
复制代码

网格轨道

  • 我们通过grid-template-columnsgrid-template-rows属性来定义网格中的列和行;一个网格轨道就是网格中任意两条线之间的空间。
  • grid-template-columns: 定义网格中的列
  • grid-template-rows: 定义网格中行

fr单位

  • 网格引入了新的长度单位fr; fr单位代表网格容器中可用空间的一部分,轨道会随着可用空间增长和收缩。
<div class="wrapper">
   <div>One</div>
   <div>Two</div>
   <div>Three</div>
   <div>Four</div>
   <div>Five</div>
   <div>Six</div>
</div>
.wrapper {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
}
复制代码

使用repeat()

  • 有着多轨道的大型网格可使用repeat() 标记来重复部分或整个轨道列表
.wrapper {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
}
//也可写成
.wrapper {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
}

复制代码
  • repeat语句可以用于重复轨道列表中的一部分
//起始轨道为100像素,接着重复了4个1fr的轨道,最后再添加了一个100像素的轨道
.wraper {
    display: grid;
    grid-template-columns: 100px repeat(4, 1fr) 100px;
}

复制代码
  • repeat语句可以传入一个轨道列表,因此你可以用它来创建一个多轨道模式的重复轨道列表。
//网格将有共计10个轨道,为1个1fr轨道后面跟着1个2fr轨道,该模式重复5次。
.wrapper {
    display: grid;
    grid-template-columns: repeat(5,1fr,2fr);
}

复制代码

隐式和显式网格

  • 使用grid-template-columnsgrid-template-rows属于定义的是显示网格的行和列;
  • 如果你在网格定义之外又放了一些东西,或者因为内容的数量而需要的更多网格轨道的时候,网格将会在隐式网格中创建行和列。按照默认,这些轨道将自动定义尺寸,所以会根据它里面的内容改变尺寸。
  • 在隐式网格中用 grid-auto-rows 和 grid-auto-columns 属性来定义一个设置大小尺寸的轨道。
//用 grid-auto-rows 属性来确保在隐式网格中创建的轨道是200像素高
.wrapper {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    grid-auto-rows: 200px;
}
复制代码
  • 定义的显示网格尺寸优先级大于定义的隐式网格尺寸
//轨道高250px
.wrapper {
    display: grid;
    grid-template-columns: repeat(3,1fr);
    grid-template-rows: repeat(4, 250px); //优先级更高
    grid-auto-rows: 200px;
}
复制代码

轨道大小和minmax()

  • 用minmax()函数可以给网格一个最小的尺寸,确保他们能扩大到容纳他里面添加的内容,同时也不限定死最大高度,网格可以随着内容延伸。
//自动创建的行高将会是最小100像素,最大为auto。用auto意味着行的尺寸将会根据内容的大小来自动变换:根据本行中最高的单元,把空间扩展到足够容纳该单元。
.wrapper {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    grid-auto-rows: minmax(100px,auto);
}
复制代码

网格线

  • 当我们定义网格时,我们定义的是网格轨道,而不是网格线;grid会为我们创建编号的网格线来让我们定位每一个网格元素,例如下面这个三列两行网格中就拥有四条纵向的网格线
  • 网格线的编号顺序取决于文章的书写模式,在从左至右书写的语言中,编号为 1 的网格线位于最左边。

跨轨道放置网格元素

  • grid-column-start: 网格列线开始编号
  • grid-column-end: 网格列线结束编号
  • grid-row-start: 网格行线开始编号
  • grid-row-end: 网格行线结束编号

网格单元

  • 一个网格单元是在一个网格元素中最小的单位, 从概念上来讲其实它和表格的一个单元格很像

网格区域

  • 网格元素可以向行或者列的方向扩展一个或多个单元,并且会创建一个网格区域;网格区域的形状应该是一个矩形,也就是说你不可能创建出一个类似于“L”形的网格区域

网格间距

  • 在两个网格单元之间的 网格横向间距 或 网格纵向间距 可使用grid-column-gapgrid-row-gap属性来创建;
  • 间距只出现在网格轨道与轨道之间,它们并不会出现在网格容器的四周;
  • 间距使用的空间会在 使用弹性长度fr的轨道的空间计算前就被留出来,间距的尺寸定义行为和普通轨道一致,但不同的是你不能向其中插入任何内容。从以基线定位的角度来说,间距就像一条很宽的基线。

网格间距缩写

  • 这两个属性可以用grid-gap简写。如果你只给出一个值,那这个值会同时应用于行间距和列间距。如果你给了两个值,第一个会被用于grid-row-gap,第二个则会被用于grid-column-gap
  • grid-gap: 10px 20px:先是行间距后是列间距
.wrapper {
     display: grid;
     grid-template-columns: repeat(3, 1fr);
     grid-template-rows: repeat(3, 100px);
     grid-gap: 1em 20px;
}
复制代码

嵌套网格

  • 一个网格元素可以也成为一个网格容器,嵌套网格和他的父级并没有关系
  • 当元素不是网格容器的直接子级元素时,它们不会参与到网格布局中,并显示为正常的文档流

使用z-index控制层级

  • 多个网格项目可以占用同一个网格单位,使用z-index属性控制重叠的顺序,z-index越大层级越高

网格布局结合弹性布局

  • 当抉择该用网格还是弹性盒时,你可以问自己一个简单的问题
    • 我只需要按行或者列控制布局?那就用弹性盒子
    • 我需要同时按行和列控制布局?那就用网格

转载于:https://juejin.im/post/5c88ac9e6fb9a049ba426eb1

相关文章:

  • 论网站经营对一个企业的重要性
  • 持续交付基金会成立!Jenkins,Spinnaker等为首批捐赠项目
  • luogu P2634 [国家集训队]聪聪可可 点分治
  • link和@import的区别是什么 ?
  • 乞丐版的全栈实践
  • DRF教程1-序列化
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • 一个iOS开发者的Flutter“历险记”
  • 12. 掌握Dart最基础的导包操作
  • 魔鬼存在于细节中:从Redshift迁移到ClickHouse后再无数据丢失
  • [2019.3.20]BZOJ4573 [Zjoi2016]大森林
  • JQuery知识总结之选择器
  • 读书之法,在循序而渐进,熟读而精思。
  • REdis CPU百分百问题分析
  • abp 关于service 服务的定义
  • bootstrap创建登录注册页面
  • const let
  • Druid 在有赞的实践
  • JavaScript DOM 10 - 滚动
  • Making An Indicator With Pure CSS
  • Meteor的表单提交:Form
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • python学习笔记-类对象的信息
  • underscore源码剖析之整体架构
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 关于使用markdown的方法(引自CSDN教程)
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 用mpvue开发微信小程序
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • 《天龙八部3D》Unity技术方案揭秘
  • 容器镜像
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • #每天一道面试题# 什么是MySQL的回表查询
  • (1)STL算法之遍历容器
  • (C++)八皇后问题
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (八)Spring源码解析:Spring MVC
  • (八十八)VFL语言初步 - 实现布局
  • (笔试题)分解质因式
  • (三)Honghu Cloud云架构一定时调度平台
  • (算法设计与分析)第一章算法概述-习题
  • (循环依赖问题)学习spring的第九天
  • .net core 连接数据库,通过数据库生成Modell
  • .NET Micro Framework初体验
  • .Net Remoting(分离服务程序实现) - Part.3
  • .Net中的集合
  • @property @synthesize @dynamic 及相关属性作用探究
  • [ Linux 长征路第五篇 ] make/Makefile Linux项目自动化创建工具
  • [2016.7 test.5] T1
  • [202209]mysql8.0 双主集群搭建 亲测可用
  • [AutoSar NVM] 存储架构