文档章节

H5 页面适配所有 iPhone 和安卓机型的六个技巧

最帅的刘先生
 最帅的刘先生
发布于 2016/05/13 00:33
字数 1491
阅读 80
收藏 6

目前,很多APP设计师小伙伴已经开始转向H5前端开发啦,但是解决所有iPhone和安卓机型的适配问题是我们的重中之重。无论是设计APP还是写前端H5.都是要考虑移动端的兼容性。 今天跟大家来回顾一下H5页面去适配所有iPhone和安卓机型的一些技巧和办法。 回归正题,兼容iphone各版本机型最佳的方式就是自适应。 1、viewport 简单粗暴的方式: <meta name="viewport" content="width=320,maximum-scale=1.3,user-scalable=no"> 直接设置viewport为320px的1.3倍,将页面放大1.3倍。

为什么是1.3?

目前大部分页面都是以320px为基准的布局,而iphone6的宽度比是375/320 = 1.171875,iphone6+则是 414/320 = 1.29375那么以1.29倍也就约等于1.3了。

2、ip6+ 的CSS media query @media (min-device-width : 375px) and (max-device-width : 667px) and (-webkit-min-device-pixel-ratio : 2){ /iphone 6/ }

@media (min-device-width : 414px) and (max-device-width : 736px) and (-webkit-min-device-pixel-ratio : 3){ /iphone 6 plus/ }

PS: 也可以直接使用实际的device-width:如 device-width : 375px

在原有页面的基础上,再针对相应的屏幕大小单独写样式做适配。

3、REM布局

REM是CSS3新增的一种单位,并且移动端的支持度很高,android2.x+,ios5+ 都支持。REM是相对于dom结构的根元素来设置大小,也就是html这个元素。相较于em单位,rem使用上更容易理解及运用。

REM与PX的换算可以查看网址: https://offroadcode.com/prototypes/rem-calculator/

假设,html我们设置font-size:12px; 也就是说12px相对于1rem,那么18px也就是 18/12 = 1.5rem。

那么我们以320px的设计布局为基准,将html设置为font-size:100px,即100px = 1rem。(设置100px是为了方便计算)那么可以将大部分px单位除以100就可以直接改成rem单位了。

REM如何做响应式布局? 1、如果仅仅是适配ip6+设备,那么使用media query就行。

伪代码如下:

/320px布局/ html{font-size: 100px;} body{font-size: 0.14rem /实际相当于14px/}

/* iphone 6 / @media (min-device-width : 375px) and (max-device-width : 667px) and (-webkit-min-device-pixel-ratio : 2){ html{font-size: 117.1875px;} } / iphone6 plus */ @media (min-device-width : 414px) and (max-device-width : 736px) and (-webkit-min-device-pixel-ratio : 3){ html{font-size: 129.375px;} } 这样,在ip6下,也就将页面内的元素放大了1.17倍,ip6+下也就是放大了1.29倍。

2、如果是完全自适应,那么可以通过JS来控制。

