在寫前端頁面的時候經(jīng)常會用到rem
,也在網(wǎng)上看了別人對rem的介紹,詳細(xì)的情況就不在此描述,只說一下我對rem的看法和用法。
在我看來,rem 是一種相對的尺度,相對于根元素設(shè)置的font-size,比如:
html {
font-size: 16px;
}
那么,在別的地方使用rem的時候 1rem 就會等于 16px。
這算是對rem最基礎(chǔ)的應(yīng)用,但是這種使用方式和直接使用px沒有任何區(qū)別,只是單位不一樣,需要進行換算。
既然rem 是一種相對尺度,最常用于頁面自適應(yīng),我們就不能簡單粗暴的直接對根元素設(shè)置字號來決定1rem的大小。
眾周所知,android手機屏幕大小不一,各種尺寸的都有,這樣的情況給我們的前端開發(fā)帶來了很大的麻煩,我們不可能針對每一種手機尺寸去寫一套代碼來進行適應(yīng)。設(shè)計師也不可能針對每一種手機尺寸做一套設(shè)計標(biāo)注。
假設(shè)設(shè)計師做的圖以750px為寬度。我們怎么能在一套設(shè)計圖和一套代碼里去適應(yīng)所有的手機屏幕呢?這時候rem就非常有用了。
不知道別人公司是怎么用的,在我們公司針對rem做了一個轉(zhuǎn)換公式。
根字號 = x * ( pageWith / 750 );
這里有幾個值需要解釋一下:
這里還有一個地方要解釋一下,什么是設(shè)計圖上的px? 比如設(shè)計圖寬度為750px,你希望1rem = 100px 那整個設(shè)計圖的寬度就可以寫做7.5rem,但這個100px只是針對于設(shè)計圖,因為實際上手機的尺寸是不確定的。
啊~~~ 越說越亂了,還是先解釋公式吧:
公式的意思是把真實的屏幕分成設(shè)計圖寬度的份數(shù),乘以你希望1rem能代表多少設(shè)計圖上的Px,最終得到一個值,把這個值當(dāng)做根元素的字號,你的頁面中就可以完全使用rem,完全按照設(shè)計圖上的尺寸做界面,從而達(dá)到在不同手機屏幕下的自適應(yīng)。
不知道有沒有表達(dá)清楚我想表達(dá)的意思。還是上代碼吧,
var remUnit = 0;
function setRemUnit () {
var doc = document.documentElement;
var width = doc.clientWidth;
remUnit = 100 * (width / 750);
doc.style.fontSize = remUnit + 'px';
}
window.addEventListener('resize', setRemUnit);
setRemUnit();
這段代碼意思是以設(shè)計圖寬度750px為基準(zhǔn),以期望1rem=100px為前提,計算出一個值,設(shè)置到根元素上。
使用時可以這樣用:
比如設(shè)計圖上有一個div 寬度為300px,div內(nèi)有一個頭像 寬度120px,頭像右側(cè)是用戶名,32號字,我們可以這樣寫:
.avatar-block {
width: 3rem;
....
.avatar {
width: 1.2rem;
height: 1.2rem;
border-radius: 50%;
...
}
.username {
font-size: 0.32rem;
...
}
}
因為屏幕是不固定的,所以在不同屏幕下,通過計算得到的根元素字號也是跟著屏幕大小變化而變化的,所以才能做到一套設(shè)計圖一套代碼 就能適應(yīng)所有屏幕。
完
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。