build网站制作当前位置:首页>主要服务>网站制作响应式网站这个话题最近很火爆,易势也一直在关注,响应式网页设计和移动互联网密切相关,并因移动终端的丰富和普及而兴盛,并且是一个颇具争议的话题,我今天将和大家探讨下。
移动互联网的现状和未来
在说到这个话题前,我们先看下网页设计和前端开发的现状:
嗯,大家也许已经开始注意到,自己和身边的朋友也都越来越多的用上了iPhone或者android手机或平板——一两年前我们预料的移动互联网时代即将来临,现在已然实现了——我们正处在移动互联网快速发展的时代——已经不再是起步阶段了。
那么,什么是响应式网页设计?
响应式网页设计是Ethan Marcotte在去年5月份提出的一个概念,简而言之,就是一个网站能够兼容多个终端——而不是为每个终端做一个特定的版本。这个概念可以说是是为移动互联网而生的! 或许大家之前会注意到,有很多知名网站都推出了iPhone或针对智能手机的专门网站,比如3g.qq.com、m.taobao.com、ipad.xxx.com等等。。。甚至前端观察之前也尝试过用wordpress插件实现m.qianduan.net的移动网站。 那么问题就来了——我们要为每一个设备做一个单独的网站吗?来让网站在每个设备中得到相应的视觉风格和操作体验? 这样势必就要增加很多的工作量,而且很多还是重复的。 我们在做页面的时候,一般很强调模块化的概念,我们要求一个合格的模块要能够“可扩展、无侵染”,它要能够用在任何地方都能够正常的显示。响应式网页设计与此类似——网站在任何设备中都能够正常适配,而不用为每个设备单独做个子网站! 但是,产品经理和设计师可能还是会要求网站在各个浏览器里面表现要一模一样,甚至要像素还原——WTF!不同的浏览器本身的功能、行为和处理方式都不一样,为什么要表现完全一样?!
怎么做?
其实响应式网页的实现很简单,都是大家熟悉的技术。 media query(媒体查询)因为现在主流的智能终端都是基于iOS和Android的,而它们自带的浏览器都是基于webkit内核,所以我们可以完全使用viewport属性和media query技术实现网站的响应性:
<meta name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1">
后面的initial-scale表示初始缩放,maximum-scale表示最大缩放比例,1意味着不能进行缩放。
当然依靠屏幕宽度来进行适配是最简单的方法,media query有很多参数可以使用比如orientation、aspect-ratio等。 其实,media query是响应式网页设计中被用到最多的技术。 fluid grid(流体网格)很多项目都在使用网格技术(或者叫栅格),前几年960.gs很流行,但是随着屏幕分辨率的普遍提升,它已经不太适合当前需求了,于是最近几年fluid grid开始逐渐多了起来,这种技术其实也很简单,只是将格栅的单位由px变成%,用百分比来控制页面每列的宽度,从而实现宽度的自适应。 使用流体网格的网站能够根据屏幕宽度自动调整页面中每列的宽度,从而保证页面的完整展现和基本功能。这也是一种不错的方法。 flex boxflex box是css3中的新技术,它很强大,可以实现很多我们之前无法想象的自适应布局。 有时我们希望网站能够以webapp的外观呈现给手机用户,flexbox是个不二的选择。 比如,要实现这样的简单结构:
它很像一个app的结构,头部和底部固定,中间高度自适应,用flexbox可以简单实现:
HTML代码:
虽然这里还会有点儿问题,比如主内容区域内容太多会被隐藏掉,因为android webkit和iOS 5之前的mobile safari均不支持overflow:scroll属性,但是这个问题还是很好解决的,比如在里面嵌套一个子容器,用js来给定个高度并使用定位来实现滚动条从而完整展示内容,或者直接使用iscroll等js库来实现。好消息是,iOS5中safari开始支持overflow:scroll了。 不足之处如果你关注网站性能之类的话,可能已经发现了一些问题:
任何一个方案都不是完美的,但也不会很糟糕。下面我们会提到一些可行的优化方案: HTML5本地存储对于支持HTML5 appcache /manifest特性的浏览器,我们可以将一些不常改动的静态资源存储到本地,比如css文件,css中用到的图片,以及一些js文件等:
然后将文件保存为manifest格式,并在HTML标签中引入即可:
<html manifest="responsive.manifest">
这样,用户在第一次访问的时候会慢一点儿,但是后续访问会很快,3G网络中也能为用户节省带宽。 移动设备优先一种新的设计流程是,先为移动设备设计界面,然后将PC端作为一个扩展。 这样做的好处是显而易见的,移动终端不会加载多余的资源,也不会因为PC端的样式而重绘页面,同时也不会影响PC端的表现。 流体图片(fluid image)页面中的图片有时会比手机/平板的屏幕(viewport)宽,这样会将页面容器撑开,但是移动浏览器又不能scroll,结果图片被切掉一部分,然后还会有一部分内容被隐藏掉,用户看不到。 解决这个问题的方法很简单,将img的最大宽度设置成100%就可以了: img{max-width:100%} 嗯,这里的前提是,没有给img标签设置宽度和高度,否则显示会有问题。另外不建议直接设置width=”100%”,因为会把小图拉大,模糊显示。 同理,video标签和iframe标签的宽度也可以这样做,而且最好不要使用iframe,宽度是个问题,性能也是一个方面吧。 CSS3 image这个方法有些惊艳 我们都知道可以用::before和::after伪元素+content属性来动态显示一些内容或者做其它很酷的事情,而且在CSS 2.1中即被支持。不过content属性在CSS 2.1中只能用于这两个伪元素中,而在CSS3中,任何元素都可以使用content属性了,这个方法就是结合css3 的attr属性和HTML自定义属性的功能: <img src="image.jpg" data-src-600px="image-600px.jpg" data-src-800px="image-800px.jpg" alt=""> 然后用media query来动态赋值:
当然,这种方法也有不足之处,比如PC端宽屏幕需要加载两个图片文件,然后我们也要为此准备多张图片文件等。 pre标签有的网站,比如,像前端观察这样的技术博客,会用pre来显示源代码,而浏览器对pre标签默认设置white-space:pre,这样,代码就不会换行,从而撑开子容器,造成内容被隐藏的问题:
右边的文字被隐藏掉了。 解决方法很简单: pre{ white-space:pre-wrap word-wrap: break-word; word-break: break-all;/*如果要兼容IE,可以加上这句,连续字母断行的问题伤不起啊。。。。*/ } 当然,不只是pre标签,关键是white-space和word-break属性的值。 主要的技术和技巧其实就这些。 1
|
易势沈阳建站专业机构,以DIV+CSS为主,js/jQuery为辅,制作利于优化,页面美观的优质网站!
网络策划公司|新浪官方微博|大连网站建设
沈阳易势科技有限公司 网站制作网络营销公司 © 2011 , All rights reserved. 公司地址:沈阳市铁西区贵和街道建设中路15号浅草绿阁商务楼402室沈阳做网站 沈阳建站
辽B2-20150173-8