你不需要基于 CSS Grid 的栅格布局系统
在过去的几个星期里,我开始看到基于 CSS Grid 的布局框架和栅格系统的出现。我们惊讶它为什么出现的这么晚。但除了使用 CSS Grid 栅格化布局,我至今还没有看到任何框架能提供其他有价值的东西。他们沉醉于模仿过去的做法,而不是着眼于未来。这使得发展受到限制。其中一个常见的问题就是,这些框架仍需要在标记语言中使用行包装器。
为什么 Grid 有些不同?
Grid 是一个栅格系统。它允许你在 CSS 中定义列和行,而不需要在标记语言中定义它们。你不需要其他工具帮助你实现一个看起来像栅格的效果,实际上它就是栅格!
传统的设置布局的方法需要使用行包装器进行标记的原因是,我们是通过为对象分配宽度的方式来伪造网格的。然后我们通过调整对象布局,从而在网格间制造出间隙。在一个基于 float 的网格布局中,你需要将每行元素包装起来并清除浮动,以使下一行中的内容不浮动。在一个基于 Flex 的网格中,需要你对每行定义新的 Flex 容器,或者你需要恰当灵活地使用包装器,flex-basis
和 margin
来获得相同的效果。
Grid 不需要这些行包装器,因为你已经定义了相应的行轨迹和用于对齐的线条。且不会有网格内的内容溢出到其他行的危险。 如果你定义了行包装器,那么每一行都将成为一个新的一维网格布局。如果你将自己限制在一个维度上,那使用 Grid 并没有比 Flexbox 更好。
基于 Grid 的布局框架有什么值得借鉴的地方?
框架这个词在这不是太恰当,但是我认为在一个团队中,一套 Sass helper 在规范化使用 Grid 方面是很有帮助的。如果你已经探究了相关的规范,你会发现要实现相同效果,会有很多种不同的方法。你可以命名区域,使用行号或行名。你可能倾向于明确给出所有元素的位置,或是尽可能依赖于自动布局。如果团队中的每个人都使用不同的方法,最终将使得编写出来的代码难以阅读和维护。
对于代码向后兼容也是如此。如果你已经决定如何处理不支持 Grid 布局的浏览器,某些工具可以帮助你确保你所做的决定能够在不同的地方以相同的效果展现出来。此外,这种方法在项目开发层面上比直接导入其他公司的方法更有用。
在你开始使用新的“Grid Layout 框架”前,请确保你首先了解 Grid 网格布局的工作原理。知道你为什么要创建一个抽象,它提供什么以及使用它的副作用是什么。
拥抱新的可能
我刚刚从 Patterns Day 回来,并且 我的一张幻灯片在 Twitter 上被提及了好几次:
“Flexbox 与 Grid 有很大区别。如果你先使用了旧的方法来进行开发,那你将失去使用 Flexbox 和 Grid 进行创新的可能”。
上面这张 PPT 的背景是处理老版本的浏览器,也就是处理浏览器兼容问题。我鼓励人们首先考虑新的浏览器。要开始使用良好的标记, 首先要为那些支持 Grid 和 Flexbox 等的浏览器进行设计。如果你从旧版本的浏览器开始,会让他们的性能成为限制你能力的因素。
创建规范的标记,整理那些过时了的没有必要的元素。使用 Grid 和其他新方法来设计你的网站。然后, 你可以通过提供一些更简单的东西, 来解决不支持新功能的浏览器的兼容问题。也许你的 Grid 布局设计使用了跨行等设计方案,这种效果很难在不支持额外标记方法的旧版本浏览器中实现精准的布局。你可以使用 flexbox 做向后兼容,创建一个没有跨行的布局方案。虽然这样不那么整洁,但也完全可以使用,而且不需要为数量在逐渐减少的那部分用户来增加额外标记。
你可以 点击这来看相关示例。这是我发布在 Grid by Example 上的数个带有向后兼容方案的模式之一。
如果把自己限制在过去,例如在旧的浏览器中只能使用 Grid 的部分功能,或使用那些自身受限的框架,那你就会失去使用 Grid 时产生创意的可能。既然这样又何必使用 Grid?你也可以只使用旧的代码方案,但这的确很可惜。
如果你在寻找栅格框架时找到本文,那你找对地方啦!学习并使用 CSS Grid 布局,可能你没有必要再找除此之外的材料了。
欢迎大家在评论区留下你的想法和感受!
欢迎大家关注知乎专栏:全栈成长之路
文章保质保量 (づ ̄3 ̄)づ╭?~
也欢迎大家加入学习交流QQ群:637481811
本文首发于我的 个人网站 LeviDing ,更多内容欢迎关注我的个人网站。
欢迎扫描上方二维码关注 公众号: LeviDing 订阅实时动态。
你不需要基于 CSS Grid 的栅格布局系统的更多相关文章
- CSS Grid基于网格的二维布局系统(详细教程)
.grid-wrap{ display: inline-flex; padding: 20px; background: #f4f4f4; word-break: initial; } .handle ...
- day30—使用Flexbox和CSS Grid实现高效布局实践
转行学开发,代码100天——2018-04-15 (今天是代码开发的第30天,但是代码记录有些滞后,尽快补上.日后要严格执行,避免学习进度和内容相对滞后.) 今天,记录“前端大全”里分享的一篇关于利用 ...
- Bootstrap3.0 栅格系统背后的精妙魔法(Bootstrap3.0的栅格布局系统实现原理)
这个标题取的有点奇怪,怪我翻译的有问题吧.英文学平有限,有道词典和google翻译齐上阵是必须的.还好翻译的不是小说,对于技术文章,还是能勉强翻过来的. 本文主要讲解了Bootstrap3.0的栅格布 ...
- Bootstrap3.0的栅格布局系统实现原理
这个标题取的有点奇怪,怪我翻译的有问题吧.英文学平有限,有道词典和google翻译齐上阵是必须的.还好翻译的不是小说,对于技术文章,还是能勉强翻过来的. 本文主要讲解了Bootstrap3.0的栅格布 ...
- Bootstrap栅格布局系统的特点
栅格布局系统的特点: (1)所有的行必须放在容器中: .container或.container-fluid (2)分为多行(row),一行中平均分为12列(col) (3)网页内容只能放在列(col ...
- CSS:谈谈栅格布局
检验前端的一个基本功就是考查他的布局.很久之前圣杯布局风靡一时,这里就由圣杯布局开始,到最流行的bootstrap栅格布局. 圣杯布局 圣杯布局是一种三列布局,两边定宽,中间自适应: * { box- ...
- 【转及总结】Bootstrap 框架 栅格布局系统底层设计原理
如果你是初次接触Bootstrap,你一定会为它的栅格布局感到敬佩.事实上,这个布局系统提供了一套响应式的布局解决方案. 既然这么好用,那他是如何用CSS来实现的呢? 我特意去Bootstrap官方下 ...
- grid栅格布局
前面的话 Grid布局方式借鉴了平面装帧设计中的格线系统,将格线运用在屏幕上,而不再是单一的静态页面,可以称之为真正的栅格.本文将详细介绍grid布局 引入 对于Web开发者来说,网页布局一直是个比较 ...
- 震惊!很多人都不知道 CSS Grid 框架早就有了!
前言 写作本文起源于知乎的一个问题:[CSS Grid 布局那么好,为什么至今没有人开发出基于 Grid 布局的前端框架呢?] 这篇文章拖沓了两个月,是因为真的不知道从哪里说好.这个问题的所有回答几乎 ...
随机推荐
- python面试_总结03_列表练习题
1.列表练习题 完成下列列表相关的编程题,先运行下列的test函数,在完成每道题之后,都可以通过调用test函数检测所写函数对错. def test(got, expected): if got == ...
- boostrap的select2自动换行的问题解决
最近在使用boostrap的select2控件实现多选效果时发现一个问题正常效果:但是当选择了两个长一些的option时,发现select2莫名其妙的换了一行空白行:经过F12调试发现是因为selec ...
- 测试平台系列(91) 编写oss管理页面
大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的教程,希望大家多多支持. 欢迎关注我的公众号米洛的测开日记,获取最新文章教程! 回顾 上一节我们编写好了oss相关 ...
- Angular依赖注入:全面讲解(翻译中)
在实际使用Angular依赖注入系统时,你需要知道的一切都在本文中.我们将以实用易懂并附带示例的形式解释它的所有高级概念. Angular最强大.最独特的功能之一就是它内置的依赖注入系统. 大多数时候 ...
- [翻译] TensorFlow 分布式之论文篇 "Implementation of Control Flow in TensorFlow"
[翻译] TensorFlow 分布式之论文篇 "Implementation of Control Flow in TensorFlow" 目录 [翻译] TensorFlow ...
- 理解并手写 bind() 函数
有了对call().apply()的前提分析,相信bind()我们也可以手到擒来. 参考前两篇:'对call()函数的分析' 和 '对apply()函数的分析',我们可以先得到以下代码: Functi ...
- 分布式 PostgreSQL 集群(Citus),官方快速入门教程
多租户应用程序 在本教程中,我们将使用示例广告分析数据集来演示如何使用 Citus 来支持您的多租户应用程序. 注意 本教程假设您已经安装并运行了 Citus. 如果您没有运行 Citus,则可以使用 ...
- Centos 7.5 通过yum安装GNOME Desktop时出现:file /boot/efi/EFI/centos from install of fwupdate-efi-12-5.el7.centos.x86_64 conflicts with file from package grub2-common-1:2.02-0.65.el7.centos.2.noarch
系统版本为: [root@s10 ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) 由于管理kvm虚拟机的需求,需要安装 ...
- Linux下编译安装配置MariaDB数据库
说明:操作系统:CentOS 6.6 64位MariaDB版本:mariadb-5.5.33aMariaDB数据库存放目录:/data/mysql准备:一.配置防火墙,开启3306端口vi /etc ...
- 7月2日 Django注册页面的form组件
forms.py里注册页面的form组件 # Create your views here. class RegForm(forms.Form): username = forms.CharField ...