Open AlexZ33 opened 2 years ago
/*
*@mixin 主要供头发线来调用针对不同的dpr给1px解决方案
*/
@mixin prefixDpr($direct,$radius,$color:'bule',$dpr:2){
$scaleVul:0;
$scaleDirect:'scale';
@if $dpr == 1 {
&{
@if $direct == 'all'{
border: 1px solid $color;
@if $radius{
border-radius:#{$radius};
}
} @else{
border-#{$direct}: 1px solid $color;
}
}
}@else if $dpr >= 2 {
$scaleVul:.5;
&{
@if $direct == 'all'{
position:relative;
}
border: 0;
border-radius:0;
}
&:before {
content: ' ';
display: block;
position: absolute;
box-sizing:border-box;
top: 0;
left: 0;
transform-origin:0 0;
width:100% * $dpr;
height:100% * $dpr;
pointer-events: none;
transform: translate3d(0,0,0) #{$scaleDirect+'('+$scaleVul+')'};
@if $direct == 'all'{
border: 1px solid $color;
border-radius: #{$radius};
} @else{
border-#{$direct}: 1px solid $color;
}
}
}
}
/*
*@mixin 解决android下1px的问题(头发线)
*/
@mixin hairline($radius,$direct: 'all',$color: #666) {
[data-os="ios"] & {
@include prefixDpr($direct,$radius,$color,1);
}
[data-os="android"] &{
@media only screen and (-webkit-min-device-pixel-ratio:1) {
@include prefixDpr($direct,$radius,$color,1);
}
@media only screen and (-webkit-min-device-pixel-ratio:2) and (-webkit-max-device-pixel-ratio:3){
@include prefixDpr($direct,$radius,$color,2);
}
}
}
背景
前些日子总被人问起 iOS Retina 屏,设置 1px 边框,实际显示 2px,如何解决? 原来一直没在意,源于自己根本不是像素眼…… 今天仔细瞅了瞅原生实现的边框和CSS设置的边框,确实差距不小……
![image](https://user-images.githubusercontent.com/21971405/148176656-b7c68dcb-d3aa-476e-a1da-fa122c67cb79.png)
scss写个mixin