Grid网格布局详解:

Grid布局与Flex布局有着一定的相似性,Grid布局是将容器划分成行和列,产生单元格,可以看做是二维布局。

基本概念:

采用网格布局的区域,称为"容器"(container)。容器内部采用网格定位的子元素,称为"项目"(item)

<div>
<div><p>1</p></div>
<div><p>2</p></div>
<div><p>3</p></div>
</div>

上面代码中,最外层的<div>元素就是容器,内层的三个<div>元素就是项目。

注意:项目只能是容器的顶层子元素,不包含项目的子元素,比如上面代码的<p>元素就不是项目。Grid 布局只对项目生效。

2 行和列:

容器里面的水平区域称为行,垂直区域称为列。

行和列交叉的区域,称之为单元格。

通常情况下 n 行 m 列 会产生 n * m 个单元格。

3 网格线 ,划分网格的线称之为网格线。 正常情况下 n 行有 n+1根水平网格线,m列有m+1根垂直网格线。

容器属性:

div{
display:grid;
}

指定一个容器采用网格布局。 默认情况下,容器元素都是块级元素,但也可以设成行内元素。

div{
display:inline-grid;
}

注意,设为网格布局以后,容器子元素(项目)的floatdisplay: inline-blockdisplay: table-cellvertical-aligncolumn-*等设置都将失效。

4 容器指定了网格布局以后,接着就要划分行和列。

grid-template-columns属性定义每一列的列宽。

grid-template-rows属性定义每一行的行高。

eg:

.container {
display: grid;
grid-template-columns: 100px 100px 100px;
grid-template-rows: 100px 100px 100px;
}

上述代码指定了一个三行三列的网格,列宽和行高都是100px。

除了使用px为单位,也可以指定百分比为单位。

eg:

.container {
display: grid;
grid-template-columns: 33.33% 33.33% 33.33%;
grid-template-rows: 33.33% 33.33% 33.33%;
}

(1) 属性一: repeat()

有时候重复写同样的值很麻烦,尤其当网格比较多时,这时可以使用repeat()函数,简化重复的值。

repeat()接收两个参数,第一个是参数重复的次数,第二个参数是要重复的值

eg:

.container {
display: grid;
grid-template-columns: repeat(3, 33.33%);
grid-template-rows: repeat(3, 33.33%);
}

上述的示例如图所示。

repeat()重复某种模式也可以。 例: grid-template-columns:repeat(2, 100px,20px,80px).

上面代码定义了6列,第一列和第四列的宽度为100px,第二列和第五列为20px,第三列和第六列为80px。

(2)属性二: auto-fill()关键字:有时单元格的大小是固定的,但容器的大小不固定,为了能够使每一行或者每一列能够容纳更多的单元格可以使用auto-fill关键字表示自动填充。

eg:

.container {
display: grid;
grid-template-columns: repeat(auto-fill, 100px);
}
表示每列宽度100px,自动填充,直到容器不能够放置更多的列。

(3) fr关键字:

如果两列的宽度分别为1fr 和 2 fr 表示后者是前者宽度的两倍。

eg:

.container {
display: grid;
grid-template-columns: 1fr 1fr;
}
// 上述表示两个宽度相同的列。

注:fr 可以和绝对长度的单位结合使用,十分便捷。

eg:

.container {
display: grid;
grid-template-columns: 150px 1fr 2fr;
}

上述表示第一列的宽度为150px,第三列的宽度是第二列的两倍。

(4) minmax()关键字:

该函数会产生一个长度范围,表示长度就在这个范围之中,接受两个参数,分别为最大值和最小值。

eg:

grid-template-columns: 1fr 1fr minmax(100px, 1fr);

上述代码中,minmax(100px,fr) 表示列宽不小于100px,不大于1fr。

(5)auto关键字:表示由浏览器自己决定长度。

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

上面代码中,第二列的宽度,基本上等于该列单元格的最大宽度,除非单元格内容设置了min-width,且这个值大于最大宽度。

(6) 网格线的名称:

在行和列属性设置时,可以使用方括号指定每一根网格线的名称,方便以后引用。

eg:

.container {
display: grid;
grid-template-columns: [c1] 100px [c2] 100px [c3] auto [c4];
grid-template-rows: [r1] 100px [r2] 100px [r3] auto [r4];
}

上述中4 根垂直网格线的名称分别为: c1 c2 c3 c4. 4根水平网格线的名称为 r1 r2 r3 r4。

注:网格布局允许同一根线有多根名字。

布局实例:

1 传统的两栏式布局: 

eg:

.wrapper {
display: grid;
grid-template-columns: 70% 30%;
}
// 左栏设置为70% 右栏设置为 30%。

传统的十二网格布局:

eg:

grid-template-columns: repeat(12, 1fr);

三: grid-row-gap 和 grid-column-gap 以及 grid-gap属性。

grid-row-gap 属性设置行与行的间隔(间距)。

grid-column-gap 属性设置列与列的间隔(间距)。

eg:

.container {
grid-row-gap: 20px; //行间距
grid-column-gap: 20px; // 列间距
}

grid-gap属性是grid-column-gapgrid-row-gap的合并简写形式,语法如下:

grid-gap: <grid-row-gap> <grid-column-gap>;

上述等价于:

eg:

.container {
grid-gap: 20px 20px;
}

若省略第二个值,浏览器认为第二个值等于第一个值。

