手机html根据手机分辨率网页文字大小自适应
问题:不同手机型号屏幕尺寸大不相同,导致同样的文字,有的显示一行,有的显示多行。
通过查资料和自己的尝试解决;网页开发习惯的px单位,手机html开发不适用。
源代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<!--防止手机页面缩放-->
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
	<title>Document</title>
</head>
<body>
	<!-- 文字单位设置为rem即可,通过微信开发者工具切换手机型号查看效果。 -->
	<div style='border:1px red solid;border-radius:100px;font-size:1rem;'>测试手机端文字的自适应</div>
</body>
<script>
/*    利用js计算当前设备的DPR,动态设置在html标签上,并动态设置html的font-size,*/
    !function(win, lib) {
        var timer,
            doc     = win.document,
            docElem = doc.documentElement,
            vpMeta   = doc.querySelector('meta[name="viewport"]'),
            flexMeta = doc.querySelector('meta[name="flexible"]'),
            dpr   = 0,
            scale = 0,
            flexible = lib.flexible || (lib.flexible = {});
        // 设置了 viewport meta
        if (vpMeta) {
            console.warn("将根据已有的meta标签来设置缩放比例");
            var initial = vpMeta.getAttribute("content").match(/initial\-scale=([\d\.]+)/);
            if (initial) {
                scale = parseFloat(initial[1]); // 已设置的 initialScale
                dpr = parseInt(1 / scale);      // 设备像素比 devicePixelRatio
            }
        }
        // 设置了 flexible Meta
        else if (flexMeta) {
            var flexMetaContent = flexMeta.getAttribute("content");
            if (flexMetaContent) {
                var initial = flexMetaContent.match(/initial\-dpr=([\d\.]+)/),
                    maximum = flexMetaContent.match(/maximum\-dpr=([\d\.]+)/);
                if (initial) {
                    dpr = parseFloat(initial[1]);
                    scale = parseFloat((1 / dpr).toFixed(2));
                }
                if (maximum) {
                    dpr = parseFloat(maximum[1]);
                    scale = parseFloat((1 / dpr).toFixed(2));
                }
            }
        }
        // viewport 或 flexible
        // meta 均未设置
        if (!dpr && !scale) {
            // QST
            // 这里的 第一句有什么用 ?
            // 和 Android 有毛关系 ?
            var u = (win.navigator.appVersion.match(/android/gi), win.navigator.appVersion.match(/iphone/gi)),
                _dpr = win.devicePixelRatio;
            // 所以这里似乎是将所有 Android 设备都设置为 1 了
            dpr = u ? ( (_dpr >= 3 && (!dpr || dpr >= 3))
                    ? 3
                    : (_dpr >= 2 && (!dpr || dpr >= 2))
                        ? 2
                        : 1
                )
                : 1;
            scale = 1 / dpr;
        }
        docElem.setAttribute("data-dpr", dpr);
        // 插入 viewport meta
        if (!vpMeta) {
            vpMeta = doc.createElement("meta");
            vpMeta.setAttribute("name", "viewport");
            vpMeta.setAttribute("content",
                "initial-scale=" + scale + ", maximum-scale=" + scale + ", minimum-scale=" + scale + ", user-scalable=no");
            if (docElem.firstElementChild) {
                docElem.firstElementChild.appendChild(vpMeta)
            } else {
                var div = doc.createElement("div");
                div.appendChild(vpMeta);
                doc.write(div.innerHTML);
            }
        }
        function setFontSize() {
            var winWidth = docElem.getBoundingClientRect().width;
            if (winWidth / dpr > 540) {
                (winWidth = 540 * dpr);
            }
            // 根节点 fontSize 根据宽度决定
            var baseSize = winWidth / 10;
            docElem.style.fontSize = baseSize + "px";
            flexible.rem = win.rem = baseSize;
        }
        // 调整窗口时重置
        win.addEventListener("resize", function() {
            clearTimeout(timer);
            timer = setTimeout(setFontSize, 300);
        }, false);
        // 这一段是我自己加的
        // orientationchange 时也需要重算下吧
        win.addEventListener("orientationchange", function() {
            clearTimeout(timer);
            timer = setTimeout(setFontSize, 300);
        }, false);
        // pageshow
        // keyword: 倒退 缓存相关
        win.addEventListener("pageshow", function(e) {
            if (e.persisted) {
                clearTimeout(timer);
                timer = setTimeout(setFontSize, 300);
            }
        }, false);
        // 设置基准字体
        if ("complete" === doc.readyState) {
            doc.body.style.fontSize = 12 * dpr + "px";
        } else {
            doc.addEventListener("DOMContentLoaded", function() {
                doc.body.style.fontSize = 12 * dpr + "px";
            }, false);
        }
        setFontSize();
        flexible.dpr = win.dpr = dpr;
        flexible.refreshRem = setFontSize;
        flexible.rem2px = function(d) {
            var c = parseFloat(d) * this.rem;
            if ("string" == typeof d && d.match(/rem$/)) {
                c += "px";
            }
            return c;
        };
        flexible.px2rem = function(d) {
            var c = parseFloat(d) / this.rem;
            if ("string" == typeof d && d.match(/px$/)) {
                c += "rem";
            }
            return c;
        }
    }(window, window.lib || (window.lib = {}));
