移动端手机 retina 屏 1px border

发布于 2021-11-06 15:29:43 字数 4880 浏览 1145 评论 0

移动 Web 开发,总避免不了 1 设备像素边框的问题。本文参考了 half-point css border in ios 一文。

理想的

div{
   border:1px solid black;
}

@media (-webkit-min-device-pixel-ratio: 2){
 div{
    border-width:0.5px;
 }
}

仅有 Firefox 和 Safari 8 (introduced in OS X Yosemite)支持。twitter 有位哥们听到这个消息时,已经不知所云。

psb

现实的

原理简单介绍:content 属性与:before:after 伪元素配合使用,来插入生成内容,即所需边框。使用 transform scale 方法将生成内容的边框(或高度或宽度),缩小至合适大小(如 0.5 倍)。另外,处理好 transform-origin 值至关重要,下图可以帮助你更好地理解 origin值。

transform-15

查看代码或 查看此gist,并奉上 demo

/*上,下边框*/
.tBor:before,
.bBor:after{
    position:absolute;
    content: "";
    height:1px;
    background:red;
    left:0;
    right:0;
}
.tBor:before{
    top:0;
}
.bBor:after{
    bottom:0;
}

/*左,右边框*/
.lBor:before,
.rBor:after{
    position:absolute;
    content: "";
    width:1px;
    background:red;
    top:0;
    bottom:0;
}
.lBor:before{
    left:0;
}
.rBor:after{
    right:0;
}

.trblBor:after{
    position:absolute;
    content:"";
    top:0;
    left:0;
    -webkit-box-sizing:border-box;
    -moz-box-sizing:border-box;
    box-sizing:border-box;
    width:100%;
    height:100%;
    border:1px solid blue;
    point-events:none;
}

/* 最后两个是为了检测Mobile ie9, 是因为Mobile IE9检测出的dpi为96dpi,与实际不符合 */
@media (min--moz-device-pixel-ratio: 1.5),
(-webkit-min-device-pixel-ratio: 1.5),
(min-device-pixel-ratio: 1.5),
(min-resolution: 144dpi),
(min-resolution: 1.5dppx),
(-ms-high-contrast:active),
(-ms-high-contrast:none) {

    /*上,下边框*/
    .tBor:before,
    .bBor:after{
        -webkit-transform:scaleY(.5);
        -ms-transform:scaleY(.5);
        -o-transform:scaleY(.5);
        transform:scaleY(.5);
    }

    /*左,右边框*/
    .lBor:before,
    .rBor:after{
        -webkit-transform:scaleX(.5);
        -ms-transform:scaleX(.5);
        -o-transform:scaleX(.5);
        transform:scaleX(.5);
    }

    /*四边边框*/
    .trblBor:after{
        width:200%;
        height:200%;
        -webkit-transform:scale(.5);
        -ms-transform:scale(.5);
        -o-transform:scale(.5);
        transform:scale(.5);
    }

    /*上,左边框, 四边边框*/
    .tBor:before,
    .lBor:before,
    .trblBor:after{
        -webkit-transform-origin:0 0;
        -moz-transform-origin:0 0;
        -ms-transform-origin:0 0;
        -o-transform-origin:0 0;
        transform-origin:0 0;
    }

    /*下,右边框*/
    .bBor:after,
    .rBor:after{
        -webkit-transform-origin:100% 100%;
        -moz-transform-origin:100% 100%;
        -ms-transform-origin:100% 100%;
        -o-transform-origin:100% 100%;
        transform-origin:100% 100%;
    }
}

/* 解决1.5屏幕下某些边框不显式问题,小数位多写几位 */
@media (-webkit-device-pixel-ratio: 1.5){
    /*上,下边框*/
    .tBor:before,
    .bBor:after{
        -webkit-transform:scaleY(.66666666);
        -ms-transform:scaleY(.66666666);
        -o-transform:scaleY(.66666666);
        transform:scaleY(.66666666);
    }

    /*左,右边框*/
    .lBor:before,
    .rBor:after{
        -webkit-transform:scaleX(.6666);
        -ms-transform:scaleX(.6666);
        -o-transform:scaleX(.6666);
        transform:scaleX(.6666);
    }

    /*四边框*/
    .trblBor:after{
        width:150%;
        height:150%;
        -webkit-transform:scale(.6666);
        -ms-transform:scale(.6666);
        -o-transform:scale(.6666);
        transform:scale(.6666);
    }
}

@media (-webkit-device-pixel-ratio: 3){
    /*上,下边框*/
    .tBor:before,
    .bBor:after{
        -webkit-transform:scaleY(.3333);
        -ms-transform:scaleY(.3333);
        -o-transform:scaleY(.3333);
        transform:scaleY(.3333);
    }

    /*左,右边框*/
    .lBor:before,
    .rBor:after{
        -webkit-transform:scaleX(.3333);
        -ms-transform:scaleX(.3333);
        -o-transform:scaleX(.3333);
        transform:scaleX(.3333);
    }
    /*四边框*/
    .trblBor:after{
        width:300%;
        height:300%;
        -webkit-transform:scale(.3333);
        -ms-transform:scale(.3333);
        -o-transform:scale(.3333);
        transform:scale(.3333);
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

灵芸

每个人心里都住着一个人,或眷念,或暗恋,或想念。

0 文章
0 评论
23714 人气
更多

推荐作者

醉城メ夜风

文章 0 评论 0

远昼

文章 0 评论 0

平生欢

文章 0 评论 0

微凉

文章 0 评论 0

Honwey

文章 0 评论 0

qq_ikhFfg

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文