Css Gird网格布局详细介绍
Css Gird网格布局
CSS Grid现在已经被W3C纳入到CSS3的一个布局模块当中,被称为CSS Grid Layout Module。而我们较为熟悉的还是将其想像成网格或者栅格,也就是早期的960gs。不管是网格还是栅格或者现在的CSS Grid Layout Module,我想掌握这些技术对于我们将来在Web项目中实现布局只有好处没有坏处。那么从今天开始我将和大家一起探讨CSS中的网格布局。
为什么我们需要网格布局?
在我们的Web内容中,可以将其分割成很多个内容块,而这些内容块都占据自己的区域(regions),可以将这些区域想像成是一个虚拟的网格。到目前为止,在一个模板中使用不同的结构标签,使用多个浮动和手动计算实现一个布局。这对于Web前端人员来说,这是一件痛苦之事。而网格布局将让你摆脱这样的困局,让你的布局方法变得非常简单与清晰。
网格布局给了我们一种方法——创建的结构与使用表格(table)布局并没有什么不同。然而,他是在CSS中实现而不是在HTML中实现,同时还可以依赖于媒体查询根据不同的上下文得新定义布局。这对于喜欢响应式设计的同学来说是一个绝对利好的消息。因为你不在需要再担心你的HTML结构而影响你的布局。
网格布局还可以让我们摆脱现在布局中存在的文档流限制,换句话说,你的结构不需要根据设计稿从上往上布置了。这也意味着您可以自由地更改页面元素位置。这最适合你在不同的断点位置实现你最需要的布局,而不再需要为响应你的设计而担心HTML结构的问题。
定义一个网格
Grid(网格) 模块为display属性提供了一个新的值:grid 。当你将任何元素的display属性设置为 grid 时,那么这个元素就是一个 网格容器(grid container),它的所有直接子元素就成了 网格项(grid items)。
让我们创建创建一个 3×3 的布局,做一个 Tic-Tac-Toe (井字游戏) 棋盘。
首先,我们将写一些 HTML:
如您所见, .gird div 是网格容器,而 .box div 是网格项。现在我们将通过 Grid 布局来实现 3×3 布局。
在这里,我还使用了其他两个属性。
grid-template-rows 属性允许我们指定网格中的行数及行的高度。那么你应该猜到另一个属性是干什么的了。
grid-template-columns 属性允许我们指定网格中的列数及列的宽度。您可以指定任何单位的尺寸大小,包括像素,百分比和其他单位 fr ,我们将在下一步学习。
fr 单位(等分)
fr 是为网格布局定义的一个新单位。它可以帮助你摆脱计算百分比,并将可用空间等分。
例如,如果在网格容器中设置这个规则: grid-template-rows: 2fr 3fr , 那么你的网格容器将首先被分成 2 行。然后将数字部分加在一起,这里总和为 5, 即 5 等分。
就是说,我们将有 2 行:第一排占据垂直空间的 2/5 。 第二排占垂直空间的 3/5 。
回到我们的 Tic-Tac-Toe 例子,我们使用 fr 代替 px 。我们想要的是,应该有3行3列。所以,我们只需要用 3 个 1fr 替换 3 个 200px 即可:
这里特别需要注意的是:fr单位是等分可用空间,或者说剩余空间。看个例子
布局效果如图:
你会看到 fr 单位是将 总的尺寸 减去 单元格明确尺寸后,在等分剩余空间。
repeat() 函数
在某些情况下,我们可能有很多的列和行。在grid-template属性中指定每一个值可能会很乏味。幸运的是,有一个repeat函数 ,就像任何一个循环重复多少次输出某个给定值。它有两个参数。第一个是迭代次数,第二个是要重复的值。我们用repeat函数重写上面的例子。
等价于
grid-template 属性
grid-template属性是grid-template-rows和grid-template-columns的简写语法。这是它的语法:grid-template: rows/columns;我们上面的例子使用这个简写语法后,看起来非常整齐。
看,只需使用 2 行代码,就可以使用网格布局创建 3×3 网格。
网格线编号,网格单元格,网格轨道
网格线是存在于列和行每一侧的线。一组垂直线将空间垂直划分成列,而另一组水平线将空间水平划分成行。这意味着在我们之前的例子中,有四条垂直线和四条水平线包含它们之间的行和列。
在将网格项从一个位置跨越到另一个位置时,网格线变得非常有用。
网格轨道是两条线之间的空间。 网格轨道可以是一行或一列。
网格单元格很像表格单元,是两条相邻垂直线和两条相邻水平线之间的空间。 这是网格中最小的单位。
• grid-column-start
• grid-column-end
• grid-row-start
• grid-row-end
前两个属性对应于垂直网格线,也就是列网格线的开始和结束。 最后两个属性是指水平网格线,也就是行网格线的开始和结束。
网格区域命名
grid-area属性也可以用来命名网格的某一个部分,然后我们可以用grid-template-areas属性来定位。让我们创建一个简单的bread-and-butter 布局,顶部有一个top, nav,中间有main 和 aside,下面是footer。这是所需的HTML:
我们需要使用grid-area属性来命名每个区域:
现在我们将使用 grid-template-areas 属性来指定每个网格区域所占据的行和列。 以下是我们如何做到的:
请注意,header 和 footer 单词重复三次。这表明,header 和 footer 横跨 3 列的宽度。你可以把它全部写在一行中,但是把每一行写在一个单独的行上很好,很干净。你可以看到我在这里使用了一个新的属性grid-gap。它所做的只是在两个网格区域之间添加一个间距。你也可以使用grid-row-gap和grid-column-gap来为行和列指定不同的间距值。
总结
CSS网格布局允许我们更快地布局,并且更容易控制。在本教程中,我们学习了如何用CSS网格来定义布局,fr单位,在逆战班中还学到了repeat函数和一些网格系统中特定的术语。我们还学习了如何使用网格线和网格命名区域在网格容器内定位网格项目,但由于时间原因暂写了这么多,以后会继续更新,请点点关注,大佬们照顾下小白吧!
Css Gird网格布局详细介绍相关推荐
- CSS Grid 网格布局完整教程
前言 一.概述 二.基本概念 2.1 容器和项目 2.2 行和列 2.3 单元格 2.4 网格线 三.容器属性 3.1 display 属性 3.2 行与列属性定义 明文定义 百分比定义 repeat ...
- CSS Grid 网格布局全解析
一.介绍 CSS Grid(网格) 布局使我们能够比以往任何时候都可以更灵活构建和控制自定义网格. Grid(网格) 布局使我们能够将网页分成具有简单属性的行和列.它还能使我们在不改变任何HTML的情 ...
- CSS Grid网格布局全攻略
CSS Grid网格布局全攻略 所有奇技淫巧都只在方寸之间. 几乎从我们踏入前端开发这个领域开始,就不停地接触不同的布局技术.从常见的浮动到表格布局,再到如今大行其道的flex布局,css布局技术一直 ...
- 轻松上手CSS Grid网格布局
今天刚好要做一个好多div格子错落组成的布局,不是田字格,不是九宫格,12个格子这样子,看起来有点复杂.关键的是笔者有点懒,要写那么多div和css真是不想下手啊.多看了两眼,这布局不跟网格挺像吗?c ...
- css 滤境的详细介绍
导读: [alpha滤镜属性]这个名字,在flash和photoshop经常见到.它们的作用基本类似,就是把一个目标元素与背景混合.你可以指定数值来控制混合的程取u庵帧坝氡尘盎旌稀蓖ㄋ椎厮稻褪且桓鲈 ...
- 安卓app开发-05-Android xml布局详细介绍
安卓app开发-05-Android xml布局详细介绍 虽然说有 墨刀,墨客 这些图形化开发工具来做 Android 的界面设计,但是我们还是离不开要去学习做安卓原生app,学习 xml 布局还是必 ...
- CSS Grid 网格布局教程
作者: 阮一峰 日期: 2019年3月25日 一.概述 网格布局(Grid)是最强大的 CSS 布局方案. 它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局.以前,只能通过复杂的 ...
- CSS Grid 网格布局详解
目录 一:Grid简介 二:基本概念 2.1 容器和项目 2.2 行和列 2.3 单元格 2.4 网格线 三:容器属性 3.1 display 属性 3.2.grid-template-columns ...
- html5流式布局,流式布局是什么?流式布局详细介绍
在PC端进行网页制作时,经常使用固定像素并且内容居中的网页布局,为了适应小屏幕的设备,在移动设备和跨平台(响应式)网页开发过程中,多数使用流式布局,下面我们就对流式布局进行详细介绍. 流式布局是一种等 ...
- Grid网格布局详细讲解
'Grid是CSS3中网格布局系统,也是CSS3中最强大的布局系统.它是一个二维布局系统,这意味着它可以处理列和行,不像flex弹性布局主要是一维系统,他像表格一样可以让我们控制行或者例对齐,可以控制 ...
最新文章
- 拖链电缆 机器人电缆_trvv高柔性拖链电缆
- java中判断一个字符在字符串中出现的次数
- PHP exit函数介绍
- linux部署python web_在linux上部署web环境
- centos elasticsearch7 安装_SkyWalking学习笔记(CentOS环境)
- 安卓自定义相机录像功能全解(不调用系统相机)
- pads中如何设置等长_如何在Windows 10中设置和使用Hyper-V进行OS虚拟化
- HAOI2008 硬币购物
- SpringBoot在前端发送url时,不能识别特殊字符的问题
- ubuntu安装python
- paip.提升用户体验---c++ qt自定义窗体(2)---边框线的绘制
- 怎么把matlab的背景改成白色背景图片,如何把图片背景换成白色?
- 高一计算机组装与维护教学总结,计算机优秀个人教学总结
- 六个步骤搞定学术论文写作!
- 分词器以及ik中文分词器
- 人工智能的知识图,人工智能学习路线
- python延时函数 微秒_Python程序可显示当前时,分,秒和微秒
- Colab 上使用shutil.copytree()复制整个文件夹到另一个文件夹
- l7sa008b故障代码_奥克斯空调故障代码大全
- [转]如何免费下到IEEE ACM的论文(SCI-HUB的使用)