em 參照自己元素的 font-sizejavascript
rem 參照 html 根元素 的 font-sizecss
1. rem 適配 (同一元素,在不一樣設備上,效果同樣)html
適用狀況: 當頁面大於 獨立像素375 時,或者頁面元素不少時java
頁面中的元素,統一 單位 rem(字體使用 px 而不使用 rem)面試
根元素字體大小 設置成 整個屏幕的寬(1 rem = 375px),而後元素的 css 像素根據佔據屏寬,使用 rem app
// 適配 (手寫 面試題) (function(){ /* 1. 建立 style 標籤 */ var styleNode = document.createElement("style"); /* 2. 給 style 標籤添加內容 (屏幕分份, 大多數公司 16 份) */ styleNode.innerHTML = "html {"+ "font-size:"+width/16+"px !important"+ "}"; /* IPhone 6 的 font-size: 23.4375px */ /* 3. 把 style 標籤追加到 head 標籤裏 */ document.head.appendChild(styleNode); }());
缺點: 需換算元素佔屏幕的 rem佈局
2. viewport 適配字體
適用狀況: 當 ui 設計圖 小於 獨立像素 375時。 避免換算,直接使用 css 像素單位 pxui
缺點: 圖片可能失真; 打破完美佈局視口。spa
讓 佈局視口 等於 設計圖紙的 width
(直接 讓meta 標籤中 content 的 佈局視口 width=320px 安卓不支持)
<head> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" /> </head> <script type="text/javascript"> var clientWidth = document.documentElement.clientWidth; var targetWidth = 320; var scale = clientWidth/targetWidth; var metaNode = document.querySelector("meta[name='viewport']"); metaNode.content = "initial-scale="+scale+ ", user-scalable=no"; </script>
3. 百分比適配
zepto 移動端實戰項目。
適用狀況: 頁面元素少。
4. 媒體選擇器(響應式佈局)
不一樣屏幕,自適應呈現出不一樣的佈局。
5. 具體像素值
適用狀況: 當 ui 設計圖 未標明 寬度,以及元素的具體位置時。
關鍵點: