移動端1px問題的一種解決方案

因為retina視網(wǎng)膜屏幕的大量使用,使移動端產(chǎn)生了1px問題。設(shè)備像素比由原本的1變?yōu)?.5/2甚至是現(xiàn)在的3,都使移動端布局產(chǎn)生了更多的問題。

1. 物理像素和獨(dú)立像素

大白話講,一個物理像素就是一個發(fā)光的小燈泡;獨(dú)立像素就是一個正常像素面積的大小,原本來說,一個獨(dú)立像素只有一個發(fā)光的小燈泡,但是,隨著蘋果推出retina視網(wǎng)膜屏幕,使的原本一個獨(dú)立像素面積的地方放了更多的小燈泡。

2. 設(shè)備像素比

設(shè)備像素比=物理像素/獨(dú)立像素;也就是一個獨(dú)立獨(dú)立像素平均放置小燈泡的個數(shù)。如果你的iphone設(shè)備像素比為2的話,那么在一個獨(dú)立像素的面積下就放置了兩小燈泡。

3.帶來的問題

問題就是:當(dāng)我們在CSS代碼里寫border:1px;時,它實際上寫的是一個物理像素,而在設(shè)備像素比為2的設(shè)備上,它顯示的是2px。那么,如何讓它在設(shè)備像素比不為1的設(shè)備上正常顯示1像素呢?

4. 解決方案

這個1px邊框的顯示,用一個div偽類來代替,再用媒體查詢設(shè)備像素比的方法,使用transform:scaleY(0.5);來縮放(此處假設(shè)設(shè)備像素比為2)。

核心代碼如下:

@mixin border-1px($color: rgba(7,17,27,0.2)){
  position:relative;
  &:after{
    display:block;
    position:absolute;
    left:0;
    bottom:0;
    content:'';
    width:100%;
    border-top:1px solid $color;
  }
}

以上是偽類的mixin

@media (-webkit-min-device-pixel-ratio: 1.5),(min-device-pixel-ratio: 1.5){
  .border-1px {
    &:after {
      -webkit-transform: scaleY(0.7);
      -moz-transform: scaleY(0.7);
      -ms-transform: scaleY(0.7);
      -o-transform: scaleY(0.7);
      transform: scaleY(0.7);
    }
  }
}

@media (-webkit-min-device-pixel-ratio: 2),(min-device-pixel-ratio: 2){
  .border-1px {
    &:after {
      -webkit-transform: scaleY(0.5);
      -moz-transform: scaleY(0.5);
      -ms-transform: scaleY(0.5);
      -o-transform: scaleY(0.5);
      transform: scaleY(0.5);
    }
  }
}

@media (-webkit-min-device-pixel-ratio: 3),(min-device-pixel-ratio: 3){
  .border-1px {
    &:after {
      -webkit-transform: scaleY(0.3);
      -moz-transform: scaleY(0.3);
      -ms-transform: scaleY(0.3);
      -o-transform: scaleY(0.3);
      transform: scaleY(0.3);
    }
  }
}

這是設(shè)備像素比媒體查詢的代碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、meta標(biāo)簽的效果 移動端頁面一般會在head頭部添加如下meta標(biāo)簽。 該meta標(biāo)簽是否添加對頁面渲染的影...
    nimw閱讀 3,820評論 0 5
  • 上篇文章 講到了我對設(shè)備像素比的理解,但在寫文章的過程中,也一直有一個疑惑的地方:為什么在 Retina 屏下需要...
    柏丘君閱讀 8,258評論 1 5
  • 在移動互聯(lián)網(wǎng)快速發(fā)展的今天,手機(jī)的種類和尺寸越來越多,作為前端的小伙伴們可能會越來越頭疼,但又不得不去適配一款又一...
    keenjaan閱讀 27,247評論 9 86
  • 剛開始做移動端web開發(fā)的同學(xué)應(yīng)該都碰到過頁面適配問題,為什么我在開發(fā)手機(jī)上調(diào)試好的頁面在其他手機(jī)會有這樣或那樣的...
    留七七閱讀 19,788評論 5 80
  • 從今天開始。 1.制定計劃 2.看一些寫作套路方法,確定寫作風(fēng)格和類型,可有不止一種 3.按計劃定期寫稿 4.多讀...
    只是一個簡單姑娘閱讀 153評論 0 0

友情鏈接更多精彩內(nèi)容