内容简介:1,在项目build文件中找到util.js,将px2rem-loader添加到cssLoaders中,2,px2rem-loader 下的 remUnit 根据设计稿而定具体如下:
1.下载lib-flexible
npm i lib-flexible --save 或 yarn add lib-flexible
2.在项目中引入lib-flexible 一般情况在(main.js中引入lib-flexible)
import 'lib-flexible/flexible'
3.设置meta标签(视情况而定)
<meta name="viewport" content="width=device-width, initial-scale=1.0">
4.安装px2rem-loader
npm install px2rem-loader --save 或 yarn add px2rem-loader
5.在webpack中配置px2rem-loader
1,在项目build文件中找到util.js,将px2rem-loader添加到cssLoaders中,
2,px2rem-loader 下的 remUnit 根据设计稿而定
具体如下:
exports.cssLoaders = function (options) { options = options || {} const cssLoader = { loader: 'css-loader', options: { minimize: process.env.NODE_ENV === 'production', sourceMap: options.sourceMap } } //rem编译(新加px2) const px2remLoader = { loader: 'px2rem-loader', options: { remUnit: 75 // 由于设计稿是750 } } function generateLoaders (loader, loaderOptions) { var loaders = [cssLoader,px2remLoader]//添加到loader里面 省略..... } }
6.项目中使用
假设设计稿width和font-size分别是200px,50px
具体代码:(按照设计稿写即可)
.demo{ width: 200px; font-size: 50px; }
7.单独使用flexible可直接添加一个rem.js文件,具体如下:
1,配合less,sass和stylus来做px转换rem
2,具体可参看css编译
/* ** 移动端自适应方案 FROM 手淘 */ export const setViewport = (()=>{//此处是单独使用 const win = window const lib = window.lib || (window.lib = {}) //;(function(win, lib) {//此处是直接使用 let doc = win.document; let docEl = doc.documentElement; let metaEl = doc.querySelector('meta[name="viewport"]'); let flexibleEl = doc.querySelector('meta[name="flexible"]'); let dpr = 0; let scale = 0; let tid; let flexible = lib.flexible || (lib.flexible = {}); if (metaEl) { //console.warn('将根据已有的meta标签来设置缩放比例'); let match = metaEl.getAttribute('content').match(/initial\-scale=([\d\.]+)/); if (match) { scale = parseFloat(match[1]); dpr = parseInt(1 / scale); } } else if (flexibleEl) { let content = flexibleEl.getAttribute('content'); if (content) { let initialDpr = content.match(/initial\-dpr=([\d\.]+)/); let 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) { //let isAndroid = win.navigator.appVersion.match(/android/gi); let isIPhone = win.navigator.appVersion.match(/iphone/gi); let 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 { let wrap = doc.createElement('div'); wrap.appendChild(metaEl); doc.write(wrap.innerHTML); } } function refreshRem(){ let width = docEl.getBoundingClientRect().width; if (width / dpr > 540) { width = 540 * dpr; } let 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() { doc.body.style.fontSize = 12 * dpr + 'px'; }, false); } refreshRem(); flexible.dpr = win.dpr = dpr; flexible.refreshRem = refreshRem; flexible.rem2px = function(d) { let val = parseFloat(d) * this.rem; if (typeof d === 'string' && d.match(/rem$/)) { val += 'px'; } return val; }; flexible.px2rem = function(d) { let val = parseFloat(d) / this.rem; if (typeof d === 'string' && d.match(/px$/)) { val += 'rem'; } return val; }; }); //})(window, window.lib || (window.lib = {}));
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
设计原本
Frederick P. Brooks, Jr. / InfoQ中文站、王海鹏、高博 / 机械工业出版社 / 2011-1-1 / 55.00元
无论是软件开发、工程还是建筑,有效的设计都是工作的核心。《设计原本:计算机科学巨匠Frederick P. Brooks的思考》将对设计过程进行深入分析,揭示进行有效和优雅设计的方法。 本书包含了多个行业设计者的特别领悟。Frederick P. Brooks, Jr.精确发现了所有设计项目中内在的不变因素,揭示 了进行优秀设计的过程和模式。通过与几十位优秀设计者的对话,以及他自己在几个设计......一起来看看 《设计原本》 这本书的介绍吧!