(function (doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize', recalc = function () { var clientWidth = docEl.clientWidth; if (!clientWidth) return; docEl.style.fontSize = 100 * (clientWidth / 320) + 'px'; };

// Abort if browser does not support addEventListener if (!doc.addEventListener) return; win.addEventListener(resizeEvt, recalc, false); doc.addEventListener('DOMContentLoaded', recalc, false); })(document, window); 页面初始化的时候计算font-size,然后再绑定resize事件。这种效果就和百分比布局一样了。

那么用REM做单位与百分比做单位有什么优势?

主要优势在于能更好的控制元素大小。(一般百分比应用在布局层,一般常见设置为50%,33.3%,25%之类的整数居多,难以运用在复杂的页面小部件内)。但是相比百分比布局,需要借助JS或media query实现,略有一点瑕疵。 4、图片自适应

刚说完REM布局,那么用百分比布局也能实现一样的效果,但是用百分比布局,必须要面临一个问题:图片宽度100%,页面加载时会存在高度塌陷的问题。.

如图:页面加载时图片高度默认不存在。 那么可以用padding-top设置百分比值来实现自适应。

公式如下:

padding-top = (Image Height / Image Width) * 100%

原理:padding-top值为百分比时,取值是是相对于宽度的。 相关代码实现:

<div class="cover"> <img src="http://g.ald.alicdn.com/bao/uploaded/i1/TB1d6QqGpXXXXbKXXXXXXXXXXXX_!!0-item_pic.jpg_160x160q90.jpg" alt=""/> </div> .cover{position: relative; padding-top: 100%; height: 0; overflow: hidden;} .cover img{position: absolute; top: 0; width: 100%;} 5、图片高清化

大家都知道,iphone6 plus 是3倍高清图了,它的devicePixelRatio = 3。

关于DPR的介绍可以查看这篇文章《 设备像素比devicePixelRatio简单介绍 》

在ios8下,已经开始支持img的 srcset 属性了(目前移动端也就ios8开始支持),也就是说,可以对一张图片设置2个URL,浏览器自动加载对应的图片。

支持程度如下:

黄色表示仅支持旧的srcset规范,绿色表示支持全新的srcset规范,包括sizes属性,w描述符。 这里不展开,详细了解可自行google。

6、背景图高清化

media query 实现高清化

img标签的高清化,可以通过JS判断devicePixelRatio的值来加载不同尺寸的图片,但是对于背景图,写在CSS中的,用JS来判断就略麻烦了,还好CSS通过media query也能判断dpr。

目前兼容性最好的背景图高清化实现方式,使用media query的 -webkit-min-device-pixel-ratio 做判断: /* 普通显示屏(设备像素比例小于等于1)使用1倍的图 */ .css{ background-image: url(img_1x.png); }

/* 高清显示屏(设备像素比例大于等于2)使用2倍图 */ @media only screen and (-webkit-min-device-pixel-ratio:2){ .css{ background-image: url(img_2x.png); } }

/* 高清显示屏(设备像素比例大于等于3)使用3倍图 */ @media only screen and (-webkit-min-device-pixel-ratio:3){ .css{ background-image: url(img_3x.png); } } 进一步,可以通过工具生成相应的3x,2x,1x的图片及css,在使用时直接引用即可。谁搞一个?

关于移动设备的 -webkit-min-device-pixel-ratio 值,可以查看该网页的整理: http://bjango.com/articles/min-device-pixel-ratio/

image-set 实现高清化 image-set,它是Webkit的私有属性,也是Css4的一个属性,它是为了解决Retina屏幕下的图像显示而生。

使用方式也很简单。伪代码如下:

.css { background-image: url(1x.png); /不支持image-set的情况下显示/ background: -webkit-image-set( url(1x.png) 1x,/* 支持image-set的浏览器的[普通屏幕]下 / url(2x.png) 2x,/ 支持image-set的浏览器的[2倍Retina屏幕] / url(3x.png) 3x/ 支持image-set的浏览器的[3倍Retina屏幕] */ ); } 目前移动端的支持程度来看,ios7+,Android 4.4+ 下已经支持了。如果仅仅是做ip6+的高清适配方案。 image-set 也是一种实现方案。

本文转载自:http://blog.csdn.net/maodoudou1217/article/details/51241725

最帅的刘先生
粉丝 6
博文 36
码字总数 12827
作品 0
成都
程序员
私信 提问
「前端」rem 缩放方案 flexible-js 兼容 375px 方案的思路

本文来自尚妆前端团队南洋 发表于尚妆github博客,欢迎订阅。 移动端H5页面rem缩放方案flexible.js兼容375px方案的思路 参考: 移动端高清、多屏适配方案 viewport-and-flexible.js flexibl...

尚妆产品技术刊读
2017/03/02
0
0
JavaScript 判断 iPhone X Series 机型

原文链接:JavaScript 判断 iPhone X Series 机型 写在前面 如果有更优雅的方式,一定要告诉我! 现状 iPhone X 底部是需要预留 34px 的安全距离,需要在代码中进行兼容。 现状对于 iPhone X...

axuebin
01/26
0
0
Android 跳转权限设置界面的终极方案

转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/10338377.html 有时候APP需要获取某些权限,要让用户手动打开,那么问题来了,若是直接提醒用户出去找权限入口,然后自己打开,...

妖久
01/30
0
0
【viewport】移动设备的兼容性问题

本文转载于:猿2048网站➞【viewport】移动设备的兼容性问题 前段时间用微信开发者工具重构一个菜单项目的时候发现在安卓设备上显示没有问题,在iphoneSE显示不全以及布局错乱的问题,找到了一...

前端老手
09/07
19
0
如何使用image-set适配移动端高清屏图片

一、注意注意注意! 什么dpr、css像素、设备像素,这里是没有的,网上太多讲解了,都很好,这里不废话,建议是先查找相关资料了解再看本文章。 该图片适配方案是基于vw单位适配方案的,具体如...

bug给我滚
2018/08/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

网站安全维护公司对渗透测试php后门分析

很多想做渗透测试的朋友都想了解关于PHP后门漏洞的安全测试重点方法,以及该如何预防被中php后门,本节由我们的Sine安全高级渗透工程师进行全面的讲解,来让大家更好的理解和了解php代码的安全...

网站安全
1分钟前
0
0
在github上创建代码仓库时忘记添加.gitignore文件或修改了.gitignore该怎么办?

#清除本地缓存(改变成未track状态) #git rm -r --cached . 表示清除项目中所有文件的本地缓存 git rm -r --cached xxx #xxx表示不想版本控制的文件,比如小编可以输入test.o #.gitignore中的...

博爱飞扬
2分钟前
0
0
Fsimage 与 EditLog定义及合并过程

有很多客户端在向 hdfs 中写数据,同时有很多客户端在查数据,这就涉及到一个响应速度问题。因为只有一个 namenode ,客户端在写的时候,必须迅速记下来。 1. 向 namenode 询问可以存储到哪些...

Garphy
5分钟前
0
0
TI KeyStone C66x开发板处理器、NAND FLASH、NOR FLASH

TL6678F-EasyEVM是广州创龙基于SOM-TL6678F核心板而研发的一款多核高性能DSP+FPGA开发板。开发板采用核心板+底板方式,底板采用沉金无铅工艺的8层板设计,尺寸为247.33mm*139.8mm,它为用户提...

Tronlong创龙
23分钟前
3
0
【2019年8月版本】OCP 071认证考试最新版本的考试原题-第13题

Choose the best answer. Examine this query: SELECT TRUNC (ROUND(156.00,-2),-1) FROM DUAL; What is the result? A) 16 B) 160 C) 150 D) 200 E) 100 Answer:D (解析:关键就是 round ......

oschina_5359
33分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部