谈响应式web设计代码实现

标签: 前端技术 响应式设计 | 发表时间:2014-12-04 13:54 | 作者:温总
出处:http://isux.tencent.com

在研究响应式的时候,记录了一些感想,分享出来,抛砖引玉,希望可以和大家一起讨论。总结下来,响应式比之前想象的要复杂得多。

1. ie9以下(不包括ie9)采用ie条件注释,为ie8以及一下单独开一个样式文件

1
2
3
<!--[if lt IE 9]>
<link href="lt9.css" rel="stylesheet" type="text/css">
<![endif]-->

2. 一个模块的mq样式整体放在这个模块的样式的之后,符合层叠逻辑,也同时以免被层叠。

3. 祈求在一个相应点上同时做变化几乎是不可能的,因为版式中间的变化,无论是视觉还是具体的编码人员不可能掌握所有细节。

4. 流体布局很关键,%视父级为参照物,这一点虽然很多人都知道,但是实际做的时候却最容易被忽略。

5. 清除浮动也很重要,切记。

6. 如果你希望边框、边距(内、外)也在100%的范围内,直接设置width:auto就好了,不要给予希望在新的css3属性上,也不要寄希望在-webkit上,-webkit-很容易就会变成下一个ie6了。

7. 合理的嵌套更加健壮,用一个包装元素来替代设置当前元素margin或者padding。举例,假如有A和B两个元素,width是40%,maring-right是10%,这样很容易在搜索浏览器的时候篡位,所以用一个包装元素C去分别包裹A和B,然给给C设置50%,A和B分别设置为80%。这样就是合理且健壮的嵌套了。

8. 两行两列这种设计,由于流体布局和字数的不同,所以为每一行添加一个包装元素,更加健壮。也就是说,先做两行,再在每一行里做两列。

9. 不要奢望在在每一个像素的宽度上不会出现超出预期的表现,因为没有任何人知道页面在每一个像素宽度时候的表现的样子,页面越负责可预期的就越不准确。所以mq可能真的是“非预期数值”(预期数值指代在设计和实现之前约定的响应点)

10. 相同区间的mq和mq会层叠,全局的样式也会和mq中的样式层叠,所以属性尽量不要写成缩写。以减少忘记的风险。

11. 图片的自适应处理不容易,特别是有边框的,如果正常条件(没有利用mq来约束)下设置了宽和高,在另外一个mq下,仅仅设置一个属性是不行的,还是那句话,mq不是二选一(除非是两个不同的mq区间),而是层叠!!

12. 如果水平列表的两端的元素两端对齐,以四个元素为例,那么除了前三个预留左边距,最后一个为零;或者第一个右边据为0;后三个有右边距以外。可以采用第一个左侧有,最后一个右侧有,中间两个左右偏移边距来做,短的一面为 边距除以空白数,比如4个列表项,边距为40,则40除以3。好处么?就是可以保证每一个外包装为通栏的25%。

13. 四个25%,两个50% 没关系,但是50% 25% 25%就可能会掉下去最后一个,所以24.99,22.49有时还会相差1~2像素。

14. 如果版式变化不大,那么从大到小的写mq,不必写一个区间,只写最大值即可,这样一层一层的继承,小尺寸继承大尺寸,另外,不用过分担心选择器本身权重的问题,mq会提高其优先级。

15. 像导航和版权这种在pc、pad、phone截然不同的版式。mq,就写区间。这样在区间外就等于这些dom毫无样式,这样就不比担心由继承引发的覆盖、优先级、重写以及未知问题。减少了属性的重写,提高了效率、降低了修改成本。其实就是等于一个dom,为不同的设备写不同的样式,这些样式之间不继承。

16. 如果你希望几个元素是相对位置不变的话,请将他们包裹,通过这个包裹元素使他们整体与其他元素或元素组做排版,所以一个健壮的响应式离不开这些看似“冗余”的包裹元素。但还是以最少的可实现目标的dom层级为目标。

17. 关于背景图,以中心为原点进行“裁剪”是理智的,已某一侧为原点看起来都有点怪。另外可以使用background-size某个值为auto,另外一个使用%

18. 大图片请写在一个mq区间内,不要只写最大值,这样会搞定按需加载的问题。

19. banner样式实践

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@media (min-width:1110px){
.banner{height:684px; background:url(img/banner1980.jpg) center center no-repeat; background-size:auto 100%;}
}/*高度一直填充,两侧裁剪,这种体验先看比较好*/
/*以下不同目标分辨率载入不同的图片,保证k数最佳,裁剪体验应该一致*/
@media (min-width:769px) and (max-width:1110px){
.banner{height:383px; background:url(img/banner1110.jpg) center center;}
}
@media (min-width:569px) and (max-width:768px){
.banner{height:265px; background:url(img/banner768.jpg) center center;}
}
@media (min-width:415px) and (max-width:568px){
.banner{height:196px; background:url(img/banner568.jpg) center center;}
}
@media (min-width:321px) and (max-width:414px){
.banner{height:143px; background:url(img/banner414.jpg) center center;}
}
@media (max-width:320px){
.banner{height:111px; background:url(img/banner320.jpg) center center;}
}

20. logo如果是在banner的背景图上镂空,这样是不推荐的。在缩小浏览器窗口宽度的时候,给人以很明显很明显的视觉差,感觉页面极其不健壮(至少我的感觉是这样),似乎有随时要散的感觉。文字也有这感觉,特别是有大量文字的时候。所以你会发现很多响应式好的网站,他的导航的底色都是纯色。logo和导航都不镂空在一张背景图上。当然也有少数在的,比如adobe。

21. 接20,一般banner图片几乎是满屏的可能高达1980px;而一般如果是居中的话,我们把导航和logo以及一些小功能,比如登录、搜索控制在1200px最大宽度,当页面大于这个最大宽度的时候,这个区域就像钉在了背景图上,不会导致有两个图层的感觉。所以当页面宽度马上等于最大宽度的时候,我们在利用mq重新写定义下一这个区域的最大宽度,当然是该小一点,这样就解决了20出现的那个问题。

22. png8的问题,ie6下就用纯色做底吧。我最理想的想法是,当用ie6访问所有公司web产品的时候,给用户一个页面,先登录QQ帐号,然后下载最新的QQ浏览器,然后发这个用户10个Q币。然后浏览器界就清静了。

23. 接21,当前mq中的这个区域的最大宽度等于下一个(更小的一个尺寸)mq的尺寸,这样就用户的钉在了背景图的上面了。

24. 对于相同的一些元素,某一个有特殊的样式,优先使用nth-of-type选择器。在测试ie8以及一下的时候,再为这个特殊的dom添加一个class之类,然后再在那个ie8以及一下的样式表中书写复制响应的规则。

25. body下有一个包裹元素,作为整体弹性的参照,为ie6、ie7单独写一个宽度,为什么是1000px,由于很难获得使用ie6的用户的分辨率,或者说获取了之后可能因为数据繁多不好决策,所以简单粗暴,认为使用ie6的都是低端设备用户,是小显示器用户,是1024*768分辨率;至于ie7,设置了4个25%的浮动,在缩小浏览器的过程中都能时不时的掉下去一个,对于小数点的像素就自动向上补全,太悲哀了。所以如下:

1
2
3
4
5
regular css file
.layout{width:100%; max-width:1980px; min-width:320px;*zoom:1; margin:0 auto;}
 
lt9 css file
.layout{*width:1000px; min-width:1000px;}/*ie8的最小宽度为1000px,ie7 6只有1000px*/

26. 对于一定要百分之百通栏的模块,比如,带有背景色的版权,或者banner,那么可以在lt9的文件夹里为ie7 6写一个不是只有1000px,而是可以100%的样式,但是切记这里只要有一列,否则就又产生了25中提到的问题,也许,你可以这么写:

1
2
3
4
5
6
7
8
lt9 css file
.layout{*width:1000px; min-width:1000px;}/*ie8的最小宽度为1000px,ie7 6只有1000px*/
.one-percent{width:100%;}/*新增的,一定要在layout的后面,否则对于ie6 7不生效*/
 
html dom
<div class="layout one-percent">
<!--code-->
</div>

所以我建议,把banner 主体部分 版权 三者用三个layout包裹,这样便于对ie6 ie7 ie8做样式。

27. 经过长达半年的持续统计,1366px用户最多,根据栅格化,n=24为基准,得出W=(A*n)-i,所以如果要设置最大宽度则设置为1310px;a=45px,i=10px;不过由于与门户和电商等网站的排版不同且主要为了弹性版式,所以这里最大宽度是我们所需要的,至于45px和10px,以后有固定版式的话可以使用。

28. 响应点:1366px 1200px 1110px 768px 568px 414px 320px;768以下的很好理解也方便约束,PC侧的响应点是较难控制的,所以前面三个值基本都是按照版式来操作的。原因参见3。

29. 有的人说写响应式从小往大写,意思是说先写手机端,然后写PC端,大致的原因是从大往小写的话,手机就要层叠和重写很多样式,可能会影响性能。理论上,我是赞成的,实际上我并没有测试过到底性能有多么影响。但是单单从布局的角度上讲,从设计的角度上讲,至少我的逻辑是从大往小写,因为小的基本都是在大的基础上做删减和布局的变化,所以写的时候逻辑比较顺畅。不过无论从大到小,还是从小到大,自己顺手就好。一般视觉都会先设计PC的,然后考虑mobile是什么样的,这一点也使得我是从大到小的去写。

