为了账号安全,请及时绑定邮箱和手机立即绑定

Retina屏的移动设备实现真正1px的线的解决方案

标签:
CSS3

移动设备1px的线有时候看起来不对确实影响整体的美观,因此网上查了一下资料,找到两种比较好的解决方案,记录方便以后使用。

一、 淘宝M站是通过 viewport + rem 实现的

在devicePixelRatio = 2 时,输出viewport

<meta name="viewport" content="initial-scale=0.5, maximum-scale=0.5, minimum-scale=0.5, user-scalable=no">

在devicePixelRatio = 3 时,输出viewport

<meta name="viewport" content="initial-scale=0.3333333333333333, maximum-scale=0.3333333333333333, minimum-scale=0.3333333333333333, user-scalable=no">

同时通过设置对应viewport的rem基准值,这种方式就可以像以前一样轻松愉快的写1px了。

二、伪类 + transform

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

  • 单条 border

.hairlines li{    position: relative;    border:none;
}.hairlines li:after{    content: '';    position: absolute;    left: 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

.hairlines li{    position: relative;    margin-bottom: 20px;    border:none;
}.hairlines li:after{    content: '';    position: absolute;    top: 0;    left: 0;    border: 1px solid #000;    -webkit-box-sizing: border-box;    box-sizing: border-box;    width: 200%;    height: 200%;    -webkit-transform: scale(0.5);    transform: scale(0.5);    -webkit-transform-origin: left top;    transform-origin: left top;    border-radius: 5px;/*实现圆角*/}

样式使用的时候,也要结合 JS 代码,判断是否 Retina 屏

if(window.devicePixelRatio && devicePixelRatio >= 2){    document.querySelector('ul').className = 'hairlines';
}

第二种有点小缺陷是 <td> 用不了,第二种使用会比较简单方便,
第一种使用起来比较会比较费劲。所以用第二种做了一个简单Demo。
效果:


webp

1px.png

是不是瞬间看起来感觉棒棒哒!
真正手机看效果更好!



作者:独孤久见
链接:https://www.jianshu.com/p/ee67305e6388


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消