</script>
</html>手机html根据手机分辨率网页文字大小自适应的更多相关文章
- js根据浏览器窗口大小实时改变网页文字大小
		目前,有了css3的rem,给我们的移动端开发带来了前所未有的改变,使得我们的开发更容易,更易兼容很多设备,但这个不在本文讨论的重点中,本文重点说说如何使用js来实时改变网页文字的大小. 代码: &l ... 
- 用javascript动态改变网页文字大小
		<script>function setFontSize(size){document.getElementById('bottom').style.fontsize=size+'pt'; ... 
- [转]响应式网页设计:rem、em设置网页字体大小自适应
		本文转自:http://www.cnblogs.com/aimyfly/archive/2013/07/19/3200742.html 「rem」是指根元素(root element,html)的字体 ... 
- 响应式网页:用em,rem设置网页字体大小自适应
		「rem」是指根元素(root element,html)的字体大小,好开心的是,从遥远的 IE6 到版本帝 Chrome 他们都约好了,根元素默认的 font-size 都是 16px.这样一个新的 ... 
- 响应式网页设计:rem、em设置网页字体大小自适应
		「rem」是指根元素(root element,html)的字体大小,好开心的是,从遥远的 IE6 到版本帝 Chrome 他们都约好了,根元素默认的 font-size 都是 16px.这样一个新的 ... 
- UIlabel文字大小自适应label宽度变大变小
		label.adjustsFontSizeToFitWidth = YES; //默认no 
- android手机和ios手机的分辨率
		Android手机目前常见的分辨率 1.1 手机常见分辨率: 4:3 VGA 640*480 (Video Graphics Array) QVGA 320*240 (Quarter VGA ... 
- html,CSS文字大小单位px、em、pt的关系换算
		html,CSS文字大小单位px.em.pt的关系换算 这里引用的是Jorux的“95%的中国网站需要重写CSS”的文章,题目有点吓人,但是确实是现在国内网页制作方面的一些缺陷.我一直也搞不清楚px与 ... 
- CSS文字大小单位px、em、pt详解
		这里引用的是Jorux的“95%的中国网站需要重写CSS”的文章,题目有点吓人,但是确实是现在国内网页制作方面的一些缺陷.我一直也搞不清楚px与em之间的关系和特点,看过以后确实收获很大.平时都是用p ... 
随机推荐
- 2 - django-urls路由系统基本使用
			目录 1 路由系统(urls控制) 1.1 正则字符串参数 1.2 url的分组 1.2.1 无名分组 1.2.2 有名分组 1.3 URLconf 在什么上查找 1.4 include(路由分发) ... 
- python字典解析
			import json # coding: utf-8 from functools import singledispatch from collections import abc import ... 
- MySQL权限操作:Grant、Revoke
			数据库操作: 创建数据库.创建表——CREATE 删除数据库.删除表——DROP 删除表内容——TRUNCATE.DELETE(后者效率低.一行一行地删除记录) 查询数据库.查询表——SELECT 插 ... 
- GitHub如何使用
			先马克一下,有空看看:http://blog.csdn.net/xiahouzuoxin/article/details/9393119 
- HOG目标检测
			用HOG进行行人检测时,需要用训练好的支持向量机来对图片进行分类,在opencv中,支持向量机已经训练好,但自己来训练支持向量机才能更好的体会这一过程. 参考:http://blog.csdn.net ... 
- 洛谷P2746校园网
			传送门啦 下面来看任务B.我们发现,图中只要存在入度为0的点和出度为0的点就永远不可能满足要求:" 不论我们给哪个学校发送新软件,它都会到达其余所有的学校 ".我们还发现,只要在入 ... 
- python  图片上传写入磁盘功能
			本文是采取django框架,前端上传图片后端接收后写入磁盘,数据库记录图片在磁盘上的路径(相对),以下是前端上传到后端入库的基本流程 一. html代码 <!DOCTYPE html> & ... 
- hdu 1171   有num1个w1 , num2个w2 …….  (母函数)
			输入n,代表学院里面有n种设备,并且在下面输入n行,每一行输入v,m代表设备的价格为v,设备的数量是m.然后要求把这些设备的总价值分摊,尽量平分,使其总价值接近相等,最好是相等 比如样例二(1+X10 ... 
- VS 2015 序列号/密钥/企业版/专业版
			专业版:HMGNV-WCYXV-X7G9W-YCX63-B98R2企业版:HM6NR-QXX7C-DFW2Y-8B82K-WTYJV 
- 【转】关于Jmeter3.0,你必须要知道的5点变化
			2016.5.18日,Apache 发布了jmeter 3.0版本,本人第一时间上去查看并下载使用了,然后群里或同事都会问有什么样变化呢?正好在网上看到一遍关于3.0的文章,但是是英文的.这里翻译一下 ... 
