失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 移动端Retina屏幕1px边框问题

移动端Retina屏幕1px边框问题

时间:2021-07-04 11:14:28

相关推荐

移动端Retina屏幕1px边框问题

问题:移动端开发过程中border出现问题

原因:css中的1px并不等于移动设备的1px,这些由于不同的手机有不同的像素密度。在window对象中有一个devicePixelRatio属性,他可以反应css中的像素与设备的像素比。

devicePixelRatio的官方的定义为:设备物理像素和设备独立像素的比例,也就是 devicePixelRatio = 物理像素 / 独立像素。

解决:

1.通过 JavaScript 检测浏览器能否处理0.5px的边框,如果可以,给html标签元素添加个class。

2、使用border-image实现

3、使用background-image实现
4、多背景渐变实现,与background-image方案类似,只是将图片替换为css3渐变。设置1px的渐变背景,50%有颜色,50%透明。
5、使用box-shadow模拟边框
.box-shadow-1px {box-shadow: inset 0px -1px 1px -1px #c8c7cc;}
6、viewport + rem 实现
同时通过设置对应viewport的rem基准值,这种方式就可以像以前一样轻松愉快的写1px了。

在devicePixelRatio = 2 时,输出viewport:<meta name="viewport" content="initial-scale=0.5, maximum-scale=0.5, minimum-scale=0.5, user-scalable=no">

7、伪类 + 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;}四条boder样式设置:.scale-1px{position: relative;margin-bottom: 20px;border:none;}

.scale-1px: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;}最好在使用前也判断一下,结合 JS 代码,判断是否 Retina 屏:if(window.devicePixelRatio && devicePixelRatio >= 2){

document.querySelector('ul').className = 'scale-1px';

}

如果觉得《移动端Retina屏幕1px边框问题》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。