移動端1px產生緣由及解決之道

產生緣由

    由於Retine屏的分辨率始終是普通屏幕的2倍,1px的邊框在devicePixelRatio=2的retina屏下會顯示成2px,因此在高清瓶下看着1px老是感受變胖了ios

解決之道

    1.在ios8+中當devicePixelRatio=2的時候使用0.5px

div{
     border:1px solid #000;
}    

@media (-webkit-min-device-pixel-ratio: 2) {
    div{
          border:0.5px solid #000;
    }
}

    2.  transform: scale(0.5)

//下面是經過僞類實現的1px線條
.onePxHei(@borColor:#efefef,@borPx:1px){
  &:after{
    position: absolute;
    bottom: -1px;
    left: 0;
    width: 100%;
    height: 2px;
    -webkit-transform: scale(1,.5);
    transform: scale(1,.5);
    -webkit-transform-origin: 0 0;
    transform-origin: 0 0;
    content: '';
    background-color: @borColor;
  }
}

    本人用的是less,這是mixinweb

    缺點:圓角沒法實現,實現4條邊框比較麻煩less

    3.使用background-image

//經過background實現的1px,設置到dom自己,不會繪製padding和margin區域
.onePxBottomByBg(@borColor:#efefef,@borPx:1px){
  background-image: -webkit-linear-gradient(top, @borColor, @borColor 50%, transparent 50%);
  background-image: linear-gradient(180deg, @borColor, @borColor 50%, transparent 50%);
  background-size: 120% @borPx;
  background-repeat: no-repeat;
  background-position: bottom left;
  background-origin: content-box;
}

    優勢:基本全部場景都能知足,包含圓角的button,單條,多條線     dom

    缺點:大量使用漸變可能致使性能瓶頸性能

總結:建議background-image+transform: scale(0.5)配合使用,優先使用縮放spa

相關文章
相關標籤/搜索