rem(root em)相對於根元素 <html> 的字體大小。預設瀏覽器 font-size: 16px,故 1rem = 16px。與 em(相對父元素)不同,rem 全域統一基準,避免巢狀疊加計算困擾。
移動端裝置寬度從 320px 到 414px 甚至更大。傳統固定寬度、流式布局、viewport 縮放皆有缺陷。採用 rem:
html { font-size: 100px; }(或依設計稿換算)。resize 動態調整 html 字體大小 = 裝置寬度 / 設計稿寬度 * 基準值。使用者若在瀏覽器設定「最小字體大小」或頁面縮放,px 固定不變導致排版破裂,rem 隨根元素縮放,保持比例協調。
em 依賴父元素,多層巢狀導致 1.2em * 1.2em * 1.2em... 難以預測。rem 永遠參考根元素,維護極簡單。
/* CSS */
html { font-size: 100px; } /* 設計稿 750px 寬,1rem = 100px 方便換算 */
body { font-size: 0.14rem; } /* 14px */
.container { width: 7.5rem; padding: 0.15rem; }
/* JS 動態基準 */
(function () {
const designWidth = 750;
function setRootFont() {
const clientWidth = document.documentElement.clientWidth || document.body.clientWidth;
document.documentElement.style.fontSize = (clientWidth / designWidth * 100) + 'px';
}
window.addEventListener('resize', setRootFont);
setRootFont();
})();
手機淘寶首頁改版全面採用 rem,證明其在高併發、多裝置環境下的穩定性與開發效率提升。