H5自适应
- 一、设置html的font-size,使用rem作为单位
假设设计稿宽度750px,屏幕宽高750px,
1、1rem=屏幕宽度/设计稿宽度*100px,适合用px表示宽度
1rem=100px
rem=实际/100,300px=3rem
2、1rem=屏幕宽度/10,适合用百分比表示宽度
1rem=75px
rem=实际/设计稿宽度*10=百分比值/10,250px=30%=3rem
JS
1 (function(doc, win) {
2 var pageWidth = 750;
3 var docEl = doc.documentElement,
4 isIOS = navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),
5 dpr = isIOS ? Math.min(win.devicePixelRatio, 3) : 1,
6 dpr = window.top === window.self ? dpr : 1, //被iframe引用时,禁止缩放
7 dpr = 1,
8 scale = 1 / dpr,
9 resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize';
10 docEl.dataset.dpr = dpr;
11 var metaEl = doc.createElement('meta');
12 metaEl.name = 'viewport';
13 metaEl.content = 'initial-scale=' + scale + ',maximum-scale=' + scale + ', minimum-scale=' + scale;
14 docEl.firstElementChild.appendChild(metaEl);
15 var recalc = function() {
16 var width = docEl.clientWidth;
17 if (width / dpr > pageWidth) {
18 width = pageWidth * dpr;
19 }
20 // 乘以100,px : rem = 100 : 1
21 docEl.style.fontSize = 100 * (width / pageWidth) + 'px';
22 };
23 recalc()
24 if (!doc.addEventListener) return;
25 win.addEventListener(resizeEvt, recalc, false);
26 })(document, window);
- 二、设置viewport的scale,缩放视口
1 var view_timer = null;
2 function viewPort(userAgent, pageWidth) {
3 var oView = document.getElementById('viewport');
4 if (oView) {
5 document.head.removeChild(oView);
6 }
7 if (!pageWidth) {
8 pageWidth = 750;
9 }
10 var screen_w = parseInt(window.screen.width),
11 scale = screen_w / pageWidth;
12
13 var creat_meta = document.createElement('meta');
14 creat_meta.name = 'viewport';
15 creat_meta.id = 'viewport';
16 if (/Android (\d+\.\d+)/.test(userAgent)) {
17 var version = parseFloat(RegExp.$1);
18 if (version > 2.3) {
19 creat_meta.content = 'width=' + pageWidth + ', initial-scale = ' + scale + ',user-scalable=1, minimum-scale = ' + scale + ', maximum-scale = ' + scale + ', target-densitydpi=device-dpi';
20 } else {
21 creat_meta.content = '"width=' + pageWidth + ', target-densitydpi=device-dpi';
22 }
23 } else {
24 if(window.orientation=='-90' || window.orientation == '90'){
25 scale = window.screen.height / pageWidth;
26 creat_meta.content = 'width=' + pageWidth + ', initial-scale = ' + scale + ' ,minimum-scale = ' + scale + ', maximum-scale = ' + scale + ', user-scalable=no, target-densitydpi=device-dpi';
27 }
28 else{
29 creat_meta.content = 'width=' + pageWidth + ', initial-scale = ' + scale + ' ,minimum-scale = ' + scale + ', maximum-scale = ' + scale + ', user-scalable=no, target-densitydpi=device-dpi';
30 }
31 }
32 document.head.appendChild(creat_meta);
33 }
34 viewPort(navigator.userAgent);
35
36 window.onresize = function() {
37 clearTimeout(view_timer);
38 view_timer = setTimeout(function(){
39 viewPort(navigator.userAgent);
40 }, 500);
41 }
H5自适应的更多相关文章
- 移动h5自适应布局
问题一,分辨率Resolution适配:不同屏幕宽度,html元素宽高比和字体大小,元素之间的距离自适应,使用rem单位. 问题二,单位英寸像素数PPI适配:使用rem单位,文字会发虚.段落文字,使用 ...
- H5自适应屏幕分辨率大小
说明: ①:H5自适应不同分辨率的设备,其实主要就一句 <meta name="viewport" content="width=device-width,init ...
- 最佳移动端h5自适应rem适配方案
一.利用lib-flexible.postcss-plugin-px2rem插件 进行移动端rem适配. 1.第一 引入lib-flexible . 安装lib-flexible: npm i lib ...
- 【笔记】H5自适应(待)
参考: 1.盒子模型:http://www.cnblogs.com/sunyunh/archive/2012/09/01/2666841.html 2.浮动:http://www.w3school.c ...
- 手机网页H5 自适应不同分辨率的屏幕 必学标签meta之viewport
viewport 语法介绍 <meta name="viewport"content=" height = [pixel_value | device-height ...
- asp.net mvc中使用jquery H5省市县三级地区选择控件
地区选择是项目开发中常用的操作,本文讲的控件是在手机端使用的选择控件,不仅可以用于实现地区选择,只要是3个级别的选择都可以实现,比如专业选择.行业选择.职位选择等.效果如下图所示: 附:本实例asp. ...
- 移动端Web适配的两种做法思路总结
看了几篇文章,理一下网易跟淘宝移动端适配的思路,主要是参考 从网易与淘宝的font-size思考前端设计稿与工作流 像素相关概念 物理像素(physical pixel) 一个物理像素是显示器(手机屏 ...
- JEECMS v8 发布,java 开源 CMS 系统
JEECMSv8 是国内java开源CMS行业知名度最高.用户量最大的站群管理系统,支持栏目模型.内容模型交叉自定义.以及具备支付和财务结算的内容电商为一体: 对于不懂技术的用户来说,只要通过后台的 ...
- 极速创建 IOS APP !涛舅舅苹果 IOS APP自助生成系统!不用证书、不用越狱、永久可用
不用签名将网页封装成苹果APP,无需苹果企业签名,IPA签名,ios签名,免越狱安装 (本方法只支持网站封装app,原生的用不了,详细请咨询客服) 近期很多朋友问我把网站变成app的方法,原因很多种, ...
- 移动端rem适配布局
dome如下: <!doctype html><html><head> <meta charset="UTF-8" /> <m ...
随机推荐
- [Lua] 实现所有类的基类Object、模拟单继承OO、实现抽象工厂
所有类的基类 Object Lua 没有严格的 oo(Object-Oriented)定义,可以利用元表特性来实现 先定义所有类的基类,即Object类.代码顺序从上到下,自成一体.完整代码 定义一个 ...
- 优化Redis缓存淘汰机制解决性能测试中报错率逐渐攀升问题
在某个查询场景的性能测试过程中,遇到了一个问题:测试过程中报错率逐渐攀升.进一步检查后发现,在查询业务所在应用的后台日志和平台应用的后台日志中,都出现了用户登录相关的报错信息.经过排查分析,发现了问题 ...
- 银河麒麟使用kickstart二次打包制作安装镜像ISO
系统:银河麒麟 V10 SP2 服务器:百信恒山 TS02F-F30 安装方式:服务器挂载ISO镜像进行安装 1.安装 mkisofs 软件包: #yum install genisoimage 2. ...
- DevSecOps之应用安全测试工具及选型
上篇文章,有同学私信想了解有哪些DevSecOps工具,这里整理出来,供大家参考(PS: 非专业安全人士,仅从DevOps建设角度,给出自己见解) 软件中的漏洞和弱点很常见:84%的软件漏洞都是利用应 ...
- 全网最详细Java-JVM
Java-JVM ①JVM概述 ❶基本介绍 JVM:全称 Java Virtual Machine,一个虚拟计算机,Java 程序的运行环境(Java二进制字节码的运行环境) 特点: Java 虚拟机 ...
- oracle-查看oracle当前连接数,会话数
查看当前系统允许的进程连接数:方法一: show parameter process; 查看processes一列 方法二: select name,value from v$parameter wh ...
- Vue框架快速上手
Vue基础 vue指令 内容绑定 v-text 设置标签的内容一般通过双大括号的表达式{{ }}去替换内容 {{ hello }} v-html 与v-text类似区别在于html中的结构会被解析为标 ...
- Vue项目——尚品会
1: 项目的初始化 环境要求:node + webpack + 淘宝镜像 初始化项目: vue create 项目名称 目录/文件分析: - node_modules文件夹:放置项目依赖的地方 - p ...
- xgo多线程
import threading import time #导入xgoedu from xgoedu import XGOEDU from xgolib import XGO #导入xgolib # ...
- 【matplotlib 实战】--热力图
热力图,是一种通过对色块着色来显示数据的统计图表.它通过使用颜色编码来表示数据的值,并在二维平面上呈现出来.热力图通常用于显示大量数据点的密度.热点区域和趋势. 绘图时,一般较大的值由较深的颜色表示, ...