淘宝的flexible适配方案为什么只对iOS进行dpr判断,对于Android始终认为其dpr为1?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了淘宝的flexible适配方案为什么只对iOS进行dpr判断,对于Android始终认为其dpr为1?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3026字,纯文字阅读大概需要5分钟。
内容图文
![淘宝的flexible适配方案为什么只对iOS进行dpr判断,对于Android始终认为其dpr为1?](/upload/InfoBanner/zyjiaocheng/390/2b19f4b3c53c4690b781161c16edc235.jpg)
if (!dpr && !scale) { var isAndroid = win.navigator.appVersion.match(/android/gi); var isIPhone = win.navigator.appVersion.match(/iphone/gi); var devicePixelRatio = win.devicePixelRatio; if (isIPhone) { // iOS下,对于2和3的屏,用2倍的方案,其余的用1倍方案 if (devicePixelRatio >= 3 && (!dpr || dpr >= 3)) { dpr = 3; } else if (devicePixelRatio >= 2 && (!dpr || dpr >= 2)){ dpr = 2; } else { dpr = 1; } } else { // 其他设备下,仍旧使用1倍的方案 dpr = 1; } scale = 1 / dpr; }
回复内容:
能提出这个问题,想必你也是看过Android & iOS设计尺寸规范 相关的东西,如果没有这张图很很不错:第三代iPad发布会上,苹果给出了Retina设计标准的公式:
说多了......
(以下忽略低端机)
iPhone4, 4s, 5, 5s, 6, 6+, 6s, 6s+ 都是用的是Retina屏,其中4, 4s, 5, 5s, 6, 6s的ppi都是326,dpr都是2,6+和6s+ppi是441,dpr是3。在ipad上同样只有dpr2和3两种的屏幕。
再来看看安卓的吧,算了,我不想看dpr=1,1.5,1.75,2,2.5,3,4......
淘宝在设置initial-scale(屏幕缩放比)的同时使用的是rem的方式设置各种尺寸大小因为Android设备的兼容问题太过复杂,Android Pad 和 中兴 等国产 Android 机有很多奇葩的BUG,比如:name="viewport" content="width=divece-width,initial-scale=1,user-scalable=no"/>
故统一对 Android 设备进行 dpr = 1 处理。
- viewport content 的写法要兼容各种奇葩 Android 设备,兼容测试的成本很高
- 部分机型修改viewport之后产生屏幕抖动
- 部分机型 WebView Width 与屏幕实际宽度不一致
- 还有很多无法预料到的奇葩BUG存在
同时 flexible 是 2014年5月诞生的,国内的大前端对于移动端的经验还不算成熟,而手机淘宝能有这种思路,已经是非常厉害的一个方案!
顺便说点不相关的:
- 上述的几个小点的问题,后来阿里也有别的同学解决了,但方案并未开源
- 我们团队的方案是不对 viewport 进行缩放处理,仅根据 width 在 html 添加 font-size
- 对于1px 边框的处理是进行特性检查,对于支持的容器直接就写 border-width:0.5px
issue中有人提过这个问题 一些安卓厂商给定的dpr值并不准确if (window.devicePixelRatio && devicePixelRatio >= 2) { var docElem = document.documentElement; var testElem = document.createElement('div'); var fakeBody = document.createElement('body'); var refNode = docElem.firstElementChild || docElem.firstChild; testElem.style.border = '.5px solid transparent'; fakeBody.appendChild(testElem); docElem.insertBefore(fakeBody, refNode); if (testElem.offsetHeight == 1) { document.querySelector('html').classList.add('hairlines'); } docElem.removeChild(fakeBody); }
内容总结
以上是互联网集市为您收集整理的淘宝的flexible适配方案为什么只对iOS进行dpr判断,对于Android始终认为其dpr为1?全部内容,希望文章能够帮你解决淘宝的flexible适配方案为什么只对iOS进行dpr判断,对于Android始终认为其dpr为1?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。