背景:设备分辨率dpr,安卓设备一般设备分辨率为2,相当于是2个像素为1px,在iphone5/6/7/8上设备分辨率为2,相当于2个像素为1px,在6p、7p、8p、x等手机上设备分辨率为3,相当于3个像素为1px;要想在设备锁看起来比较细,在二倍分辨率下就需要0.5px,在3倍分辨率下就需要0.33px,以此来构成1像素
flexable.js就是通过判断设备分辨率,控制meta标签进行相应的放缩,达到1px代表1像素的要求,但是由于安卓设备不支持0.5px,flexable.js对所有安卓设备不做缩放处理,1px代表的是2个像素,因此看来1px在安卓手机上看是很粗的
解决方案:
一、使用tranform放缩,根据after属性,绝对定位到元素上,将宽高放大2倍,然后用transform缩小0.5,达到将边框变细的效果
.light-line{
border: none;
box-sizing: border-box;
position: relative;
&:after{
content: '';
position: absolute;
top: 0;
left: 0;
border: 1Px solid rgba(240,50,47,0.5);
box-sizing: border-box;
width: 200%;
height: 200%;
-webkit-transform: scale(0.5);
transform: scale(0.5);
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
}
}
优点:边框四周边边框看起来都很细,单个按钮边框展示无影响
缺点:由于是放缩,在一个列表中会导致某些线条出不来;
二、用svg背景图片,画一条1像素的线条作为背景图片
.light-svg-line{
height: 1Px;
background: url("data:image/svg+xml;utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='100%' height='1px'><line x1='0' y1='0' x2='100%' y2='0' stroke='#000'></line></svg>");
background: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxMDAlJyBoZWlnaHQ9JzFweCc+PGxpbmUgeDE9JzAnIHkxPScwJyB4Mj0nMTAwJScgeTI9JzAnIHN0cm9rZT0nIzAwMCc+PC9saW5lPjwvc3ZnPg==');
}
优点:作为只有1像素高度的图片,不管是在安卓还是ios都能展示得很细
缺点:作为背景图,适用于列表底边边框;如果四边需要边框,圆角是实现不了的
注: 火狐浏览器对svg的图形处理不了,因此需要将svg转化成2进制
三、box-shadow
.line-box-shdow{
height: 1Px;
background: none;
box-shadow: 0 1px 0 #e1e1e1;
}
优点:看起来是比较细
缺点:在ios上看起来比较模糊
四、line-gradient,一半白色,一半黑色,让边距变小
.line-gradient{
height: 1Px;
background:linear-gradient(0deg, #fff, #000);
}
优点:基本能实现
缺点:线比较虚