根据最新标准,上面三个属性名的grid-前缀已经删除,grid-column-gapgrid-row-gap写成column-gaprow-gapgrid-gap写成gap

详细的属性请参考:http://www.ruanyifeng.com/blog/2019/03/grid-layout-tutorial.html

Grid 网格布局详解的更多相关文章

  1. Android开发重点难点1:RelativeLayout(相对布局)详解

    前言 啦啦啦~博主又推出了一个新的系列啦~ 之前的Android开发系列主要以完成实验的过程为主,经常会综合许多知识来写,所以难免会有知识点的交杂,给人一种混乱的感觉. 所以博主推出“重点难点”系列, ...

  2. 【翻译】Anatomy of a Program in Memory—剖析内存中的一个程序(进程的虚拟存储器映像布局详解)

    [翻译]Anatomy of a Program in Memory—剖析内存中的一个程序(进程的虚拟存储器映像布局详解) . . .

  3. Android布局详解之一:FrameLayout

      原创文章,如有转载,请注明出处:http://blog.csdn.net/yihui823/article/details/6702273 FrameLayout是最简单的布局了.所有放在布局里的 ...

  4. Android 布局详解

    Android 布局详解 1.重用布局 当一个布局文件被多处使用时,最好<include>标签来重用布局. 例如:workspace_screen.xml的布局文件,在另一个布局文件中被重 ...

  5. CSS Grid 网格布局全解析

    介绍 CSS Grid(网格) 布局使我们能够比以往任何时候都可以更灵活构建和控制自定义网格. Grid(网格) 布局使我们能够将网页分成具有简单属性的行和列.它还能使我们在不改变任何HTML的情况下 ...

  6. DevExpress控件GridControl中的布局详解 【转】

    DevExpress控件GridControl中的布局详解 [转] 2012-10-24 13:27:28|  分类: devexpress |  标签:devexpress  |举报|字号 订阅   ...

  7. python之tkinter使用-Grid(网格)布局管理器

    # 使用tkinter编写登录窗口 # Grid(网格)布局管理器会将控件放置到一个二维的表格里,主控件被分割为一系列的行和列 # stricky设置对齐方式,参数N/S/W/E分别表示上.下.左.右 ...

  8. Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)

    [Android布局学习系列]   1.Android 布局学习之——Layout(布局)详解一   2.Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)   3.And ...

  9. 【转载】图说C++对象模型:对象内存布局详解

    原文: 图说C++对象模型:对象内存布局详解 正文 回到顶部 0.前言 文章较长,而且内容相对来说比较枯燥,希望对C++对象的内存布局.虚表指针.虚基类指针等有深入了解的朋友可以慢慢看.本文的结论都在 ...

随机推荐

  1. xml editing in vi

    Auto complete tags xmledit installation: git clone https://github.com/sukima/xmledit.git, then make ...

  2. 基于ScheduledExecutorService的并发定时任务处理能力测试

    测试代码 定时器类 package business.util; import java.util.concurrent.Executors; import java.util.concurrent. ...

  3. Alibaba-技术专区-RocketMQ 延迟消息实现原理和源码分析

    痛点背景 业务场景 假设有这么一个需求,用户下单后如果30分钟未支付,则该订单需要被关闭.你会怎么做? 之前方案 最简单的做法,可以服务端启动个定时器,隔个几秒扫描数据库中待支付的订单,如果(当前时间 ...

  4. Typora使用Gitee图床

    前言 现在比较流行的Markdown编辑器应该是Typora,但是Typora本身不支持本地上传图片的云端存储,所以当我们写博客的时候,需要上传图片,就得自己设置图床,今天给大家推荐一款免费的图床-G ...

  5. 002 PCI Express体系结构(二)

    一.PCI总线的信号定义 PCI总线是一条共享总线,在一条PCI总线上可以挂接多个PCI设备.这些PCI设备通过一系列信号与PCI总线相连,这些信号由地址/数据信号.控制信号.仲裁信号.中断信号等多种 ...

  6. NOIP 模拟 $20\; \rm 玩具$

    题解 \(by\;zj\varphi\) 一道概率与期望好题 对于一棵树,去掉根后所有子树就是一个森林,同理,一个森林加一个根就是一棵树 设 \(f_{i,j}\) 为有 \(i\) 个点的树,高度为 ...

  7. JavaWeb学习笔记(四)

    本文内容 1. 会话技术 1. Cookie 2. Session 2. JSP:入门学习 会话技术 1. 会话:一次会话中包含多次请求和响应. * 一次会话:浏览器第一次给服务器资源发送请求,会话建 ...

  8. AspNetCore WebApi

    需求 前几天,马老板给小明和小红一个"待办事项"网站,小明负责后端,小红负责前端,并要求网站可以同时在 Windows.和 Linux 上运行. 小明整理了一下"待办事项 ...

  9. WPF 饼状图,柱形图,折线图 (2 折线图)

    折线图在柱形图的基础上,做了一些修改.大概效果和用法如下. X轴和Y轴的刻度,使用用了Path的Figures属性,绘制多条Figure+LineSegment完成. 同时,由于折线图很可能会画多条线 ...

  10. Redis5.0 配置文件中文参考

    Redis 5.0 配置文件#是否在后台执行,yes:后台运行:no:不是后台运行daemonize yes#是否开启保护模式,默认开启.要是配置里没有指定bind和密码.开启该参数后,redis只会 ...