安卓设备1px边框较粗的问题解决

背景:设备分辨率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);
}

优点:基本能实现
缺点:线比较虚

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值