px和rem单位互转(包含elementUI)

px和rem单位互转(包含elementUI)

项目中样式替换

  • 工具pxAndRemInterturn.js
/* 
    px和rem单位互转
    content: 样式表的内容
    unit: 需要替换的单位名称
    updateUnit: 替换后的单位名称
    rule: 
        单位换算规则,多少rem = px || px = rem
        例如:当rule为100时即表示 1rem = 100px
*/
export function pxAndRemInterturn({
    content,
    unit,
    rule,
    updateUnit
}) {
    rule = rule || 100
    if (!rule) return content;
    const reg = {
            px: /[\:]*[\s]*[-]*[\s]*[0-9]*[\.]*[0-9]*\p\x/g,
            rem: /[\:]*[\s]*[-]*[\s]*[0-9]*[\.]*[0-9]*rem/g,
            number: /[0-9]*[\.]*[0-9]*/g
        }
        // 获取到所有匹配的内容
    const res = content.match(reg[unit])
        // 传进来的是正则匹配的结构内容
    function getRightData(arr) {
        let result = []
        for (let i = 0; i < arr.length; i++) {
            result = result.concat(arr[i].match(/\d+/g))
        }
        return result
    }
    const rightData = getRightData(res)
    console.log(rightData)
        // 单位换算
    function unitConversion({
        num,
        unit,
        updateUnit,
        rule
    }) {
        let res = ''
        if (unit === 'px' && updateUnit === 'rem') {
            res = num / rule
        } else if (unit === 'rem' && updateUnit === 'px') {
            res = num * rule
        }
        return res
    }

    for (let i = 0; i < rightData.length; i++) {

        let txt = unitConversion({
                num: rightData[i],
                unit,
                updateUnit,
                rule
            })
        content = content.replace(res[i], res[i].replace(rightData[i], txt).replace(unit, updateUnit))
    }
    return content
}
  • 使用
const styleContent = document.querySelector('style').innerHTML
const updateContent = pxAndRemInterturn({
    content:styleContent,
    unit:'px',
    updateUnit:'rem'
})
document.querySelector('body').innerHTML = updateContent

elementUI中的样式替换

  • 找到/node_modules/element-ui/lib/theme-chalk/index.css

  • 复制index.css里面的所有代码,然后创建一个新的html文件,并填充到给一个style标签

element.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>

  <style>
    @charset "UTF-8";@font-face{font-family:element-icons;src:url(fonts/element-icons.woff)format("woff"),url(fonts/element-icons.ttf) format("truetype");
        ... ...
  </style>
</head>
<body>
  
</body>
</html>
  • 执行转换
const styleContent = document.querySelector('style').innerHTML
const updateContent = pxAndRemInterturn({
    content:styleContent,
    unit:'px',
    updateUnit:'rem'
})
console.log('updateContent>>>', updateContent)
document.querySelector('body').innerHTML = updateContent
  • 将得到的新CSS样式表替换/node_modules/element-ui/lib/theme-chalk/index.css的内容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值