1. 程式人生 > >px轉為rem

px轉為rem

rem是一個單位,相對於html的fontsize而言。經常用來適配移動端頁面

邏輯畫素:軟體所能達到的解析度,我們開發實際使用的解析度,eg:320X568

物理畫素(裝置畫素):裝置實際的畫素,就是我們平時買手機說的解析度,是設計人員使用的解析度,eg:640X1136

邏輯畫素和物理畫素之間存在一個縮放因子,有興趣的可以去看看retina屏。

雖然移動端和pc端都是單位都是px,但是這兩個px卻是不同的,前者是邏輯畫素,後者是物理畫素。

裝置

蘋果手機

寬度

高度

對角線

對角線

邏輯解析度(點)

比例因子

裝置解析度(畫素)

PPI

3GS

2.4英寸(62.1毫米)

4.5英寸(115.5毫米)

3.5英寸

小320x480

@ 1X

小320x480

163

4(S)

2.31英寸(58.6毫米)

4.5英寸(115.2毫米)

3.5英寸

小320x480

@ 2倍

640×960

326

5C

2.33英寸(59.2毫米)

4.90英寸(124.4毫米)

4英寸

320x568

@ 2倍

640x1136

326

5(S)

2.31英寸(58.6毫米)

4.87英寸(123.8毫米)

4英寸

320x568

@ 2倍

640x1136

326

6

2.64英寸(67.1毫米)

5.44英寸(138.3毫米)

4.7英寸

375x667

@ 2倍

750x1334

326

6+

3.07英寸(77.9毫米)

6.23英寸(158.2毫米)

5.5英寸

414x736

@ 3倍

1242x2208- >)

1080×1920

401 

我們現在一般設計圖一般基於iphone的,一般是640或750,fonsize是40px。

要使用rem,可以分為兩步

  1). 計算出html的fontsize:(按640設計稿)------- 這段程式碼應該放在body之前,因為應該在渲染頁面之前就計算好,避免出現閃爍問題。

<script>
    function adjustFontsize() {
      var docEle = document.documentElement;
      var width = (screen.width > 0) ? (window.innerWidth >= screen.width || window.innerWidth == 0) ? screen.width :
        window.innerWidth : window.innerWidth;
      if (width) {
        width = Math.min(width, 750);
        docEle.style.fontSize = 20 * (width / 320) + 'px';
      }
    }
    
    var evt = 'onorientationchange' in window ? 'orientationchange' : 'resize';
    window.addEventListener(evt, adjustFontsize, false);

    adjustFontsize();
  </script>
  2). px轉換為rem

      可以使用sublime的外掛cssrem,調整下fontsize

      可以使用scss的函式功能實現

@function rem($target, $context: 40px) {
  @return ($target / $context) * 1rem;
}

使用的時候
padding: rem(10px) 0;