em  参照本身元素的 font-size

rem 参照 html 根元素 的 font-size

1. rem 适配   (同一元素,在不同设备上,效果一样)

适用情况: 当页面大于 独立像素375 时,或者页面元素很多时

  • 原理

页面中的元素,统一 单位 rem(字体使用 px 而不使用 rem)

根元素字体大小 设置成 整个屏幕的宽(1 rem = 375px),然后元素的 css 像素根据占据屏宽,使用 rem

  • // 适配 (手写 面试题)
    (function(){
    /* 1. 创建 style 标签 */
    var styleNode = document.createElement("style"); /* 2. 给 style 标签添加内容 (屏幕分份, 大多数公司 16 份) */
    styleNode.innerHTML = "html {"+
    "font-size:"+width/16+"px !important"+
    "}"; /* IPhone 6 的 font-size: 23.4375px */ /* 3. 把 style 标签追加到 head 标签里 */
    document.head.appendChild(styleNode);
    }());

缺点: 需换算元素占屏幕的 rem

2. viewport 适配

适用情况: 当 ui 设计图 小于 独立像素 375时。        避免换算,直接使用 css 像素单位 px

缺点: 图片可能失真; 打破完美布局视口。

  • 原理:

让 布局视口 等于 设计图纸的 width

  • 方案1

(直接 让meta 标签中 content 的 布局视口 width=320px 安卓不支持)

  • 方案2
  • (放大操作 initial-scale=375/320,布局视口变小)
  • <head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
    </head> <script type="text/javascript">
    var clientWidth = document.documentElement.clientWidth; var targetWidth = 320; var scale = clientWidth/targetWidth; var metaNode =
    document.querySelector("meta[name='viewport']"); metaNode.content = "initial-scale="+scale+
    ", user-scalable=no";
    </script>

3. 百分比适配

zepto 移动端实战项目。

适用情况: 页面元素少。

4. 媒体选择器(响应式布局)

不同屏幕,自适应呈现出不同的布局。

5. 具体像素值

适用情况: 当 ui 设计图 未标明 宽度,以及元素的具体位置时。

关键点:

  • 结合 媒体选择器 在不同情况下,使用 2x 图 和 3x 图(dpr=2时使用2x图,dpr=3时使用3x图)
  • 元素不可直接使用 ui 设计图 的标注px,必须问清楚 dpr 是多少,然后算出具体的 css 像素
    • css 像素 = 物理像素 / dpr  = 位图像素/dpr = 设计图px/dpr
    • css 像素 = 128/2 = 64          比如 128px*128px 的图片的 css 像素应该是 64 px

mobile_5 种常见适配_设备兼容的更多相关文章

  1. 迅为4412开发板Linux驱动教程——总线_设备_驱动注册流程详解

    本文转自:http://www.topeetboard.com 视频下载地址: 驱动注册:http://pan.baidu.com/s/1i34HcDB 设备注册:http://pan.baidu.c ...

  2. 解决蓝屏代吗0x0000007B的几种常见办法

        解决蓝屏代吗0x0000007B的几种常见办法 0x0000007B 蓝屏代码的分析 ◆错误分析:Windows在启动过程中无法访问系统分区或启动卷. 网络上经过收集,主要有四种可能.第一是新 ...

  3. 移动Web开发图片自适应两种常见情况解决方案

    本文主要说的是Web中图片根据手机屏幕大小自适应居中显示,图片自适应两种常见情况解决方案.开始吧 在做配合手机客户端的Web wap页面时,发现文章对图片显示的需求有两种特别重要的情况,一是对于图集, ...

  4. 迅为4412开发板Linux驱动教程——总线_设备_驱动注冊流程具体解释

    视频下载地址: 驱动注冊:http://pan.baidu.com/s/1i34HcDB 设备注冊:http://pan.baidu.com/s/1kTlGkcR 总线_设备_驱动注冊流程具体解释 • ...

  5. 几种常见的Android自动化测试框架及其应用

    随着Android应用得越来越广,越来越多的公司推出了自己移动应用测试平台.例如,百度的MTC.东软易测云.Testin云测试平台…….由于自己所在项目组就是做终端测试工具的,故抽空了解了下几种常见的 ...

  6. 移动站Web开发图片自适应两种常见情况解决方案

    本文主要说的是Web中图片根据手机屏幕大小自适应居中显示,图片自适应两种常见情况解决方案.开始吧 在做配合手机客户端的Web wap页面时,发现文章对图片显示的需求有两种特别重要的情况,一是对于图集, ...

  7. 【原】pageResponse - 让H5适配移动设备全家(移动端适配)

    上一篇文章<为什么选择iPhone5的分辨率作为H5视觉稿尺寸>最后留下了问题:是否需要视觉设计师设计多套的视觉稿供给前端工程师做页面适配呢?按照自己以前的方法,通常会要求设计师设计2套的 ...

  8. 【原】让H5页面适配移动设备全家 - 前端篇 - PPT

    7月份在部门内给设计中心的同事们带来<让H5页面适配移动设备全家 - 设计师篇 - PPT>的分享,在视觉和交互稿上提出页面适配的建议及提升页面体验的好处,促进前端和设计双方更好的合作,同 ...

  9. 几种常见的Shell

    Unix/Linux上常见的Shell脚本解释器有bash.sh.csh.ksh等,习惯上把它们称作一种Shell.我们常说有多少种Shell,其实说的是Shell脚本解释器. bash bash是L ...

