重置css默认样式(淘宝):

body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td { margin:0; padding:0; }body, button, input, select, textarea { font:12px/1.5tahoma, arial, \5b8b\4f53; }h1, h2, h3, h4, h5, h6{ font-size:100%; }address, cite, dfn, em, var { font-style:normal; }code, kbd, pre, samp { font-family:couriernew, courier, monospace; }small{ font-size:12px; }ul, ol { list-style:none; }a { text-decoration:none; }a:hover { text-decoration:underline; }sup { vertical-align:text-top; }sub{ vertical-align:text-bottom; }legend { color:#000; }fieldset, img { border:0; }button, input, select, textarea { font-size:100%; }table { border-collapse:collapse; border-spacing:0; }

flexible.js 源码:

使用方法

建议对于js做内联处理,在所有资源加载之前执行这个js。

执行这个js后,会在html(也就是document.documentElement)上增加一个data-dpr属性,以及font-size样式。

之后页面中的元素,都可以用rem单位来设置。html上的font-size就是rem的基准像素。

字体不使用rem的方法

字体的大小不推荐用rem作为单位。所以对于字体的设置,仍旧使用px作为单位,并配合用data-dpr属性来区分不同dpr下的的大小。

例如:

div {width: 1rem; height: 0.4rem;font-size: 12px; // 默认写上dpr为1的fontSize
}[data-dpr="2"] div {font-size: 24px;
}[data-dpr="3"] div {font-size: 36px;
}

手动配置dpr

引入执行js之前,可以通过输出meta标签方式来手动设置dpr。语法如下:

<meta name="flexible" content="initial-dpr=2,maximum-dpr=3" />

其中initial-dpr会把dpr强制设置为给定的值,maximum-dpr会比较系统的dpr和给定的dpr,取最小值。注意:这两个参数只能选其一。

手动设置rem基准值的方法

输出如下css样式即可:

html {font-size: 60px!important;}
;(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'] = {}));

.

reset.css 和 flexible.js相关推荐

  1. 移动端适配-flexible.js使用(解决对外部引入css,px2rem能不能转换rem问题)

    移动端flexible.js 适用于最新版vue-cli,配置手淘的lib-flexible.js和rem实现移动端页面自适应 1.安装lib-flexible.js npm install lib- ...

  2. 工作常用的工具类JS+reset.css

    var tools = (function() {var _urlIndex = '请求的域名'/*** POST 请求*/function doPost(url, params, callback, ...

  3. CSS—移动端适配方案flexible.js

    目录 一.概述 二.详解 一.概述 移动端适配一直以来都是前端开发中不可或缺的重要组成部分.flexible.js插件是一个终端设备适配的解决方案.flexible.js插件通过实现rem单位的自适应 ...

  4. 移动端之flexible.js

    flexible.js 弹性布局分析与实战 作为一名小白,不思进取,还荒废了好长一段时间,一直没有总结学习,内心很愧疚...从这周开始,坚持每周积累自己的笔记,努力学习,成为一名合格的攻城狮! fle ...

  5. flexible.js+rem解决pc端适配

    第一步:新建 flexible.js文件 这里默认是10等份,手动改为24,此时1rem=1920/24px即80px.(设计稿是1920px的) (function flexible(window, ...

  6. 淘宝flexible.js文件实现弹性布局

    淘宝flexible.js到底是用来做啥的 优点 1. 提供了用一套 css 去适应多种屏幕的方法 * 2.不用考虑适应屏幕的高宽比.物理尺寸等,切图成本比较低 缺点 只用这个方案去做,得到的是一个静 ...

  7. 移动端适配方案 flexible.js

    前言 移动端适配一直以来都是前端开发中不可或缺的重要组成部分,如果没有了它,那么你做出来的页面极有可能会出现各种意外(写出来的页面与设计稿之间的差别).所有我们得找到一种相对来说让人比较满意的解决方案 ...

  8. 八十三、React简书项目:Styled-Components 与 Reset.css 的结合使用,完成Header布局

    2020/11/21. 周六.今天又是奋斗的一天. @Author:Runsen 创建项目 使用 React 官方脚手架工具提供的工作流快速搭建和开发项目.发现React比Vue在某些方面还是强很多. ...

  9. 移动端 flexible.js 布局详解

    原本想直接引入原文链接,但是又担心作者哪天想不开注销账号,这么好的一篇文章看不到了,还是转载一下吧(/ω\). 另外推荐一篇好文:移动端rem自适应实操讲解 本文讲的通过 flexible.js 实现 ...

最新文章

  1. linux 源码安装 yum rpm区别
  2. 15 - 使用 Fabric 自动化部署
  3. vue 组件之间的传值
  4. C语言数据结构与算法
  5. 洛谷 P2746 [USACO5.3]校园网Network of Schools (Tarjan,SCC缩点,DAG性质)
  6. java指针的数组_java 指针 数组的使用
  7. msdn中C#中常用词汇概念(转帖)
  8. android怎么长按一张图片保存到相册_好看的微信朋友圈背景图片下载 让你的朋友圈封面个性起来...
  9. pandas AttributeError: ‘Styler‘ object has no attribute ‘style‘解决方法
  10. js的浅拷贝与深拷贝
  11. 机器学习笔记【二】逻辑回归与分类(2):感知机学习算法与逻辑回归的区别,牛顿方法
  12. invest模型_ARK Invest最新报告 :AI训练成本下降了100倍,但训练最先进AI模型的成本惊人...
  13. 这6款windows办公利器,一定有一款你喜欢的!
  14. [转载]Ext.form.BasicForm getValues()和getFie_-Chaz-_新浪博客
  15. 【技术】客服服务开发
  16. SyntaxError: invalid syntax解决方案
  17. 2011年安徽省公务员考试行测真题(3)
  18. 【PTA】PAT (Advanced Level) Practice 1011-1014
  19. 人工智能 | ShowMeAI资讯日报 #2022.06.25
  20. 布袋除尘器过滤风速多少_布袋式除尘器过滤风速一般多大

热门文章

  1. ipfs操作mysql_IPFS 使用入门
  2. java bean参数清空_Java互联网架构-Spring IOC底层源码分析
  3. php接口三结构,grape动态PHP结构(三)——API接口
  4. php的全局p变量程序_php全局变量的使用
  5. mac npm command not found
  6. GOOGLE的摄像头漏洞
  7. Oracle/PLSQL WHERE CURRENT OF Statement
  8. 大数据学习笔记:创建与配置虚拟机[Ubuntu + CentOS]
  9. Flask学习笔记01:安装Flask模块与入门案例
  10. 【BZOJ3670】【codevs3319】动物园,KMP+时间优化