鍍金池/ 問答/HTML/ 移動端 px與rem換算問題

移動端 px與rem換算問題

今天看文章的時候,看到一段代碼不是很理解,所以在這里求教下給。
文章地址:
https://www.cnblogs.com/azhai...

不理解的代碼段:
docEl.style.fontSize = 20 * (clientWidth / 320) + 'px';

請問為什么上面的代碼就可以求出根元素的font-size? 謝謝

回答
編輯回答
耍太極
1.什么是rem
來自于鵝廠ISUX團隊的解釋如下: rem(font size of the root element)是指相對于根元素的字體大小的單位。簡單的說它就是一個相對單位??吹絩em大家一定會想起em單位,em(font size of the element)是指相對于父元素的字體大小的單位。它們之間其實很相似,只不過一個計算的規(guī)則是依賴根元素一個是依賴父元素計算。
所以這里總結(jié)一句,所謂依賴根元素來計算的方式,就是先給予html元素一個font-size,然后我們所有的rem就根據(jù)這個font-size來計算
例如:
1
html{ font-size:16px;}
那么我們這里的1rem就應該這么來計算:1x16=16px=1rem;瀏覽器默認為16px可能造成rem計算上的麻煩和多位小數(shù),所以,我們也可以進行這種方式的初始化根元素:
html{
font-size=62.5% //這里就是10/16x100%=62.5% 也就是默認10px的字號
}
這樣初始化之后,我們來進行rem計算的時候,就會減少許多的麻煩。

這老哥這種操作我不是很懂,想讓跟元素字體大小為10px,可以直接html{ font-size:10px;}吧?為什么要先搞成16px再乘以62.5%?

回到你說的這個式子.

(function (doc, win) {
    var docEl = doc.documentElement,
        resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
        recalc = function () {
            var clientWidth = docEl.clientWidth;<br>       window.innerWidth>max ?  window.innerWidth : max;
            if (!clientWidth) return;
            docEl.style.fontSize = 20 * (clientWidth / 320) + 'px';
        };
 
    if (!doc.addEventListener) return;
    win.addEventListener(resizeEvt, recalc, false);
    doc.addEventListener('DOMContentLoaded', recalc, false);
})(document, window);

320是定義的手機屏幕的最小寬度
clientWidth是document.documentElement.clientWidth,也就是當前的窗口寬度.
他提到了當屏幕寬度為640的時候,默認跟節(jié)點字體大小為20px,不過這個js設置的是40px.

(當前屏幕寬度/320)*20
我們用console來驗證一下.

clipboard.png



> window.document.documentElement.clientWidth
384
> window.document.documentElement.clientWidth/320*20
24

這個事件在頁面load和resize的時候觸發(fā),就是每次窗口變化就重置根節(jié)點字體大小,相當于更改了rem的長度,來實現(xiàn)頁面適配.
他那個寫法會把字體設置的比較大,可以理解為整個屏幕的寬度就是16rem.

實際上我是寫后端的..有不對的地方請指出...

2017年1月6日 00:01
編輯回答
不討囍

看這個代碼是根據(jù)屏幕寬度來求相對于320寬度的字體大小,320寬度下是20px,480寬度下是30px,640寬度下是40px

2017年12月26日 14:19
編輯回答
傻叼
  • 這個是基于你的設計稿為 320 的情況,就是你按 320 來進行切圖,那么就是1:1的比例。此時的font-size就是20,對不,相當于給了html的font-size一個默認值 20px。
  • 那么當我們屏幕放大的時候,比如屏幕為:640,那么現(xiàn)在的font-size就是40了。
  • 基于rem單位布局,就會自動放大,比如原先按320設計稿的寬為50,那么在640的屏幕下就乘以 640/320 這個比例。自動放大到100。達到自適應的效果。
2018年1月6日 15:43