像素4(rem2px插件cssrem,rem适配库flexible.js,css插件less)
如果使用vscode工具编辑前端,插件cssrem让px转换为rem.
flexible.js原理:
利用调整根字体大小,让像素按照根字体大小成比例变化,即rem。
其实之前讲过一种思路,详见:像素2(pc端web中css的rem适配
就是屏幕像素/设计稿的大小*100px作为根字体大小,根字体大小随着屏幕变化而变化。
下面这种思路:
将屏幕分成n等分,每一等分就是根字体大小,然后设计稿的元素在每一等分的占多少,是多少rem。 那么分多少等分合适,其实多少都可以,但是为了方便计算, 那么设计稿的元素大小最好是每一等分的整数倍,最好计算。 根据等分大小,确定等分的数量。
比如:设计稿大小1920px,其中横多元素大小是80px,100px 240px。 那么一个比较好的等分大小是80px,那么1920/80=24 ,也就是24等分,每一份是80px(80px=1rem)。 以设计稿作为模板,那么将屏幕也分成24份, 假设刚好屏幕和设计稿一样大为基准,那么就非常方便的计算出,设计稿以rem为单位的各元素的大小
只需将源码中下面部分改为24
function setRemUnit () { var rem = docEl.clientWidth / 24 docEl.style.fontSize = rem + 'px' }
源码:
// 首先是一个立即执行函数,执行时传入的参数是window和document (function flexible (window, document) { var docEl = document.documentElement // 返回文档的root元素 var dpr = window.devicePixelRatio || 1 // 获取设备的dpr,即当前设置下物理像素与虚拟像素的比值 // adjust body font size 设置默认字体大小,默认的字体大小继承自body function setBodyFontSize () { if (document.body) { document.body.style.fontSize = (12 * dpr) + 'px' } else { document.addEventListener('DOMContentLoaded', setBodyFontSize) } } setBodyFontSize(); // set 1rem = viewWidth / 10 function setRemUnit () { var rem = docEl.clientWidth / 10 docEl.style.fontSize = rem + 'px' } setRemUnit() // reset rem unit on page resize window.addEventListener('resize', setRemUnit) window.addEventListener('pageshow', function (e) { if (e.persisted) { setRemUnit() } }) // detect 0.5px supports 检测是否支持0.5像素,解决1px在高清屏多像素问题,需要css的配合。 if (dpr >= 2) { var fakeBody = document.createElement('body') var testElement = document.createElement('div') testElement.style.border = '.5px solid transparent' fakeBody.appendChild(testElement) docEl.appendChild(fakeBody) if (testElement.offsetHeight === 1) { docEl.classList.add('hairlines') } docEl.removeChild(fakeBody) } }(window, document))
源码里面其实还有两个东西,一个是设置默认字体,一个检查0.5像素
less工具能做什么?

浙公网安备 33010602011771号