<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta content="yes" name="apple-mobile-web-app-capable"> <!-- ios7.0版本以后,safari上已看不到效果,可以删除--> <meta content="black" name="apple-mobile-web-app-status-bar-style"> <meta content="telephone=no" name="format-detection"> <meta content="email=no" name="format-detection"> <title>viewport通用</title> <script type="text/javascript"> var phoneWidth = parseInt(window.screen.width); var phoneScale = phoneWidth / 750; var ua = navigator.userAgent; if (/Android (\d+\.\d+)/.test(ua)) { var version = parseFloat(RegExp.$1); if (version > 2.3) { document.write('<meta name="viewport" id="vie" content="width=750, minimum-scale = ' + phoneScale + ', maximum-scale = ' + phoneScale + ', target-densitydpi=device-dpi">'); } else { document.write('<meta name="viewport" id="vie" content="width=750, target-densitydpi=device-dpi">'); } } else { document.write('<meta id="vie" name="viewport" content="width=750, user-scalable=no, target-densitydpi=device-dpi, minimal-ui">'); } </script> <link style="text/css" rel="stylesheet" href="home.css"> <script type="text/javascript" src="js/app.js"></script> </head> <body> <!--页面内容--> </body> </html>
<meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" name="viewport">
html{font-size:10px} @media screen and (min-width:321px) and (max-width:375px){html{font-size:11px}} @media screen and (min-width:376px) and (max-width:414px){html{font-size:12px}} @media screen and (min-width:415px) and (max-width:639px){html{font-size:15px}} @media screen and (min-width:640px) and (max-width:719px){html{font-size:20px}} @media screen and (min-width:720px) and (max-width:749px){html{font-size:22.5px}} @media screen and (min-width:750px) and (max-width:799px){html{font-size:23.5px}} @media screen and (min-width:800px){html{font-size:25px}}
321px <= device-width <= 375px,font-size:11px ---> .item的width:(11*3.4)px 376px <= device-width <= 414px,font-size:12px ---> .item的width:(12*3.4)px 415px <= device-width <= 639px,font-size:15px ---> .item的width:(15*3.4)px 640px <= device-width <= 719px,font-size:20px ---> .item的width:(20*3.4)px 720px <= device-width <= 749px,font-size:22.5px ---> .item的width:(22.5*3.4)px 750px <= device-width <= 799px,font-size:23.5px ---> .item的width:(23.5*3.4)px 800px <= device-width ,font-size:25px ---> .item的width:(25*3.4)px
根据不同分辨率的屏幕,设置font-size也太多了吧,在实际项目中一般也用不了这么多。
通过font-size的值,每次去设置margin,width,height,padding等的长度时,都要通过设计搞再计算一下才行。比如比如40px / 11px,你一下说不出结果吧。
顶部与底部的bar不管分辨率怎么变,它的高度和位置都不变
中间每条 *** 信息不管分辨率怎么变, *** 公司的图标等信息都位于条目的左边,薪资都位于右边
网易的做法
<meta name="viewport" content="initial-scale=1,maximum-scale=1, minimum-scale=1">
var deviceWidth = document.documentElement.clientWidth; if(deviceWidth > 640) deviceWidth = 640; document.documentElement.style.fontSize = deviceWidth / 6.4 + 'px';
如果设计稿基于iphone6,横向分辨率为750,body的width为750 / 100 = 7.5rem 如果设计稿基于iphone4/5,横向分辨率为640,body的width为640 / 100 = 6.4rem
@media screen and (max-width:321px){ .m-navlist{font-size:15px} } @media screen and (min-width:321px) and (max-width:400px){ .m-navlist{font-size:16px} } @media screen and (min-width:400px){ .m-navlist{font-size:18px} }
*** 的做法
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
var scale = 1 / devicePixelRatio; document.querySelector('meta[name="viewport"]').setAttribute('content','initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no');
document.documentElement.style.fontSize = document.documentElement.clientWidth / 10 + 'px';
比较网易与 *** 的做法
都能适配所有的手机设备,对于pad,网易与 *** 都会跳转到pc页面,不再使用触屏版的页面
都需要动态设置html的font-size
布局时各元素的尺寸值都是根据设计稿标注的尺寸计算出来,由于html的font-size是动态调整的,所以能够做到不同分辨率下页面布局呈现等比变化
容器元素的font-size都不用rem,需要额外地对font-size做媒介查询
都能应用于尺寸不同的设计稿,只要按以上总结的 *** 去用就可以了
*** 的设计稿是基于750的横向分辨率,网易的设计稿是基于640的横向分辨率,还要强调的是,虽然设计稿不同,但是最终的结果是一致的,设计稿的尺寸一个公司设计人员的工作标准,每个公司不一样而已
*** 还需要动态设置viewport的scale,网易不用
最重要的区别就是:网易的做法,rem值很好计算, *** 的做法肯定得用计算器才能用好了 。不过要是你使用了less和sass这样的css处理器,就好办多了,以 *** 跟less举例,我们可以这样编写less:
//定义一个变量和一个mixin @baseFontSize: 75;//基于视觉稿横屏尺寸/100得出的基准font-size .px2rem(@name, @px){ @{name}: @px / @baseFontSize * 1rem; } //使用示例: .container { .px2rem(height, 240); } //less翻译结果: .container { height: 3.2rem; }
6. 如何与设计协作
标签: CSS