第一个方法

;(function(win, lib) {var doc = win.document;var docEl = doc.documentElement;var metaEl = doc.querySelector('meta[name="viewport"]');var flexibleEl = doc.querySelector('meta[name="flexible"]');var dpr = 0;var scale = 0;var tid;var flexible = lib.flexible || (lib.flexible = {});if (metaEl) {console.warn('将根据已有的meta标签来设置缩放比例');var match = metaEl.getAttribute('content').match(/initial\-scale=([\d\.]+)/);if (match) {scale = parseFloat(match[1]);dpr = parseInt(1 / scale);}} else if (flexibleEl) {var content = flexibleEl.getAttribute('content');if (content) {var initialDpr = content.match(/initial\-dpr=([\d\.]+)/);var maximumDpr = content.match(/maximum\-dpr=([\d\.]+)/);if (initialDpr) {dpr = parseFloat(initialDpr[1]);scale = parseFloat((1 / dpr).toFixed(2));    }if (maximumDpr) {dpr = parseFloat(maximumDpr[1]);scale = parseFloat((1 / dpr).toFixed(2));    }}}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;}docEl.setAttribute('data-dpr', dpr);if (!metaEl) {metaEl = doc.createElement('meta');metaEl.setAttribute('name', 'viewport');metaEl.setAttribute('content', 'initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no');if (docEl.firstElementChild) {docEl.firstElementChild.appendChild(metaEl);} else {var wrap = doc.createElement('div');wrap.appendChild(metaEl);doc.write(wrap.innerHTML);}}function refreshRem(){var width = docEl.getBoundingClientRect().width;if (width / dpr > 540) {width = 540 * dpr;}var rem = width / 10;docEl.style.fontSize = rem + 'px';flexible.rem = win.rem = rem;}win.addEventListener('resize', function() {clearTimeout(tid);tid = setTimeout(refreshRem, 300);}, false);win.addEventListener('pageshow', function(e) {if (e.persisted) {clearTimeout(tid);tid = setTimeout(refreshRem, 300);}}, false);if (doc.readyState === 'complete') {doc.body.style.fontSize = 12 * dpr + 'px';} else {doc.addEventListener('DOMContentLoaded', function(e) {doc.body.style.fontSize = 12 * dpr + 'px';}, false);}refreshRem();flexible.dpr = win.dpr = dpr;flexible.refreshRem = refreshRem;flexible.rem2px = function(d) {var val = parseFloat(d) * this.rem;if (typeof d === 'string' && d.match(/rem$/)) {val += 'px';}return val;}flexible.px2rem = function(d) {var val = parseFloat(d) / this.rem;if (typeof d === 'string' && d.match(/px$/)) {val += 'rem';}return val;}})(window, window['lib'] || (window['lib'] = {}));

meta标签

<meta>标签有很多种,而这里要着重说的是viewportmeta标签,其主要用来告诉浏览器如何规范的渲染Web页面,而你则需要告诉它视窗有多大。在开发移动端页面,我们需要设置meta标签如下:

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">//如果你确定要用这个js请屏蔽掉,该js会自动创建

js会在html标签内创建这个:

<html data-dpr="2" style="font-size: 64px;">

现在样式写法

.test{background: url(img/m3-phone.32.png) no-repeat; background-size:122px 247px; width: 122px; height: 247px;}
[data-dpr="2"] .test {background: url(img/m3-phone.32@2x.png) no-repeat;}

这段js是来自淘宝移动端自适应方案,
详细链接:http://www.cnblogs.com/lyzg/p/5058356.html
在github:https://github.com/amfe/lib-flexible

方法二:
第二个方法则是使用css的device-pixel-ratio具体的写法如下:

.test1-r {background: url(img/m3-phone.32.png) no-repeat;background-size: 122px 247px;width: 122px;height: 247px;}
@media all and (-webkit-min-device-pixel-ratio: 1.5),all and (-o-min-device-pixel-ratio: 3 / 2),all and (min--moz-device-pixel-ratio: 1.5),all and (min-device-pixel-ratio: 1.5) {.test1-r {background: url(img/m3-phone.32@2x.png) no-repeat;background-size: 122px 247px;}}@media (-webkit-min-device-pixel-ratio: 2),(min-resolution: 192dpi) {.test1-r {background: url(img/m3-phone.32@2x.png) no-repeat;background-size: 122px 247px;}}@media (-webkit-min-device-pixel-ratio: 3),(min-resolution: 288dpi) {.test1-r {background: url(img/m3-phone.32@3x.png) no-repeat;background-size: 122px 247px;}}

