前端布局之网格gird布局(简单易懂)

grid网格布局

前言

弹性布局的文章很多,但是它是解决一维布局的,面对二维就显得无力了,此时我们就需要用到网格布局。(ps:一维就是一列或者一行的布局,当你遇到九宫盒布局,此时涉及到列与行,便是二维布局了,常见于电商网站的商品展示);看这篇文章,建议你自己建个html,跟着敲一敲,更利于理解。

为什么用网格布局?

很多同学可能会觉得,我用浮动,定位,弹性盒模型可以实现绝大多数样式布局呀,为什么还要新学一个网格布局呢。就像你以前用jquery,为什么后来用mvvm框架呢,因为它能让我们实现起来更效率,也很利于维护。

进入主题:

最基本代码:(体验 gird 的第一个好处,align-items:center垂直居中,妈妈再也不要担心我搞不定垂直居中了。)

<style>.box {width: 300px;display: grid;align-items:center;}.box>div{background: gray;text-align: center;font-size: 24px;border: 2px solid white;}
</style><div class="box">      <div>1</div><div>2</div><div>3</div><div>4</div><div>5</div><div>6</div>    
</div>

效果图

一、Columns(列) 和 rows(行)

1)更改上面的.box里面样式:(3列和2行)

.box {width: 300px;display: grid;grid-template-columns: 100px 100px 100px;grid-template-rows: 50px 50px;}

效果图

解说:

  • grid-template-columns是建立列。如上图,行的宽度是100px,我们写了3个100px,就是3列;是不是挺简单。
  • grid-template-rows是建立行。如上图,行的高度是50px,我们写了2个50px,就是2行。

2)我们用fr属性,依旧只改.box属。

.box {width: 300px;display: grid;grid-template-columns: 1fr 2fr 3fr;/*grid-template-columns: repeat(3, 1fr) 50px; 隐藏方法repeat,代表循环创建*//*grid-template-columns: repeat(3, 1fr) 50px; 隐藏方法minmax(100px, auto),第一个参数是最小值,第二个参数是最大值*/grid-template-rows: 1fr 2fr;}

效果图

看懂没,fr表示平均分配的比例,你可以打开控制台看下,columns的1,2,3元素分别是50px,100px,150px;rows也是分成1份和2份,但是它还会自动垂直居中,所以上下两端有留白。

3)来点有难度的,(在 grid(网格) 上放置 items(子元素))
重写一下dom和css,避免混乱。

<style>.box {width: 300px;display: grid;align-items:center;/* justify-items: center;*/grid-template-columns: 100px 100px 100px;grid-template-rows: 100px 100px 100px;}.box>div{padding: 30px 0;background: gray;text-align: center;font-size: 24px;border: 2px solid white;}
</style><div class="box"><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>

效果图
得到一个九宫盒,填满6个方块,另外三个空着。

先解释一个疑惑:我为什么用padding,还用text-align: center,我们注释掉的justify-items: center也能实现水平居中。原因就是gird的居中不是针对文字的,而是你这个div,没有padding值,背景图无法撑满,自己试试就明白了。


二、grid-column-start和 grid-column-end

  • 说重点:我们给Item1一个样式:
.item1 {grid-column-start: 1;grid-column-end: 4;
}

效果图
是不是有点懵,啥情况,听我娓娓道来,你会觉得原来如此。九宫盒的 grid-column是从1-9,grid-column-start表示我开始的地方是第1个盒子,grid-column-end表示我结束地方是第4个盒子(其实是第4个盒子之前结束),所以其实是1-3是item1占领的,后面的自动往后顺延。自己试试改一改属性就明白了。


三、grid-gap

只改.box样式

.box {width: 300px;display: grid;align-items:center;grid-template-columns: 100px 100px 100px;grid-template-rows: 100px 100px 100px;grid-gap: 10px;}

不贴图了, 你会发现,网格项之间添加一个间隙。有多好用,之前加空隙,用margin你会特无语,很难处理,这个就so easy。grid-column-gap和grid-row-gap分别改变列与行网格间隙。


四、实战(实现如下图的效果:传说中的十二栅格系统)

效果图
只改.box样式

<style>.box {display: grid; grid-template-columns: repeat(12, 1fr);grid-template-rows: 50px 350px 50px;grid-gap: 5px;grid-template-areas:"h h h h h h h h h h h h""m m c c c c c c c c c c""f f f f f f f f f f f f";}.header {grid-area: h;background: greenyellow;}.menu {grid-area: m;background: blue;}.content {grid-area: c;background: coral;}.footer {grid-area: f;background: purple;}.box>div{font-size: 24px;text-align: center;}
</style><div class="box">      <div class="header">header</div><div class="menu">menu</div><div class="content">content</div><div class="footer">footer</div>   </div>

这里唯一新属性就是grid-template-areas,咋一看,有点晕。仔细说来:

  • 1、grid-template-columns: repeat(12, 1fr);先在列上面制作12栅格系统。
  • 2、grid-template-rows: 50px 350px 50px;再制作三行,高度不同。形成3*12 = 36个单元格。
  • 3、 grid-template-areas将这36个单元格平分,就是打标。h代表header、m代表menu、c代表content、f代表footer。看上述写的正好平分了36份,然后我们在子样式grid-area对应找到属于自己的标签。其实还是不难理解的。

延伸:我们配合响应式多媒体查询@media screen能实现各种之前很难实现的效果。gird真正做到了结构和表现分离,是css时代的一大进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/406848.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SAFEARRAY使用方法示例

