美文网首页
如何解决移动端Retina屏1px像素的问题?

如何解决移动端Retina屏1px像素的问题?

作者: 夏天deg | 来源:发表于2021-09-08 06:25 被阅读0次

Retina屏

首先我们先聊下Retina屏的概念。
Retina: 一种新型高分辨率的显示标准,又称视网膜显示屏。

导致1px的原因?

在移动端开发中,UI设计稿中设置边框为1px,前端在开发中如果出现border:1px,测试会发现在Retina屏机型中,1px会比较粗,即是经典的移动端1px像素问题。
比如iphone6的屏幕宽度为375px,设计师的视觉稿一般是750px,如果UI的border 1px,而前端实际开发的时候是不能采用1px border的,应该是1px/2。

如何解决呢?

屏幕快照 2021-09-08 上午6.11.11.png
1. 0.5px
.border-1px {
  border: 1px solid #333;
}
@media screen and(-webkit-min-device-pixel-ratio:2) {
  .border-1px {border: 0.5px solid #333;}
}
@media screen and(-webkit-min-device-pixel-ratio: 3) {
  .border-1px {border: 0.333333px solid #333;}
}
2. border-image
.border-1px {
  border: 1px solid #333;
}
@media only screen and (-webkit-min-device-pixel-ratio:2) {
  .border_1px {
    border-bottom: none;
    border-width: 0 0 1px 0;
    border-image: url(../img.png) 0 0 2 0 stretch;
  }
}
3. viewport + rem实现
const scale = 1 / window.devicePixelRatio;
const viewport = document.querySelector('meta[name="viewport"]');
if (!viewport) {
    viewport = document.createElement('meta');
    viewport.setAttribute('name', 'viewport');
    window.document.head.appendChild(viewport);
}
viewport.setAttribute('content', 'width=device-width,user-scalable=no,initial-scale=' + scale + ',maximum-scale=' + scale + ',minimum-scale=' + scale);
// 设置根字体大小
var docEl = document.documentElement;
var fontsize = 10 * (docEl.clientWidth / 320) + 'px';
docEl.style.fontSize = fontsize;
// 在CSS中用rem单位就行了
4. 伪元素+transform
.border-1px:before{
    content: '';
    position: absolute;
    top: 0;
    height: 1px;
    width: 100%;
    background-color: #999;
    transform-origin: 50% 0%;
}
@media only screen and (-webkit-min-device-pixel-ratio:2){
    .border-1px:before{
        transform: scaleY(0.5);
    }
}
@media only screen and (-webkit-min-device-pixel-ratio:3){
    .border-1px:before{
        transform: scaleY(0.33);
    }
}

5. box-shadow 模拟边框

box-shadow: 0  -1px 1px -1px #999,
            1px  0  1px -1px #999,
            0  1px  1px -1px #999,
            -1px 0  1px -1px #999;

6. svg

@svg border-1px {
  height: 2px;
  @rect {
    fill: var(--color, black);
    width: 100%;
    height: 50%;
    }
  }
.svg {
    border: 1px solid transparent;
    border-image: svg(border_1px param(--color #00b1ff)) 2 2 stretch;
}

参考高级前端进阶

相关文章

网友评论

      本文标题:如何解决移动端Retina屏1px像素的问题?

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