什么是栅格系统?深度解析网页设计是如何实现自适应兼容pc电脑web和手机的?

发布日期: 2019-05-22

经常碰到有做设计同行的朋友问我,网页设计中网页是如何实现自适应PC大电脑和手机mob的?具体的解决方式---代码程序咱们就不讲了,大部分平面和品牌设计师是看不懂代码的。我们本次关键分享一下自适应电脑和手机屏幕的实现原理。

首先,做平面的都知道栅格系统设计,它是平面设计尤其是版式设计中经常接触的一个概念。比如画册杂志设计,我们经常使用它进行布局。

传统媒体比如画册杂志的版式设计,应用栅格化设计,目的是为了信息的归纳和方便读者更容易索引和获取感兴趣的部分。让观看者轻松的感受到图片和信息通过层级的调整对画面会起到的作用,并且元素的串联会变的更加有设计感,枯燥的信息通过这样的方式更容易让读者接受。

而从设计师的角度讲,栅格系统在页面排版布局、尺寸设定方面给了设计者直观的参考,它让页面设计变得有规律,从而减少了设计决策成本。栅格化提高了页面布局的一致性跟复用性,避免了设计师与开发者在细节上的反复沟通确认,从而提升了整个设计开发流程的效率,并能帮助开发者实现较为理想的设计还原。

0131675630bc1f32f8755701e1bdf1.jpg@1280w_1l_2o_100sh.jpg

1280w_1l_2o_100sh.jpg

图片来源于网络,侵删!


那么,网页设计上是如何使用栅格系统的呢?以及自适应兼容PC和手机mob的原理是什么?首先我们看看一个网页的栅格设计。

uisdc-cy-20190516-20.jpguisdc-cy-20190516-19.jpg

如上图所示。 Web设计形式呈现,对于 web,用户已习惯通过鼠标滚轮或滚动条(scrollbar)来纵向浏览页面内容。因此,Web 可以实现竖直方向的「无限」加载,即竖直方向可以无限延伸。因此基于 Web 页面设计,它的栅格系统在水平方向的栅格可以不体现出来,我们在执行设计时只要在竖直方向保持规律的变化就可以了。标准的栅格系统简化为适用于 Web 设计

栅格系统是由列(Column)跟槽(Gutter)交替分布形成的,列(Column)是容纳网页内容的容器,槽(Gutter)就是相邻2列中间的缝隙,把控页面留白。由于列跟槽的宽度是以网格作为基本单位来增加或者减小,所以栅格化的第一步需要先定义好栅格的列「网格」的大小。

半人马根据多年的网页设计经验,以及对前端代码的了解给大家分享一些独门秘技。

(1)可以被12整除

电脑PC发展至今,大屏幕液晶屏已经普及,一般用户的屏幕基本上都在21寸、23寸,甚至27寸。而相应的主流屏幕分辨率也至少1920*1080,甚至27寸的2550*1440了。当然retina的视网膜屏幕比如mac的物理分辨率更高,只不过它的逻辑分辨率也是常规的形式显示的,这里暂时不谈这个。

uisdc-cy-20190516-3.jpg

于是有一些全球通行的栅格系统,比如著名的bootstrap,也是把页面分成12列,中间槽是30px宽度(列左右各15px留白)。早期的web栅格系统也是每列是固定宽度。而现在比如bootstrap 3.0以及最新的4.0版本,列的宽度都是XX%百分比的形态存在的。这一点很多设计师甚至工作多年的网页设计师、UI设计师都是一知半解。他们经常在群里问我要把网页或者手机页面设计多大分辨率啊?多宽啊?一个DIV的宽度是多少合适啊?有的把1920固定的除以12以为就是列宽,实际上列宽是百分比存在。我给大家截图一段bootstrap的代码。

列代码.png

这段代码也就是网页栅格系统的核心。当然,它共分为4个类,即col-xs-*,col-sm-*,col-md-*,col-lg-*。每个类中的*分别是数字1~12.就是12个百分比的宽度写法。其中xs是,<768px像素时;sm是>=768但是小于992时;md是大于等于>=992;小于1200px时,lg是大于1200px时候。等于通过这4个类将显示屏的大小划分了4个区间。不同区间时候对应的类生效,于是产生了在不同屏幕上的版式列排列的效果。

