像素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工具能做什么?

 

posted @ 2020-10-30 02:59  假程序猿  阅读(550)  评论(0)    收藏  举报