rem布局解析

2021-08-27 10:58:49 字數 2122 閱讀 7757

移動端的螢幕大小各異,尤其是安卓機,千奇百怪,各種尺寸的機型都有,而且有1倍屏,2倍屏,3倍屏之分,作為精益求精的前端,我們希望找到一種完美適配各種機型的方案。rem是現在主流的移動端自適應布局方案,本文主要介紹了rem布局的原理和通用方案

首先說一下,我們想要達到的自適應效果是什麼。很簡單:元素、字型大小能隨著螢幕大小(一般相對於寬度來說)變化而變化,在大一點的螢幕上,尺寸大一些;在小一點的螢幕上,尺寸小一些;尺寸的大小和螢幕大小成正比。

最簡單最直接的方案就是直接用百分比設定元素的尺寸。我們用百分比設定元素大小可以實現元素尺寸的自適應,但是無法實現字型大小的自適應,而且尺寸轉化為百分比計算很麻煩,還有就是元素尺寸的高很難相對螢幕寬度設定百分比。百分比適用於某種具體場景,不是通用解決方案。

其實我們需要的是乙個和螢幕寬度正相關的單位,而且這個單位要和px很容易互相轉化。這樣我們就可以使用這種單位進行元素尺寸和字型大小的設定。那麼css中存在這種單位嗎?答案是:不存在的。。。不過不要灰心,我們可以借助rem來實現這種我們需要的單位。

rem是乙個相對單位,1rem等於html元素上字型設定的大小。我們只要設定html上font-size的大小,就可以改變rem所代表的大小。這樣我們就有了乙個可控的統一參考係。我們現在有兩個目標:

這裡有乙個前提,無論是設定html的font-size和螢幕寬度成正比,還是換算單位,我們都是以我們的標註稿為參考的。移動端的標註稿一般是640px(iphone5)或者750px(iphone6/7/8),現在750px用的比較多一些,我們假設標註稿是750px的。這裡的750px是指裝置的實際尺寸,也是ui標註稿的實際尺寸。而我們編碼寫的px是指css尺寸,是裝置無關的尺寸,css尺寸和螢幕實際尺寸不是1比1的對映關係,而是取決於螢幕的畫素密度。比如iphonex是3倍屏,iphone8是2倍屏,但是兩個的螢幕css尺寸都是375px。而實際的裝置尺寸,iphonex是1125px,iphone8是750px,我們編碼過程中只需要設定css尺寸,裝置會自動幫我們對映實際的尺寸。我們按照標註稿寫完頁面之後,頁面應該是可以在其他所有尺寸裝置上正常自適應地顯示的。

首先,設定rem單位所代表的尺寸大小和螢幕寬度成正比,有3中方案,先不必糾結其中的數值:

@media screen and (min-width:240px) 

}@media screen and (min-width:320px)

}// 紅公尺note2

@media screen and (min-width:360px)

}@media screen and (min-width:375px)

}複製**

document.documentelement.style.fontsize = document.documentelement.clientwidth / 750 + 'px';

複製**

html

複製**

這3種方式,都可以設定html的font-size和螢幕寬度成正比。這3種的單位是css尺寸,無論第一種方法的min-width還是第二種document.documentelement.clientwidth都是相對於裝置的css尺寸而言,在iphonex和iphone8得到的結果都是375px。

第一種,需要設定需要每種螢幕都設定對應的font-size,這些font-size都是根據比例算出來的,比較繁瑣,而且還有可能漏掉某些螢幕尺寸,不推薦。第二種用js設定,比較方便,現在大部分**採用這種方式。第三種通過css的vw來設定,也很方便,而且不用寫css,但是相容性還不是特別好。綜合推薦使用第二種。

現在我們要使用rem設定元素尺寸和字型大小。有兩種思路:

document.documentelement.style.fontsize = document.documentelement.clientwidth / 750 + 'px';

複製**

$rem: 32px;

div複製**

webpack的外掛程式也是基於這樣的計算原理,比如px2rem

module.exports = , , 

}]}]

}}

關於rem布局的解析

html media only screen and min width 401px media only screen and min width 428px media only screen and min width 481px media only screen and min width...

Rem布局的原理解析

rem作用於非根元素時,相對於根元素字型大小 rem作用於根元素字型大小時,相對於其出初始字型大小 mdn em作為font size的單位時,其代表父元素的字型大小,em作為其他屬性單位時,代表自身字型大小 mdn 從作用上可以看出,rem可以用來解決等比例縮放問題,也就是響應式問題。而em用來解...

關於rem布局

我們知道,當使用rem布局,並配合js動態按照比例設定html標籤上的rem值時,整個頁面是按照螢幕的寬度來整體縮放的。對於高度不限制的頁面 也就是超出一屏頁面可以滾動 這種方案沒有任何問題,簡單暴力。但是對於一些需要布滿一整屏的頁面 比如現在流行的上下 左右滑動的那種 由於乙個頁面的元素必須在乙個...