随机推荐

  1. Regularity criteria for NSE 6: $u_3,\p_3u_1,\p_3u_2$

    In [Zujin Zhang, Jinlu Li, Zheng-an Yao, A remark on the global regularity criterion for the 3D Navi ...

  2. python3 asyncio-协程模块测试代码

    import time import asyncio #统计运行时间的装饰器 def run_time(func): def wrapperfunc(*argv, **kwargv): now = l ...

  3. [面试] mysql 面试题

    最近在准备面试,mysql 实在是不熟悉,就先摘录一些网上的面试题来看一下. 1. MyISAM 和 InnoDB 区别? InnoDB 支持事务处理,支持更大的并发update 和 insert 操 ...

  4. ionic 扫描二维码 Barcode Scanner、QR Scanner、ZBar

    1.简介 ionic 官方给我们提供了三个扫描二维码条形码插件,分别为: Barcode Scanner 样式好看,类似支付宝的扫描框.速度稍微比最后一个慢几百毫秒,主要问题是 Android 部分手 ...

  5. 405 css样式的研究 list-style-type 属性研究

    CSS 列表的样式 list-style-type.list-style-position和list-style-image 属性 在CSS中,列表元素是一个块框,列表中的每个表项也是一个块框,只是在 ...

  6. 【原创】大叔问题定位分享(18)beeline连接spark thrift有时会卡住

    spark 2.1.1 beeline连接spark thrift之后,执行use database有时会卡住,而use database 在server端对应的是 setCurrentDatabas ...

  7. Python-Django-Djangorestframwork

    1 CBV源码分析(cbv和fbv) 1 在views中写一个类,继承View,里面写get方法,post方法 2 在路由中配置: url(r'^test/', views.Test.as_view( ...

  8. vs查找功能不显示查找结果

    今天打开vs,查找的时候发现查找结果窗口不出现了,导致看不到查找结果. 网上各种搜索,甚至看到不少说什么要重装vs的解决方案,我也是醉了...... 其实解决办法很简单啊 vs--窗口--重置窗口布局 ...

  9. Java实现大数乘法运算

    基本思路:将输入的两个大数以字符串的形式存储,然后转化成整型数组存储,通过整型数组进行乘法运算(采用分治的思想) 即乘法分配律,如AB*CD=AC(AD+BC)BD,将两个数组逐位相乘的结果对位存放在 ...

  10. FM算法(二):工程实现

    主要内容: 实现方法 Python实现FM算法 libFM   一.实现方法 1.FM模型函数 变换为线性复杂度的计算公式: 2.FM优化目标 根据不同的应用,FM可以采用不同的损失函数loss fu ...