方法三:
使用retina.js,具体的使用方法没有研究

移动端Retina屏幕图片适配相关推荐

  1. 【iOS 开发】iOS 开发 简介 (IOS项目文件 | MVC 模式 | 事件响应机制 | Storyboard 控制界面 | 代码控制界面 | Retina 屏幕图片适配)

    一. iOS 项目简介 1. iOS 文件简介 创建一个 HelloWorld 项目, 在这个 IOS 项目中有四个目录 : 如下图; -- HelloWorldTests 目录 : 单元测试相关的类 ...

  2. 7种方法实现移动端Retina屏幕1px边框效果

    在Reina(视网膜)屏幕的手机上,使用CSS设置的1px的边框实际会比视觉稿粗很多.在之前的项目中,UI告诉我说我们移动项目中的边框全部都变粗了,UI把他的设计稿跟我的屏幕截图跟我看,居然真的不一样 ...

  3. iOS视网膜(Retina)屏幕的适配方法

    转自:http://www.penddy.com/mobile-client-knowledge-processing-1-ios-retinal-adaptation-of-the-retina-s ...

  4. retina屏幕,适配

    点击打开链接 retina屏幕 http://www.jianshu.com/p/84c5cb3a485a 前端开发终端适配方案

  5. 移动端Retina屏幕1px边框问题

    问题:移动端开发过程中border出现问题 原因:css中的1px并不等于移动设备的1px,这些由于不同的手机有不同的像素密度.在window对象中有一个devicePixelRatio属性,他可以反 ...

  6. 7种方法解决移动端Retina屏幕1px边框问题

    造成边框变粗的原因 其实这个原因很简单,因为css中的1px并不等于移动设备的1px,这些由于不同的手机有不同的像素密度.在window对象中有一个devicePixelRatio属性,他可以反应cs ...

  7. 解决移动端Retina屏幕1px边框问题

    1.0.5px边框 6.viewport+REM

  8. 前端开发之——网页如何适配Retina屏幕

    前言 随着2012年苹果发布第一款Retina Macbook Pro(以下简称RMBP),Retina屏幕开始进入笔记本行业.两年过去了,RMBP的市场占有率越来越高,且获得了一大批设计师朋友的青睐 ...

  9. 【适配】521- 移动端开发各种兼容适配问题(屏幕、图像、字体与布局等)

    来源 | https://www.cnblogs.com/coco1s/p/11463599.html 本文是内部的一次分享沉淀,偏向基础但是涉及了一些有意思的细节,文笔有限,才疏学浅,文中若有不正之 ...

最新文章

  1. SingleCellExperiment类使用
  2. 云时代架构阅读笔记十三——你的系统如何处理高并发?
  3. 【VMCloud云平台】SCO(七)如何使用集成包
  4. for循环数据量太大_中文文本分类roberta大力出奇迹之数据量大的问题
  5. 【项目管理】知识域在过程组中的体现
  6. Redis简介及配置文件介绍
  7. 学了这么多年的人工智能居然还不了解它?
  8. win10 java环境变量
  9. 《精通 ASP.NET MVC 3 框架(第三版)》----第1章 设计思路 1.1 Web开发简史
  10. 开心农场违规 恐面临关停危险
  11. Nginx配置天地图缓存
  12. 计算机个人市场调查实验报告,市场调查实验报告(一)
  13. cocos2d-x 从win32到android移植的全套解决方案
  14. 复旦赵卫东:大数据的系统观
  15. 游戏出海迎来新高,出海的路上如何防范DDoS风险?
  16. android时间轴折线图,echarts时间轴折线图
  17. 点滴:均线交易策略代码的参考
  18. 从长尾市场切入 鲲云科技能做出一颗AI芯吗
  19. 教师计算机发展测评,中小学教师信息技术应用能力发展测评工具的设计研究
  20. 信号实验:随机信号的产生和分析

热门文章

  1. html,表格(table)属性中的 thead、tbody 以及 tfoot的关系
  2. 【IDEA】IntelliJ IDEA:Logging system failed to initialize using configuration from 'classpath:config/l
  3. 前端js单元测试 使用mocha、chai、sinon,karma
  4. JVM双亲委派机制全讲解
  5. 2021做运维的福利,80道面试常问的题目 答案这2天就可以整理完毕 能掌握面试 so easy
  6. 全卷积神经网络(FCN)论文笔记
  7. 用EXCEL 过滤数据
  8. JavaScript 中两个 !! 是什么意思?
  9. html 中 css 中 使背景照片覆盖全屏
  10. 《计算机网络》第一章 概述