美文网首页
关于使用rem的一点注意事项

关于使用rem的一点注意事项

作者: _江天_ | 来源:发表于2018-11-16 19:06 被阅读0次

    使用场景,思路可以参考其他大神的文章,这篇文章分享下使用过程中的问题。
    可以只使用rem,或者使用rem+devicePixelRatio+initial-scale来实现响应式页面
    用rem+1.0的缩放比没什么问题,只要在resize的时候修改根部的font-size就可以达到目的,如果是第二种,按照750px宽度,dpr是2,在开发过程中遇到了一个问题,代码如下:

    <!doctype html>
    <html style="font-size: 75px;">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="user-scalable=no, initial-scale=0.5, maximum-scale=0.5, minimum-scale=0.5">
        <style>
            .text{
                font-size: .3733333333rem; /*期望是14px*/
            }
        </style>
    </head>
    <body>
    <!-- 文字超出屏幕 -->
    <h1 class="text">111111111111111111111111111111111111111111111111111
    111111111111111111111111111111111111111111111111111
    </h1>
    </body>
    </html>
    

    发现h1在多行文本超出的情况下,不受 initial-scale=0.5的影响,展示出来是28px, 不明白渲染原理,可能是浏览器在渲染的时候还是根据device-width来渲染,有兴趣的同学可以看下W3C文档
    解决办法是:

    .text {
        -webkit-text-size-adjust: none;
        text-size-adjust: none;
    }
    

    最近使用了vue2+ssr+koa2+webpack来搭建了新项目,所以直接使用webpack自定义loader把px转rem,使用750px+dpr=2来计算出相应的rem值,在页面渲染之前通过js拿到真实的dpr和设备宽度和来计算html的font-size, 可以参考https://github.com/amfe/lib-flexible,也可以用饿了么的实现方案,使用vw来代替rem
    自定义loader代码:

    module.exports = (content) => {
      return content.replace(/\d?\.?\d+px/g, (item) => {
        let temp = +item.slice(0, -2) / 75 * 2 + ''
        return temp.slice(temp.indexOf('0') === 0 ? 1 : 0, temp.indexOf('.') + 11) + 'rem'
      })
    }
    

    可能还有其它的坑,之后遇到再更新吧~
    over~

    相关文章

      网友评论

          本文标题:关于使用rem的一点注意事项

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