20160329123809757.jpg

列的外边距也称为槽,是内容宽度之外的空白区域。为了更方便的设计,外边距会随着设备宽度的增加而增加。移动设备的边距通常为20-30px。

下面会介绍一些基本的准则,但要明白在实际设计中其实没有任何硬性的规定。

基本准则

1. 内容元素必须位于若干列上

其核心思想是内容元素必须位于若干列上,你可以任意分割,比如6×2,3×4,4×3。下面的例子中,我展示了不同分割方式设计的信息卡片。

uisdc-cy-20190516-5 (1).jpg

uisdc-cy-20190516-6 (1).jpg

不同栅格设计展示设计,只需要带入对应的类即可。比如一排2列,就只需使用col-md-6.  这里*-6的宽度就是50%,而12的宽度刚好是100%。需要一排3个块并列,如下图,就只需使用col-*-4,而3列就是33.333%的宽度。

很棒,这看起来很简单对吧。有的时候,你想把内容严格的套用在栅格布局上,会发现可能不够美观,比如下面的例子。

uisdc-cy-20190516-7.jpg

uisdc-cy-20190516-8 (1).jpg

如果我们把内容都放在网格上,文本内容会显得很长,最佳的位置是不严格在任何网格上,这也是可以的,只要理解了整个元素实际上是一个不可见的,更大的容器就行。

uisdc-cy-20190516-9 (1).jpg

uisdc-cy-20190516-10 (1).jpg

这也是4×3的布局,只是给了它内部不可见的填充。当把这样的设计稿给到开发时,他们就能很直观的知道这一点,所以这更利于去理解如何实际地分配好内容。

2. 不要将内容元素留在水槽中

内容元素应该要在列宽以内,而不能流出在水槽之外,这样会违背栅格化的目的。

uisdc-cy-20190516-11.jpg

uisdc-cy-20190516-12 (1).jpg

3. 只要父级元素对齐栅格,子级可以不完全对齐列

有些时候,你想要将设计和卡片分成两部分,一半是图片,一半是文字。你可能遇到这样尴尬的情况,图片没有完全落在一列上,文字被迫以一种奇怪的方式自适应。其实不用担心,只要「父」容器对齐栅格,这就没有关系。

uisdc-cy-20190516-13.jpguisdc-cy-20190516-14 (1).jpg

父子级内容栅格排版示意

4. 除非有意,否则不要把列作为外部填充

所有重要内容都应该与栅格列宽相适应。一开始会觉得奇怪,因为如果不习惯使用网格,可能会把网格宽度当成全部内容区域,所以还需要给它设定一定的内边距。此时外边距就起到了留白的作用,它们充当了内边距。不要在网格内部利用列宽当成内边距,而是要与网格最外面保持对齐,利用网格外的间距来当做留白区域。

根据代码实现方式,要么网格内的内容按比例缩放,边距固定,要么外边距与内容同时缩放。

uisdc-cy-20190516-16 (1).jpguisdc-cy-20190516-17.jpg

正确的内容填充方式和不正确的把栅格当做边距

所以如果有人说「我需要一个1200px宽的设计」,这并不意味着你的设计就是1200px宽,这其实是说设计内容宽度在1200px的画布内,实际内容占位是960px,这样就会有空间留出外边距。

5. 完全出血的元素或纹理图形应该设计在画板边缘,并理解为出血的列网格

uisdc-cy-20190516-18 (1).jpg

这个页面布局的顶部图片被设计成完全出血

这是一个例外的规则,当背景颜色或者图片在完全出血的情况下,开发同学会把它理解为一个全屏的内容元素。

uisdc-cy-20190516-19.jpg

果设计的是装饰元素之类的内容,可以接受它被裁切掉,此时也可以脱离栅格化的设计。

uisdc-cy-20190516-21 (1).jpg


uisdc-cy-20190516-22.jpg