From: http://blog.csdn.net/absurd/article/details/786822 SAFEARRAY使用方法示例 SAFEARRAY不是很好用&#xff0c;一些函数不太直观&#xff0c;一不小心就着了它的道。上次学习编写Google桌面插件时就遇到了麻烦&#xff0c;本来应该是vsa.vt VT_ARRAY | VT_BSTR&#xf…

几台WEB经常宕机,求分析原因

几台WEB服务器经常宕机&#xff0c;平时运行得好好的&#xff0c;负载也都在2以下&#xff0c;偶尔会突然负高上去就宕机&#xff0c;init 6也无法重启成功只能echo b>/proc/sysrq-trigger 硬重启才行,dmesg 没发现硬件方面有问题。从top相关信息来看&#xff0c;每次宕机现…

修复DBR的脚本

当今社会越来越依赖于计算机了&#xff0c;没事之余做了几个修复DBR的脚本(NTFS FAT32 exFAT)&#xff0c;这样有些操作就不用人工去操作了&#xff0c;1、节省时间 2、提高效率 3、降低人工操作的出错率。转载于:https://blog.51cto.com/haobinnan/172341

期待已久的VS2008 SP1 和.NET FRAMEWORK 3.5 SP1都出来了

期待已久的VS2008 SP1 和.NET FRAMEWORK 3.5 SP1都出来了 下载地址 Microsoft Visual Studio 2008 Service Pack 1 (iso) http://www.microsoft.com/downloads/details.aspx?displaylangzh-cn&FamilyID27673c47-b3b5-4c67-bd99-84e525b5ce61 Visual Studio 2008 Team Foun…

VUE3 项目自定义修改网页标题和图标

VUE3中&#xff0c;网页图标默认使用的是VUE自带的一个ico的图标&#xff0c;也是VUE的logo。那么作为我们自己开发的项目&#xff0c;如何自定义修改网页的图标和标题呢&#xff1f;很简单&#xff0c;下面就介绍一下。 1 标题修改 标题修改直接在项目的 /public/index.html…

IAsyncResult接口

#region 程序集 mscorlib.dll, v4.0.0.0 // C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll #endregionusing System.Runtime.InteropServices; using System.Threading;namespace System {// 摘要:// 表示异步操作的状…

开博了!

本人&#xff1a;喜素食&#xff0c;甚爱白菜&#xff0c;然RP尚有待提高&#xff0c;常被谓之“鸟人”也&#xff0c;故已“菜鸟”而自居。一日&#xff0c;本“菜鸟”东游&#xff0c;偶遇Linux&#xff0c;色心骤起&#xff0c;欲为课题之所用&#xff0c;然因资质尚浅&…

AES加密算法的详细介绍与实现

AES简介 高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥&#xff0c;具体的加密流程如下图&#xff1a; 下面简单介绍下各个部分的作用与意义&#xff1a; 明文…

如何备份 Outlook Express 项

步骤1&#xff1a;将邮件文件复制到备份文件夹<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />步骤A&#xff1a;定位存储文件夹1. 启动Outlook Express。2. 单击“工具”&#xff0c;然后单击“选项”。3. 在“…

VC6获取硬盘序列号、型号、修订版本号

因为要做个读取硬盘参数信息的控件&#xff0c;所以在网上找了不少代码&#xff0c;但是自己作为一个初学者在使用别人代码时&#xff0c;总会发现有各种各样的问题&#xff1a; 1. 需要的头文件未写明 2. 有些定义未给出 3. 代码的开发环境未明&#xff0c;导致编译时出现“…

Android系统服务-WindowManager

WindowManager是Android中一个重要的服务 &#xff08;Service &#xff09;。WindowManager Service 是全局的&#xff0c;是唯一的。它将用户的操作&#xff0c;翻译成为指令&#xff0c;发送给呈现在界面上的各个Window。Activity会将顶级的控件注册到 Window Manager 中&am…

Linux:关于头文件的位置

十足的菜鸟问题&#xff0c;今天终于想通了一点点。 引子&#xff1a;通常在写代码时先要包含一通头文件&#xff0c;这些头文件们在什么地方呢&#xff1f;这个问题起源于课题中需要操作OK6410的PWM寄存器&#xff0c;查了许多文献说需要ioremap()映射&#xff0c;需要包含 a…

理解AES加密解密的使用方法

很多人对于AES加密并不是很了解&#xff0c;导致互相之间进行加密解密困难。 本文用简单的方式来介绍AES在使用上需要的知识&#xff0c;而不涉及内部算法。最后给出例子来帮助理解AES加密解密的使用方法。 AES的麻烦 相比于其他加密&#xff0c;AES加密似乎模式很多&#xf…

C++中,引用作为函数参数

引用作为函数参数 C之所以增加引用类型&#xff0c; 主要是把它作为函数参数&#xff0c;以扩充函数传递数据的功能。 ———————————————————— c&#xff0c;函数传参&#xff1a;(1)将变量名作为实参和形参。这时传给形参的是变量的值&#xff0c;传递是单向…

全排列算法原理和实现

From: http://www.cnblogs.com/nokiaguy/archive/2008/05/11/1191914.html 全排列是将一组数按一定顺序进行排列&#xff0c;如果这组数有n个&#xff0c;那么全排列数为n!个。现以{1, 2, 3, 4, 5}为例说明如何编写全排列的递归算法。1、首先看最后两个数4, 5。 它们的全排列为…

ext笔记

如何创建对象实例:var app function() { var privVar11; return {p1:11, p2:22,init:function(){}};}(); js创建对象的原理:实际上创建了一个匿名函数&#xff08;没有名字的函数&#xff09;&#xff0c;经过解释之后让它立刻运行&#xff08;注意函数后面的()&#xff09;。…