rem佈局能夠等比例的縮放頁面(寬高都自適應,在移動端較好),用戶體驗相對百分比佈局可能會更好一些javascript
rem
(font size of the root element)是指相對於根元素
的字體大小的單位。它是一個相對單位。css
em
(font size of the element)是指相對於當前元素
的字體大小的單位。它也是一個相對單位。html
【01-em佈局存在問題.html】java
body{ font-size: 20px;/*此時在瀏覽器的調試窗口改變這個值,會等比例放大和縮小*/ } .box{ width: 25em;/* 500px*/ height: 25em;/*500px*/ border: 1px solid red; margin: 2.5em auto;/*20px*/ } .in{ width: 15em;/*300px*/ height: 15em;/*300px*/ border: 1px solid blue; margin: 2.5em auto;/*20px*/ /*font-size: 20px;*/ /*這裏加上這行佈局就亂了*/ }
<div class="box"> <div class="in"> 全棧工程師,呸,全乾工程師纔對。 </div> </div>
總結:不能用em來佈局,而是經過rem來佈局。em來佈局,當前元素的font-size一改變,佈局就亂了。瀏覽器
【02-rem佈局.html】佈局
將【01-em佈局存在問題.html】這個例子中的css改爲rem字體
html{ font-size: 20px;/*此時在瀏覽器的調試窗口改變這個值,會等比例放大和縮小*/ } .box{ width: 25rem;/* 500px*/ height: 25rem;/*500px*/ border: 1px solid red; margin: 2.5rem auto;/*20px*/ } .in{ width: 15rem;/*300px*/ height: 15rem;/*300px*/ border: 1px solid blue; margin: 2.5rem auto;/*20px*/ font-size: 30px;/*加上這個佈局也不會亂*/ }
由於rem的基準點是根元素html的字體大小,所以只須要設置不一樣屏幕的html的font-size大小
不同就能夠達到不一樣屏幕的適配了。插件
注意:調試
使用rem配合媒體查詢能夠適配多個終端
// 320 360 375 384 400 414 424 480 484 540 720 750code
@media (min-width: 320px) { html { font-size: 42.67px; } } @media (min-width: 375px) { html { font-size: 50px;; } } @media (min-width: 414px) { html { font-size: 55.2px;; } } @media (min-width: 480px) { html { font-size: 64px;; } } @media (min-width: 640px) { html { font-size: 85.33px; } } @media (min-width: 750px) { html { font-size: 100px;; } }
優勢:使用媒體查詢適配,速度快。
缺點:適配多個終端時,須要添加響應的代碼。
原理:經過js監聽瀏覽器的寬度,動態設置html的font-size的值
通常狀況下1rem的值設置爲屏幕寬度的十分之一
// 1rem大小爲 屏幕寬度1/10 // 動態監聽屏幕寬度變化,實時設置rem大小 function setRem() { var w = window.innerWidth; //獲取屏幕寬度 //最大寬度限制 if (w > 640) { w = 640; } //設置rem大小 document.documentElement.style.fontSize = w / 10 + 'px'; } setRem(); //監聽瀏覽器窗口尺寸變化 window.onresize = setRem;
優勢:直接適配全部的終端
缺點:必須在頁面加載以前設置html的font-size值,否則會出現文字大小調動的狀況。
rem+js的方式會更好一些
px2rem插件能夠快速的將px轉化成rem單位