30. 之前黄老师问我,认为响应式的难点是在设计上还是在技术上,我当时说是技术上没什么,关键是版式的变化和设计的体验。现在想想。版式变化固然是难点,但是技术手段也很重要,在这方面的深度和方式的选择要比版式上的选择复杂的多。

31. 响应式三大技术:流体、mq、弹性图片。

以上都是个人经验,难免片面,欢迎讨论。

相关 [响应式 web 设计] 推荐:

响应式Web设计

- - 葵中剑's Blog - SwordAir.com
响应式Web设计( Responsive Web Design – RWD)一般是指那些使用CSS3 Media Query特性制作站点,其可以适应不同视窗尺寸的布局. 虽然很早就已经有了类似RWD的概念,但直到最近一年里才开始变得特别流行,各种文章、例子、工具、模板,不断地从无到有,诸如:. 响应式Web设计50个例子和最佳实践.

自适应网页设计/响应式Web设计

- - HTML5研究小组
随着3G的普及,越来越多的人使用手机上网. 移动设备正超过桌面设备,成为访问互联网的最常见终端. 于是,网页设计师不得不面对一个难题:如何才能在不同大小的设备上呈现同样的网页. 手机的屏幕比较小,宽度通常在600像素以下;PC的屏幕宽度,一般都在1000像素以上(目前主流宽度是1366×768),有的还达到了2000像素.

50种响应式web设计的奇妙工具

- - Web App Trend
在您开始着手响应式站点的搭建之前,如果能拥有强有力的开发工具会让您的世界另有一番风采. 本文中Denise Javobs和Peter Gasston推荐了50种强大的工具来支持您建造响应式站点的过程. 在Ethan Marcotte的文章 《响应式web设计》以及他的 畅销书中最早首创介绍了建设响应式站点需要的三个元素:.

谈响应式web设计代码实现

- - 腾讯ISUX - 社交用户体验设计 - Better Experience Through Design
在研究响应式的时候,记录了一些感想,分享出来,抛砖引玉,希望可以和大家一起讨论. 总结下来,响应式比之前想象的要复杂得多. ie9以下(不包括ie9)采用ie条件注释,为ie8以及一下单独开一个样式文件. 一个模块的mq样式整体放在这个模块的样式的之后,符合层叠逻辑,也同时以免被层叠. 祈求在一个相应点上同时做变化几乎是不可能的,因为版式中间的变化,无论是视觉还是具体的编码人员不可能掌握所有细节.

响应式的WEB设计(三)- 桌面及移动设备的网页性能

- - 博客园_首页
移动设备由于受到带宽、处理器运算速度的限制,因而对网页的性能有更高的要求. 究竟是网页中的何种元素拉低了网页在移动设备中加载的速度呢. 这些元素应该做何处理以提升页面在移动设备中的整体性能. 是否存在一种设计模式可以同时满足移动端及桌面端的页面设计呢. 2、移动设备中网页的性能检测. 3、移动设备网页的性能瓶颈.

与瀑布模式说”再见”:教你5个步骤实现响应式Web 设计

- - Web App Trend
恭喜你终于使领导们信服:你的下一个Web 设计项目需要进行响应式设计. 虽然说服他们相信是一件非常艰难的事情,但是你现在不能在荣誉上休息. 现在项目最关键的问题是: 如何带领你的团队去构建响应式设计. 你可能熟悉典型的“瀑布模式”的开发过程:从系统需求分析开始,然后着手设计,接着开始前后台开发,最后进行评估并且实施.

响应式网页设计

- - 前端观察
这个话题最近很火爆,我也一直在关注,响应式网页设计和移动互联网密切相关,并因移动终端的丰富和普及而兴盛,并且是一个颇具争议的话题,我今天将和大家探讨下. 上周写了个简单的ppt在组内大概介绍了下,感兴趣的话可以 先看下这个PPT. 在说到这个话题前,我们先看下网页设计和前端开发的现状:. 全球有超过53亿手机用户(包括传统手机).

漫谈响应式设计

- - 新浪UED
学究一些,首先大家先了解一下响应,然后再讲一下设计,响应就是我发出的请求能得到什么样子的回复,比如我说“你好”,你会很容易的给我回复“你好”,因为大家都是中国人,如果我说“hello”,我们这代人如果上过初中,他也会给我说“Hello”,但是如果我给对你说“Bonjour”,那可能只有高配的人才可能知道了.