一些图片和文字的出血设计

页眉和页脚有时也有例外,它们不被认为是内容的一部分。有些设计将它们固定在浏览器边缘,有些则喜欢保持内容的宽度,这取决于自身功能和内容的情况。将它们保持在内容宽度内的好处是,当用户在宽屏显示器上看页面时,不需要来回扫视,将它们固定在浏览器上的好处是可以为导航元素提供更多的空间。

栅格化布局如何做到响应式



uisdc-cy-20190516-24.jpg

在传统的栅格化系统设计中,列的宽度和水槽的宽度是保持不变的,只是列的「数量」发生变化。

为什么要这么处理呢?这是为了让设计更简单。如果一组三张卡片分别放在桌面的四列上,那么在平板电脑上,会显示两张卡片,并把第三张卡片进行折行显示在第二行上。不需要做任何的调整,因为已经知道它位于第四列上了。

在手机上,答案也很简单,只需要一张卡片,其他的就会自动堆到下面的行中。如果你愿意,也可以变得有创意,选择只在手机上显示一张卡片,或者做一个水平滚动。这些列的自适应对于代码来说就是很简单的参考。

实际上,web必须呈现任何浏览器的宽度。例如,有一个大显示器,它可以看到1600像素宽的东西,实际上pc端的网页设计是1200px宽,平板电脑上是768px宽,手机是360px宽。所以你会看到一个小于1200px的设计,有大量的留白。但是当你的浏览器再小一个像素,1199px,会发生什么呢?

1. 固定网格

固定栅格示意

如果开发那边写了一个固定栅格,当你从桌面缩小到平板电脑,就像是在900px的浏览器宽度时,你不会看到任何变化,设计就像是被剪掉了一样。但当达到768px临界点时,设计马上就会改变,平板电脑上的显示效果就会好起来。如果继续减小这个值,同样的事情也会发生,在到达另一个临界值之前,设计看起来都是不变的。

流动网格的示例

现在来看看流动网格的特点,当窗口缩小时,内容将动态的发生变化,文本会进行换行,元素也会变窄。然而,这些元素在内容宽度缩小到下一个临界值之前,布局是不会变化的。

所以我想说的是,设计的临界值只是一个更改布局的参考点。这就是为什么列宽和槽在网格中不会改变的原因,因为我们想让设计师在考虑布局时能够更容易地创建一致性。

3. 混合网格

在实际项目中,使用流动网格和固定网格的组合也是常见的做法。网站通常是流动网格,因为它要去适应各种不同终端的大小。

一些做的很酷的栅格系统

不需要太死板地去坚持传统栅格套路,12、8、4这样的分布,甚至不需要20px的水槽,下面是一些在设计中使用栅格系统做的很棒的设计灵感。


uisdc-cy-20190516-30.jpg

Dropbox Design


使用网格的方式取决于你自己。你可以在主要内容部分使用网格,次要内容则不使用。在Wordpress的例子中,页面中间的部分使用栅格化设计,左侧的侧边栏则没有使用。

 The Mockup Club

uisdc-cy-20190516-33.jpg

Instagram

uisdc-cy-20190516-35.jpg

我非常确定的说,Instagram的PC端是用上了6列栅格布局。

最后,写这篇文章的目的是想提供一些关于如何在响应式设计中使用栅格系统,半人马花了很多年的时间写了大量的网页前端代码来理解栅格系统是如何工作的。学习了很多技术类书籍和教程,我知道很多人都在关注它为什么重要,却不知道其所以然和如何去使用它。

你要做的最好的事情就是从现在开始注意那些优秀设计是如何对齐元素的,如果是网页设计师或者UI设计师,半人马的建议是你最好学习一下基本的前端代码比如html和css,你将会开始看到这些网格是如何工作的。这对于你的专业是具有很大的帮助的。不再盲目限定于设计软件如photoshop给你的画布大小,而茫然,然后在群里问我该设计多大的块?哈哈

希望这篇文章对大家有帮助。

文章中的图片来源于网络,如有侵权请联系我删除!


最新新闻
查看更多