1、什么是flexible.js

是一个终端设备适配的解决方案。
是一个用来适配移动端的javascript框架。根据宽度的不同设置不同的字体大小,样式间距都使用rem作为单位,不同屏幕大小适配不同的样式。

;(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'] = {}));

2、flexible.js 做的三件事

  • 动态改写标签
  • 给元素添加data-dpr属性,并且动态改写data-dpr的值
  • 给元素添加font-size属性,并且动态改写font-size的值

如果没有设置viewport,会动态生成

<meta name="viewport" content="initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">


给body设置font-size,给html设置font-size和data-dpr属性

3、计算px和rem

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

flexible.js代码,主要是改变了dpx和document的font-size大小。大小为docEl.getBoundingClientRect().width / 10 + ‘px’; 假设我们的设计稿宽是750的,则html的字体大小则被设为75px.则相当于1rem=75px。

width: 150px;就可以写成width: 2rem;

4、在vue中引入flexible

  1. 安装lib-flexible
npm i lib-flexible --save
  1. 在项目入口文件main.js里引入lib-flexible
import 'lib-flexible/flexible.js'

在写样式的时候可以在vsCode中安装cssrem插件,详情见
VSCode自动将px转化为rem的插件cssrem

移动端适配flexible.js相关推荐

  1. 移动端适配--flexible.js

    引言: H5适配一直是一个比较普遍的问题,很多文章都会讲,最近开发了一个H5的项目使用了一下淘宝的 flexible.js,写一篇文章自己总结一下. 一.背景介绍: Flexible.js是淘宝公开的 ...

  2. 移动端适配+flexible.js+rem适配

    移动端适配 前沿: 移动端web页面的开发,由于手机屏幕尺寸.分辨率不同,或者需要考虑横竖屏问题,为了使得web页面在不同移动设备上具有相适应的展示效果,需要在开发过程中使用合理的适配方案来解决这个问 ...

  3. vue 移动端适配flexible.js使用方法

    原理: flexible.js 适配方案采用rem布局,根据屏幕分辨率大小不同,调整根元素html的font-size,从而达到每个元素宽高自动变化,适配不同屏幕 操作步骤: 1.安装lib-flex ...

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

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

  5. 移动端之flexible.js

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

  6. 屏幕适配Flexible.js

    flexible + cssrem\px2rem插件+ flex布局实现屏幕自适应布局 1.下载flexible插件 https://wws.lanzoui.com/iMpclv6bmni 2.引入到 ...

  7. 从淘宝适配布局谈移动端适配

    一.        首先我们先来看看淘宝不同分辨率下的适配页面 可以看出来,淘宝在不同的分辨率下,页面的尺寸和模块间的间距会发生变化,这是因为淘宝采用了rem,这篇文章会简单介绍淘宝的布局思路以及具体 ...

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

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

  9. 淘宝flexible.js+rem适配pc端

    1.引入flexible.js文件: (function flexible(window, document) {var docEl = document.documentElement;var dp ...

最新文章

  1. system diagnostics starts什么意思_System类
  2. JS getAttribute和setAttribute(取得和设置属性)的使用介绍
  3. ubuntu11.04解决root不能登录的问题
  4. hdfs深入:10、hdfs的javaAPI操作
  5. Nginx端口占用问题
  6. 推荐系统:MovivLens20M数据集解析
  7. android自定义图标下载,charts
  8. 201521123013 《Java程序设计》第8周学习总结
  9. RTT distribution of Internet
  10. Infopath入门到精通系列-2 Infopath 文件内容查看
  11. 做运营活动的几点心得
  12. 魔兽和星际最大差别是什么?
  13. win32asm写的红警98修改器
  14. GUARDED_BY(c) 和 PT_GUARDED_BY(c)
  15. python计算逆序的四位数_用C语言程序编写:输入一个四位整数(如1234),使其倒序输出(如4321),并求其各位之和。C语言 设计算法输入一个四位正...
  16. MINIO(一)简介
  17. K12在线教育App如何实现用户增长?
  18. 【PyTorch】nn.Conv2d函数详解
  19. html.dropdownlist 样式,使用@ Html.DropDownList()添加要选择的css类
  20. 浅谈IT行业加班有没有价值

热门文章

  1. 仅以此帖告别年少轻狂
  2. 酒店小程序功能如何开发?
  3. 实验4 MapReduce编程初级实践【java编程实现】
  4. 在家查找下载最新《柳叶刀》The Lancet期刊文献的方法
  5. QPalette设置各种背景色
  6. android各版本安装方法,【2017/1/6】安卓老版安装方法
  7. CANoe-使用CANoe Demo、快速定位功能到Help文档描述
  8. x86 --- 任务隔离特权级保护
  9. java实现数字组合
  10. Codeforces - Ehab and a component choosing problem