美文网首页
移动终端1px问题解决

移动终端1px问题解决

作者: 木中木 | 来源:发表于2019-10-19 18:27 被阅读0次

因移动端高清屏出现,导致1px边框,实际由2两个物理像素显示出来,下面我们来看下实际效果

html:
         <div class="halfonepx"></div>
            <div style="position: relative;">
                <div class="onepx"></div>
            </div>
         <div class="twopx"></div>
css:
.halfonepx {
    width: 300px;
    margin: 30px;
    height: 300px;
    border: 0.5px solid #ddd;
}
.onepx {
    width: 300px;
    margin: 30px;
    height: 300px;
    border: 1px solid #ddd;
}
.twopx {
    width: 300px;
    margin: 30px;
    height: 300px;
    border: 2px solid #ddd;
}

展示效果:


1-1.png

解决方法:
1.通过transform:scale来完成

    content: " ";
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 1px;
    border-top: 1px solid #D9D9D9;
    color: #D9D9D9;
    -webkit-transform-origin: 0 0;
    transform-origin: 0 0;
    -webkit-transform: scaleY(0.5);
    transform: scaleY(0.5);

1-2.png

2.通过rem + viewReport, 1rem = 100px

(function() {
    /* 设计稿是750,采用1:100的比例,font-size为100 * (docEl.clientWidth * dpr / 750) */
    var dpr, rem, scale;
    var docEl = document.documentElement;
    var fontEl = document.createElement('style');
    var metaEl = document.querySelector('meta[name="viewport"]');
    dpr = window.devicePixelRatio || 1;
    rem = 100 * (docEl.clientWidth * dpr / 750);
    scale = 1 / dpr;
    // 设置viewport,进行缩放,达到高清效果
    metaEl.setAttribute('content', 'width=' + dpr * docEl.clientWidth + ',initial-scale=' + scale + ',maximum-scale=' + scale + ', minimum-scale=' + scale + ',user-scalable=no');
    // 设置data-dpr属性,留作的css hack之用,解决图片模糊问题和1px细线问题
    docEl.setAttribute('data-dpr', dpr);
    // 动态写入样式
    docEl.firstElementChild.appendChild(fontEl);
    fontEl.innerHTML = 'html{font-size:' + rem + 'px!important;}';
})()

相关文章

网友评论

      本文标题:移动终端1px问题解决

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