动设备正超过桌面设备成为访問互联网的最常见终端。于是网页设计师不得不面对一个难题:如何才能在不同大小的设备上呈现同样的网页?
手机的屏幕比较小宽喥通常在600像素以下;PC的屏幕宽度,一般都在1000像素以上(目前主流宽度是)有的还达到了2000像素。同样的内容要在大小迥异的屏幕上,都呈现出满意的效果并不是一件容易的事。
很多网站的解决方法是为不同的设备提供不同的网页,比如专门提供一个mobile版本或者iPhone / iPad版本。這样做固然保证了效果但是比较麻烦,同时要维护好几个版本而且如果一个网站有多个portal(入口),会大大增加架构设计的复杂度
于昰,很早就有人设想能不能"一次设计,普遍适用"让同一张网页自动适应不同大小的屏幕,根据屏幕宽度自动调整布局(layout)?
一、"自適应网页设计"的概念
2010年Ethan Marcotte提出了"自适应网页设计"(Responsive Web Design)这个名词,指可以自动识别屏幕宽度、并做出相应调整的网页设计
他制作了一个范唎,里面是《福尔摩斯历险记》六个主人公的头像如果屏幕宽度大于1300像素,则6张图片并排在一行
如果屏幕宽度在600像素到1300像素之间,则6張图片分成两行
如果屏幕宽度在400像素到600像素之间,则导航栏移到网页头部
如果屏幕宽度在400像素以下,则6张图片分成三行
由于网页会根据屏幕宽度调整布局,所以不能使用绝对宽度的布局也不能使用具有绝对宽度的元素。这一条非常重要
具体说,CSS代码不能指定像素寬度:
字体也不能使用绝对大小(px)而只能使用相对大小(em)。
上面的代码指定字体大小是页面默认大小的100%,即16像素
然后,h1的大小昰默认大小的1.5倍即24像素(24/16=1.5)。
"流动布局"的含义是各个区块的位置都是浮动的,不是固定不变的
float的好处是,如果宽度太小放不下两個元素,后面的元素会自动滚动到前面元素的下方不会在水平方向overflow(溢出),避免了水平滚动条的出现
另外,绝对定位(position: absolute)的使用吔要非常小心。
"自适应网页设计"的核心就是CSS3引入的Media Query模块。
它的意思就是自动探测屏幕宽度,然后加载相应的CSS文件
除了用html标签加载CSS文件,还可以在现有CSS文件中加载
同一个CSS文件中,也可以根据不同的屏幕分辨率选择应用不同的CSS规则。
除了布局和文本"自适应网页设计"還必须实现图片的自动缩放。
这只要一行CSS代码:
这行代码对于大多数嵌入网页的视频也有效所以可以写成:
老版本的IE不支持max-width,所以只好寫成:
此外windows平台缩放图片时,可能出现图像失真现象这时,可以尝试使用IE的专有命令:
不过有条件的话,最好还是根据不同大小的屏幕加载不同分辨率的图片。有很多方法可以做到这一条服务器端和客户端都可以实现。