移动端1px问题的解决办法

原因

由于不同的手机有不同的像素密度导致的。如果移动显示屏的分辨率始终是普通屏幕的2倍,1px的边框在devicePixelRatio=2的移动显示屏下会显示成2px,所以在高清瓶下看着1px总是感觉变胖了



解决方法

一.在ios8+中当devicePixelRatio=2的时候使用0.5px

p{

    border:1px solid #000;

}

@media (-webkit-min-device-pixel-ratio: 2) {

     p{

         border:0.5px solid #000;

     }

}


二,伪元素 + transform 实现

对于老项目伪元素+transform是比较完美的方法了。

原理是把原先元素的 border 去掉,然后利用 :before 或者 :after 重做 border ,并 transform 的 scale 缩小一半,原先的元素相对定位,新做的 border 绝对定位。

单条border样式设置:

.scale-1px{ position: relative; border:none; }

.scale-1px:after{

    content: '';

    position: absolute; bottom: 0;

    background: #000;

    width: 100%; height: 1px;

    -webkit-transform: scaleY(0.5);

    transform: scaleY(0.5);

     -webkit-transform-origin: 0 0;

    transform-origin: 0 0; 

}

优点:所有场景都能满足,支持圆角(伪元素和本体都需要加border-radius)

缺点:对于已经使用伪元素的元素(例如clearfix),可能需要多层嵌套


三,viewport + rem 实现

这种兼容方案相对比较完美,适合新的项目,老的项目修改成本过大。

在devicePixelRatio = 2 时,输出viewport:

在devicePixelRatio = 3 时,输出viewport:

优点:所有场景都能满足,一套代码,可以兼容基本所有布局

缺点:老项目修改代价过大,只适用于新项目


四,使用box-shadow模拟边框

利用css 对阴影处理的方式实现0.5px的效果

样式设置:

.box-shadow-1px {

box-shadow: inset 0px -1px 1px -1px #c8c7cc;

}

优点:代码量少,可以满足所有场景

缺点:边框有阴影,颜色变浅

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.你是谁? 曾经是一名技术支持工程师 现在是一个猎头顾问 是一个CFer 是一名潜水员 还是一名舞蹈爱好者,练习...
    JC点菜阅读 4,039评论 0 0
  • 1. 今天一个魔法的瞬间:中午阿喜抽出点时间和我交流如何改善伴侣关系的。得到了一个很好的启发“树立自己的界限”。自...
    彩茹宝贝阅读 1,404评论 0 0
  • 想做一个温暖的人,努力把所有擦肩而过的人记住,让每个对生活失去信心的人看到光明
    我新匪石阅读 832评论 0 0
  • 魔杰座,周杰伦08发行的专辑,因为名字和星座很像,当时很是期待,喜欢里面《说好的幸福呢》《稻香》。 摩羯座,这才是...
    豆子121阅读 1,573评论 0 0