一. 静态布局(static layout)
即传统的Web布局,网页上的所有元素尺寸一律使用px作为单位。
1. 布局特点
不管浏览器尺寸具体是多少,网页布局始终按照最初代码的布局来显示。常规的pc网站都是静态(定宽度)布局的,也就是设置了min-width,这样的话,如果页面小于这个宽度就会出现滚动条;如果大于这个宽度则内容居中外加背景,这种设计常见于pc端。
2.设计方法、
pc:居中布局,所有样式使用绝对宽度/高度(px),设计一个Layout,在屏幕宽高有调整时,使用横向和竖向的滚动条来查询被遮掩部分;
移动设备:另外建立移动网站,单独设计一个布局,使用不同的域名如wap.或m.。
在移动端开发中采用静态布局的两种方式:
(1)在viewport meta标签上设置width=320
,页面的各个元素也采用px作为单位,通过用js动态修改标签的initial-scale使得页面等比缩放,从而刚好占满整个屏幕。
(2)在viewport meta标签上设置content="width=640,user-scalable=no"
,页面的各个元素也采用px作为单位,由于640px超出了手机宽度,浏览器会自动缩小页面至刚好全屏。
优点:这种布局方式对设计师和CSS编写来说都是最简单的。
缺点:不能根据用户的屏幕尺寸做出不同的表现。
当前,大部分门户网站、大部分企业的pc宣传站点都采用了这种布局方式。固定像素尺寸的网页是匹配固定像素尺寸显示器的最简单办法。但这种方法不是一种完全兼容未来网页的制作方法,我们需要一些适应未知设备的方法。
二、流式布局(Liquid Layout)
流式布局的特点是页面元素的宽度按照屏幕分辨率进行适配调整,但是整体布局不变,代表栅格系统(网格系统)。网页中主要的划分区域尺寸使用百分数(搭配min-、max-属性使用)。例如,设置网页主体的宽度为80%,min-width为960px,图片也做类似处理(width:100%,max-width一般设为图片本身的尺寸,防止被拉伸而失真)。
1. 布局特点
屏幕分辨率变化时,页面里元素的大小会变化但布局不变。(这就导致如果屏幕太大或者太小都会导致元素无法正常显示)。
2. 设计方法
使用%百分比定义宽度,高度大都是用px来固定,可以根据可视区域(viewport)和父元素的实时尺寸进行调整,尽可能的适应各种分辨率。往往配合max-width/min-width等属性控制尺寸流动范围以免过大或者过小影响阅读。
这种布局方式在web前端开发的早期历史上,用来应对不同尺寸的pc屏幕(那时屏幕尺寸的差异不会太大),在当今的移动端开发也是常有的布局方式。但缺点明显:主要的问题是如果屏幕尺度跨度太大,那么在相对其原始设计而言过小或过大的屏幕上不能正常显示。因为宽度使用%百分比定义,但是宽度和文字大小都是用px固定,所以在大屏幕的手机下显示效果会变成有些页面元素宽度被拉的很长,但是高度、文字大小还是和原来一样(即,这些东西无法变得“流式”),显示非常不协调。
三、自适应布局(Adaptive Layout)
自适应布局的特点是分别为不同的屏幕分辨率定义布局,即创建多个静态布局,每个静态布局对应一屏幕分辨率范围。改变屏幕分辨率可以切换不同的静态布局(页面元素位置发生改变),但在每个静态布局中,页面也暗示不随窗口大小的调整发生变化。可以把自适应布局看作是静态布局的一个系列。
1. 布局特点
屏幕分辨率发生变化时,页面里面的元素位置会变化而大小不会变化。
2. 设计方法
使用@media媒体查询给不同尺寸和介质的设备切换不同的样式。在优秀的响应范围设计下可以给适配范围内的设备最好的体验,在同一个设备下实际还是固定布局。
四、响应式布局(Responsive Layout)
随着CSS3出现了媒体查询技术,又出现了响应式设计的概念。响应式设计的目标是确保一个页面在所有终端上(各种尺寸的pc、手机、手表、冰箱的web浏览器等等)都能显示出令人满意的效果,对css编写者而言,在现实上不拘泥于具体手法,但通常是糅合了流式布局+弹性布局,再搭配媒体查询技术使用。分别为不同的屏幕分辨率定义布局,同时,在每个布局中,应用流式布局的理念,即页面元素宽度随着页面窗口而自动适配。即:创建多个流体式布局,分别对应一个屏幕分辨率范围。可以把响应式布局看做是流式布局和自适应理念的融合。
1. 布局特点
每个屏幕分辨率下面会有一个布局样式,即元素位置和大小都会改变。
2. 设计方法
媒体查询+流式布局。通常使用@media媒体查询和网格系统(grid system)配合相对布局单位进行布局,实际上就是综合响应式、流动等上述技术通过CSS给单一网页不同设备返回不同样式的技术统称。
优点:适用pc端和移动端。
缺点:(1)媒体查询是有限的,也就是可以枚举出来的,只能适应主流的宽高。(2)要匹配足够多的屏幕大小,工作量不小,设计也需要多个版本。
响应式与自适应的对比
响应式与自适应的原理是相似的,都是检测设备,根据不同的设备采用不同的css,而且css都是采用的百分比,而不是固定宽度。不同点是响应式的模板在不同的设备上看上去是不一样的,会随着设备的改变而改变展示样式,而自适应不会,所有的设备看起来都是一套模板,不过是长度或者图片变小了,不会根据设备采用不同的展示样式,流式就是采用了一些设置,当宽度大于多少时怎么展示,小于多少时展示,而且展示的方式像水流一样,一部分一部分的加载,静态的就是采用固定宽度。
流式布局是用于解决类似的设备不同分辨率之间的兼容(一般分辨率差异较少);响应式用于解决不同设备之间不同分辨率之间的兼容问题(一般是指PC、平板、手机等设备之间较大的分辨率差异)。
五、弹性布局(rem/em布局)
这类布局的特点是:包裹文字的各元素的尺寸采用em/rem做单位,而页面的主要划分区域的尺寸仍使用百分数或px做单位。早期浏览器不支持整页面按比例缩放,仅支持网页内文字尺寸的放大,这种情况下,使用rem/em做单位,可以使包裹文字的元素随着文字的缩放而缩放。
1. 布局特点
浏览器的默认字体高度一般为16px,即1rem:16px,但是1:16的比例计算不方便,为了使单位em/rem更直观,css编写者尝尝将页面根节点字体设为62.5%,比如选择用rem控制字体时,先需要设置根节点html的字体大小,因为浏览器默认字体大小是16px * 62.5% = 10px,这样1rem就是10px。
但是因为有些浏览器的默认不是16px,或者用户修改了浏览器默认的字体大小。如果我们将其设置为10px,一定会影响在这些浏览器上的效果,所以最好用绝大多数用户默认的16作为基数*62.5%
得到我们需要的10px。
html{font-size:62.5%:// 10 / 16 * 100% = 62.5%}body{font-size:1.45rem;// 1.4 * 10px = 14px}
实际项目设置成font-size:62.5%可能会出现问题,因为chrome不支持小于12px的字体,计算小于12px的时候,会默认取12px计算,导致chrome的em/rem计算不准确。
针对这个现象,可以尝试设置html字体为100px,body修正为16px,这样0.1rem就是10px,而body的字体仍然是默认大小,不影响未设置大小的元素的默认字体大小。
html{font-size:100px;}body{font-size:16px}
响应式和弹性布局之间的对比:
响应式布局:改变浏览器宽度,“布局”会随之变化,不是一成不变的,例如导航栏在大屏幕下是横排,在小屏幕下是竖排,在超小屏幕下隐藏为菜单。
rem布局:改变浏览器宽度,页面所有元素的高度都等比例缩放,也就是大屏幕下导航栏是横的,小屏幕下还是横的,只不过变小了。
总结:
如果只做pc端,那么静态布局是最好的选择;如果做移动端,且涉及对高度和元素间距要求不高,那么弹性布局是最好的选择,一份css+一份js调节font-size搞定;如果pc,移动要兼容,而且要求很高,那么响应式布局是最好的选择,前提是设计根据不同的宽度做不同的设计,响应式根据媒体查询做不同的布局。