一,在css中單位長度用的最多的是px、em、rem,這三個的區別是:
1)px是固定像素,一旦設置了就無法因為適應頁面而改變。
2)em和rem相對於px更具有靈活性,因為他們是相對的長度單位(即長度不是定死的,更適用於響應式布局)。
em和rem的區別一句話概括:em相對於父元素,rem相對於根元素(html)
rem中的r意思是root(根源)
二,詳細介紹em
- 子元素字體大小的em是相對於父元素字體大小
- 元素的width/height/padding/margin的em的話是相對於該元素的font-size
下面的一個栗子
1 <div> 2 我是父元素div 3 <p> 4 我是子元素p 5 <span>我是孫元素span</span> 6 </p> 7 </div>
1 div { 2 font-size: 40px; 3 width: 10em; /* 400px */ 4 height: 10em; 5 border: solid 1px black; 6 } 7 p { 8 font-size: 0.5em; /* 20px */ 9 width: 10em; /* 200px */ 10 height: 10em; 11 border: solid 1px red; 12 } 13 span { 14 font-size: 0.5em; 15 width: 10em; 16 height: 10em; 17 border: solid 1px blue; 18 display: block; 19 }
運行結果如下:
猜猜看孫元素的字體是多少呢?
運行結果是12px,是不是和計算的不一致?因為chrome瀏覽器最小字體為12px,小於這個字體就會默認使用12px.當然這一尬境可以由css3解決,這里就不多說了。
三,詳細介紹rem
rem是全部的長度都相對於根元素,根元素是誰?<html>元素。
使用方法:
1)通常做法是給html元素設置字體大小,然后其他元素的長度單位就為rem
栗子同上(html一樣,只是把css中em換成rem):
1 html { 2 font-size: 10px; 3 } 4 div { 5 font-size: 4rem; /* 40px */ 6 width: 30rem; /* 300px */ 7 height: 30rem; 8 border: solid 1px black; 9 } 10 p { 11 font-size: 2rem; /* 20px */ 12 width: 15rem; 13 height: 15rem; 14 border: solid 1px red; 15 } 16 span { 17 font-size: 1.5rem; 18 width: 10rem; 19 height: 10rem; 20 border: solid 1px blue; 21 display: block; 22 }
所以你可以說出孫元素span的font-size具體值嗎?
用rem的好處:當用rem做響應式時,直接在媒體查詢中改變html的font-size的大小,那么用rem作為單位的元素大小都會相應的改變,很方便。
所以更深刻的體會到em,rem的不同(參照物的不同)
總結:
px 與 rem 的選擇?
對於只需要適配少部分手機設備,且分辨率對頁面影響不大的,使用px即可 。
對於需要適配各種移動設備,使用rem,例如只需要適配iPhone和iPad等分辨率差別比較挺大的設備。