淘宝flexible 分析源码

淘宝flexible 分析源码


// 立即执行函数 (function() {})() 或者 (function() {} ())
// 主要作用:创建一个独立的作用域,里面所有的变量都是局部变量,避免了命名冲突问题
// 立即执行函数不需要调用,立马能够自己执行
(function flexible(window, document) {
    // 获取html的根元素
    var docEl = document.documentElement
        // dpr 是物理像素比
    var dpr = window.devicePixelRatio || 1

    // adjust body font size 设置body的字体大小
    function setBodyFontSize() {
        // 如果页面中有body这个元素,就设置body的字体大小
        if (document.body) {
            document.body.style.fontSize = (12 * dpr) + 'px'
        } else {
            // 如果页面中没有body这个元素,则等着页面的主要DOM元素加载完毕再去设置body的字体大小
            document.addEventListener('DOMContentLoaded', setBodyFontSize)
        }
    }
    setBodyFontSize();

    // set 1rem = viewWidth / 10  设置html元素的文字大小
    function setRemUnit() {
        // var rem = docEl.clientWidth / 10
        // 屏幕1920px 分成10份,每份 192px ,但是我想分成24份 每份80px , 1rem = 80px 
        var rem = docEl.clientWidth / 24
        docEl.style.fontSize = rem + 'px'
    }

    setRemUnit()

    // reset rem unit on page resize  当页面尺寸大小发生变化的时候,要重新设置下rem的大小
    window.addEventListener('resize', setRemUnit)
        // pageshow 是重新加载页面触发的事件
    window.addEventListener('pageshow', function(e) {
        // e.persisted 返回的是true,就是说如果这个页面是从缓存取过来的页面,也需要重新计算一下rem的大小
        if (e.persisted) {
            setRemUnit()
        }
    })

    // detect 0.5px supports  有些移动端的浏览器不支持0.5像素的写法
    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));

注意:

立即执行函数 (function() {})() 或者 (function(){}())
主要作用: 创建一个独立的作用域。 避免了命名冲突问题

下面三种情况都会刷新页面都会触发 load 事件。

a标签的超链接
F5或者刷新按钮(强制刷新)
前进后退按钮

px 自动转换rem 插件

下载vscode 插件 cssrem

在这里插入图片描述

设置 cssrem --> 点击设置–>扩展设置–> 80

就会自动把 px 转化成rem了

在这里插入图片描述

总结:
1.下载 淘宝flexible 把 docEl.clientWidth / 24 改成24,把屏幕分成24份,每一份就是80px
1.vscode 下载 cssrem插件 把里面 Root Font Size 设置为 80,在vscode里面输入px 的时候插件会自动把px转化成rem 提供选择

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端酱紫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值