## 學習CSS了解單位em和px的區別
這里引用的是Jorux的“95%的中國網站需要重寫CSS”的文章,題目有點嚇人,但是確實是現在國內網頁制作方面的一些缺陷。我一直也搞不清楚px與em之間的關系和特點,看過以后確實收獲很大。平時都是用px來定義字體,所以無法用瀏覽器字體放大的功能,而國外大多數網站都可以在IE下使用。因為:
1、IE無法調整那些使用px作為單位的字體大小;
2、國外的大部分網站能夠調整的原因在于其使用了em作為字體單位;
3、Firefox能夠調整px和em,但是96%以上的中國網民使用IE瀏覽器(或內核)。
px像素(Pixel)。相對長度單位。像素px是相對于顯示器屏幕分辨率而言的。(引自CSS2.0手冊)
> em是相對長度單位。相對于當前對象內文本的字體尺寸。如當前對行內文本的字體尺寸未被人為設置,則相對于瀏覽器的默認字體尺寸。(引自CSS2.0手冊)
任意瀏覽器的默認字體高都是16px。所有未經調整的瀏覽器都符合: 1em=16px。那么12px=0.75em,10px=0.625em。為了簡化font-size的換算,需要在css中的body選擇器中聲明Font-size=62.5%,這就使em值變為 16px*62.5%=10px, 這樣12px=1.2em, 10px=1em, 也就是說只需要將你的原來的px數值除以10,然后換上em作為單位就行了。
**在W3C官網上是這樣描述em的——“em(font size of the element)”。**
EM就是根據基準來縮放字體的大小。EM實質是一個相對值,而非具體的數值。這種技術需要一個參考點,一般都是以< body >的“font-size”為基準。
em有如下特點:
1、em的值并不是固定的;
2、em會繼承父級元素的字體大小。
所以我們在寫CSS的時候,需要**注意**:
1、body選擇器中聲明Font-size=62.5%;
2、將你的原來的px數值除以10,然后換上em作為單位;
3、重新計算那些被放大的字體的em數值。避免字體大小的重復聲明。
也就是避免1.2 * 1.2=1.44的現象。比如說你在#content中聲明了字體大小為1.2em,那么在聲明p的字體大小時就只能是1em,而不是1.2em, 因為此em非彼em,它因繼承#content的字體高而變為了1em=12px。
但是12px漢字例外,就是由以上方法得到的12px(1.2em)大小的漢字在IE中并不等于直接用12px定義的字體大小,而是稍大一點。這個問題 Jorux已經解決,只需在body選擇器中把62.5%換成63%就能正常顯示了。原因可能是IE處理漢字時,對于浮點的取值精確度有限。不知道有沒有其他的解釋.

> **注意:**只有font-size值為百分數%的時候才是相對于16px來計算的,如果是算其它的,如 width,height這些,不是計算font-size的話,則不是以16px為基準。
* * * * *
CSS3新增了一個相對單位rem(root em,根em),這個單位引起了廣泛關注。這個單位與em有什么區別呢?區別在于使用rem為元素設定字體大小時,仍然是相對大小,但相對的只是HTML根元素。這個單位可謂集相對大小和絕對大小的優點于一身,通過它既可以做到只修改根元素就成比例地調整所有字體大小,又可以避免字體大小逐層復合的連鎖反應。目前,除了IE8及更早版本外,所有瀏覽器均已支持rem。對于不支持它的瀏覽器,應對方法也很簡單,就是多寫一個絕對單位的聲明。這些瀏覽器會忽略用rem設定的字體大小。
CSS3的出現,他同時引進了一些新的屬性,包括我們今天所說的rem。
**在W3C官網上是這樣描述rem的——“font size of the root element” 。**
em單位是相對于父節點的font-size,會有一些組合的問題,而rem是相對于根節點(或者是html節點),也就是說你可以在html節點定義一個單獨的字體大小,然后所有其他元素使用rem相對于這個字體的百分比進行設置,這樣就意味著,我們只需要在根元素確定一個參考值,在根元素中設置多大的字體,這完全可以根據您自己的需.
例子:
~~~
html { font-size: 62.5%;/*10 ÷ 16 × 100% = 62.5%*/ }
body { font-size: 1.4rem;/*1.4 × 10px = 14px */ }
h1 { font-size: 2.4rem;/*2.4 × 10px = 24px*/ }
p {font-size:14px; font-size:1.4rem;}
/*IE8及之前版本的IE瀏覽器使用14像素*/
~~~
**根元素中定義了一個基本字體大小為62.5%(也就是10px。設置這個值主要方便計算,如果沒有設置,將是以“16px”為基準 )。**
從上面的計算結果,我們使用“rem尺寸字體”就像使用“px尺寸字體”一樣的方便。
這完全可以根據您自己的需,大家也可以參考下圖:
http://pxtoem.com/ 
在用戶使用“查看 > 文字大小”菜單調整網頁文本大小的時候,IE9及更早版本只能縮放以相對單位設定的文本(使用像素之類的絕對單位設定的文本無法縮放)。換句話說,使用rem單位在IE7和IE6中存在一個小小的副作用,那就是這些瀏覽器的用戶必須使用“查看 > 縮放”來調整整個頁面的大小。當然,這也算一個應該升級到現代瀏覽器的原因吧。
**嗯,使用了rem就意味著不考慮IE 8及其之前的IE瀏覽器了,IE9和IE10要用rem的話,不能用font屬性簡寫。**
不過使用單位設置字體,可不能完全不考慮IE了,如果你想使用這個REM,但也想兼容IE下的效果,可你可考慮“px”和“rem”一起使用,用"px"來實現IE6-8下的效果,然后使用“Rem”來實現代瀏覽器的效果。就讓IE6-8不能隨文字的改變而改變吧,誰讓這個Ie6-8這么老呢?哈。。。。大家不仿試試,還蠻有意思,說不定這個就是主流的度量單位了。
- 序
- 開發自己的博客
- 面試集合
- 基礎
- 1、JavaScript
- js技巧
- 2、CSS
- position之absolute
- em與rem
- inline-block
- background
- 圓角、透明度、漸變
- 關于css中的0和none
- css display:none小結
- z-index小結
- 理解滾動條
- 有關@font-face的問題
- 3、HTML
- URI中依賴協議的URL
- 4、MySQL
- limit使用
- 5、jQuery
- 6、移動Web開發
- 設計稿與分辨率
- 字體
- 圖片的自適應
- 7、前端布局bug問題(!<=IE8)
- SEO與頁面結構
- seo
- vsphere 虛擬服務器
- 代碼里的彩蛋(神注釋)
- 玩轉HTML5移動頁面
- 知識梳理
- JS 鍵盤碼
- 其他資源記錄
- temp
- TODO
- 簡單有趣的庫??
- xx