博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Rem自适应js
阅读量:5260 次
发布时间:2019-06-14

本文共 4175 字,大约阅读时间需要 13 分钟。

网上看到很多移动端适配的各种方法,由于原来工作中对rem的疏忽,所以决定重新学习rem~

由于移动端特殊性,本文讲的是如何使用实现,或叫布局,通过使用一个脚本就可以rem,不用再为各种设备宽度不同而烦恼如何实现自适应的问题。

rem是相对于根元素<html>,这样就意味着,我们只需要在根元素确定一个px字号,则可以来算出元素的宽高。1rem=16px(浏览器html的像素,可以设定这个基准值),假如浏览器的html设为64px,则下面的元素则。

阿里团队开源的一个库。使用轻松搞定各种不同的移动端设备兼容自适应问题。

在这里找到了一个精简版的flexible.min.js,可以适配所有的移动端:

代码如下:

//designWidth:设计稿的实际宽度值,需要根据实际设置//maxWidth:制作稿的最大宽度值,需要根据实际设置//这段js的最后面有两个参数记得要设置,一个为设计稿实际宽度,一个为制作稿最大宽度,例如设计稿为750,最大宽度为750,则为(750,750);(function(designWidth, maxWidth) {    var doc = document,    win = window,    docEl = doc.documentElement,    remStyle = document.createElement("style"),    tid;    function refreshRem() {        var width = docEl.getBoundingClientRect().width;        maxWidth = maxWidth || 540;        width>maxWidth && (width=maxWidth);        var rem = width * 100 / designWidth;        remStyle.innerHTML = 'html{font-size:' + rem + 'px;}';    }    if (docEl.firstElementChild) {        docEl.firstElementChild.appendChild(remStyle);    } else {        var wrap = doc.createElement("div");        wrap.appendChild(remStyle);        doc.write(wrap.innerHTML);        wrap = null;    }    //要等 wiewport 设置好后才能执行 refreshRem,不然 refreshRem 会执行2次;    refreshRem();    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 = "16px";    } else {        doc.addEventListener("DOMContentLoaded", function(e) {            doc.body.style.fontSize = "16px";        }, false);    }})(750, 750);

使用方法:

1.复制上面这段代码到你的页面的头部的script标签的最前面。

2.根据设计稿大小,调整里面的最后两个参数值。

3.使用1=100px转换你的设计稿的像素,例如设计稿上某个块是100px*300px,换算成则为1*3rem。

上面的代码,如果在uc浏览器下横屏与竖屏转换,发现代码并没有,则通过下面进行解决bug:

1
2
3
4
5
已经找到兼容方案,可通过js在页面的head里生成定义了html元素font-size的style元素来解决!
如下:
 
<style id=
"rootFontSize"
>html{font-size: 100px !important;}</style>
注意还加了important来提高权重

该代码版本区别于手淘的rem换算方法。使用的是1rem=100px的换算。

假如你有一个块是.box{width:120px;height:80px;} 转为rem则为.box{width:1.2rem; height:.8rem;}

基本的模板

你也可以直接复制下面这个基础的HTML模板。

前端开发博客

base.css:

body,dl,dd,ul,ol,h1,h2,h3,h4,h5,h6,pre,form,input,textarea,p,hr,thead,tbody,tfoot,th,td{margin:0;padding:0;}ul,ol{list-style:none;}a{text-decoration:none;}html{-ms-text-size-adjust:none;-webkit-text-size-adjust:none;text-size-adjust:none;}body{line-height:1.5; font-size:14px;}body,button,input,select,textarea{font-family:'helvetica neue',tahoma,'hiragino sans gb',stheiti,'wenquanyi micro hei',\5FAE\8F6F\96C5\9ED1,\5B8B\4F53,sans-serif;}b,strong{font-weight:bold;}i,em{font-style:normal;}table{border-collapse:collapse;border-spacing:0;}table th,table td{border:1px solid #ddd;padding:5px;}table th{font-weight:inherit;border-bottom-width:2px;border-bottom-color:#ccc;}img{border:0 none;width:auto\9;max-width:100%;vertical-align:top; height:auto;}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0;vertical-align:baseline;}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;}button[disabled],input[disabled]{cursor:default;}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0;}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;}input[type="search"]::-webkit-search-decoration{-webkit-appearance:none;}input:focus{outline:none;}select[size],select[multiple],select[size][multiple]{border:1px solid #AAA;padding:0;}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block;}audio,canvas,video,progress{display:inline-block;}body{background:#fff;}input::-webkit-input-speech-button {display: none}button,input,textarea{-webkit-tap-highlight-color: rgba(0,0,0,0);}

再次强调一下:

需要根据你的设计稿的大小来调整脚本最后的两个参数。

})(750, 750);
  • 第一个参数是设计稿的宽度,一般设计稿有640,或者是750,你可以根据实际调整
  • 第二个参数则是设置制作稿的最大宽度,超过750,则以750为最大限制。

转载于:https://www.cnblogs.com/mmykdbc/p/10512082.html

你可能感兴趣的文章
迷宫问题
查看>>
英语配音片段
查看>>
[原创]前后端交互的方式整理
查看>>
css简介及常用语法
查看>>
git add 的一点说明
查看>>
时间类(时间戳的各种转换成)
查看>>
计算机的启动过程 <orang's 一个操作系统的实现>
查看>>
函数集成redis与Spring集成
查看>>
搜索中文Solr Analysis And Solr Query -- Solr分析以及查询
查看>>
core 文件生成设置详解
查看>>
一种数据展示方式,UI设计新颖,供大家参考(源码部分) (demo已经上传)
查看>>
javascript 概述及基础知识点(变量,常量,运算符,数据类型)
查看>>
DHCPD 原理
查看>>
当HTML5取代Flash,意味着下一代网页的序幕已经拉开
查看>>
将 Photoshop CC 2015.5 英文界面换成中文, 英文与中文界面互换
查看>>
微信小程序,动态改变样式
查看>>
Mysql集群高可用之mha
查看>>
20169214 2016-2017-2 《移动平台开发实践》大项目——创意提现 · 需求分析
查看>>
C#根据IP地址和子网掩码计算广播地址
查看>>
对Servlet容器的补充和一个问题的请教
查看>>