美文网首页屏幕自适应
vue scss rem自适应

vue scss rem自适应

作者: 懒懒猫 | 来源:发表于2022-08-08 17:00 被阅读0次

    该文章使用版本
    "sass": "1.26.8","sass-loader": "8.0.2"
    sass-loader安装失败的话,请尝试安装8.0以上版本,可能是版本不兼容

    flexible.js

    (function flexible(window, document) {
      var docEl = document.documentElement
      var dpr = window.devicePixelRatio || 1
    
      // adjust body font size
      function setBodyFontSize() {
        if (document.body) {
          document.body.style.fontSize = 12 * dpr + 'px'
        } else {
          document.addEventListener('DOMContentLoaded', setBodyFontSize)
        }
      }
    
      setBodyFontSize()
    
      // set 1rem = viewWidth / 10
      function setRemUnit() {
        // 这里默认是10等份,手动改为24,此时1rem=1920/24px即80px。(设计稿是1920px的)
        var rem = docEl.clientWidth / 24
        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
      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)
    
    

    home.scss

    // 1rem=80px
    @function rem($px) {
      @return $px / 80 * 1rem;
    }
    

    home.js

    <script>
    import '@/utils/flexible'
    ...
    </script>
    <style lang="scss" scoped>
    @import '@/styles/home.scss';
    ...
      height: rem(688);// 688px
    ...
    </style>
    

    相关文章

      网友评论

        本文标题:vue scss rem自适应

        本文链接:https://www.haomeiwen.com/subject/qmkoirtx.html