css中的px、em、rem 詳解

概念介紹:

一、px (pixel,像素):

是一個虛擬長度單位,是計算機系統的數字化圖像長度單位,若是px要換算成物理長度,須要指定精度DPI(Dots Per Inch,每英寸像素數),在掃描打印時通常都有DPI可選。Windows系統默認是96dpi,Apple系統默認是72dpi。css

二、em(相對長度單位,相對於當前對象內文本的字體尺寸):

是一個相對長度單位,最初是指字母M的寬度,故名em。現指的是字符寬度的倍數,用法相似百分比,如:0.8em, 1.2em,2em等。一般1em=16px。html

三、pt (point,磅):

是一個物理長度單位,指的是72分之一英寸。pt=1/72(英寸), px=1/dpi(英寸)瀏覽器

四、rem(root em,根em):

是CSS3新增的一個相對單位,這個單位引發了普遍關注。這個單位與em有什麼區別呢?區別在於使用rem爲元素設定字體大小時,仍然是相對大小,但相對的只是HTML根元素。這個單位可謂集相對大小和絕對大小的優勢於一身,經過它既能夠作到只修改根元素就成比例地調整全部字體大小,又能夠避免字體大小逐層複合的連鎖反應。目前,除了IE8及更早版本外,全部瀏覽器均已支持rem。對於不支持它的瀏覽器,應對方法也很簡單,就是多寫一個絕對單位的聲明。這些瀏覽器會忽略用rem設定的字體大小。bash

一、em與px的問題

px是何物?

px像素(Pixel)。相對長度單位。像素px是相對於顯示器屏幕分辨率而言的。(引自CSS2.0手冊) em是相對長度單位。相對於當前對象內文本的字體尺寸。如當前對行內文本的字體尺寸未被人爲設置,則相對於瀏覽器的默認字體尺寸。(引自CSS2.0手冊) PX特色工具

  1. IE沒法調整那些使用px做爲單位的字體大小;
  2. 國外的大部分網站可以調整的緣由在於其使用了em或rem做爲字體單位;
  3. Firefox可以調整px和em,rem,可是96%以上的中國網民使用IE瀏覽器(或內核)。
em是何物?

em 指字體高,任意瀏覽器的默認字體高都是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做爲單位就好了。字體

em特色:

1em指的是一個字體的大小,它會繼承父級元素的字體大小,所以並非一個固定的值。任何瀏覽器的默認字體大小都是16px。所以,12px = 0.75em。實際應用中爲了方便換算,一般會以下設置樣式: CSS代碼網站

html { font-size: 62.5%; }
複製代碼

這樣,1em = 10px。咱們經常使用的1.2em理論上就是12px。可是,這個換算在IE瀏覽器下不成立,1.2em會比12px稍大一些,解決辦法是把html標籤樣式中的62.5%改爲63%,即: CSS代碼spa

html { font-size: 63%; }
複製代碼

在 中文的文章中,通常會在段首空兩格。若是用px做爲單位,對12px字體來講須要空出24px,對14px字體來講須要空出28px……這樣換算很是不通 用。若是用上em單位,這個問題就很好解決了,1個字的大小就是1em,那兩個字的大小就是2em。所以,只需這樣定義就好了: CSS代碼code

p { text-indent: 2em; }
複製代碼

em和px兩種字體單位的區別

字體單位應該用em而不用px,緣由簡單來講就是支持IE6下的字體縮放,在頁面中按ctrl+滾輪,字體以px爲單位的網站沒有反應。px是絕對單位,不支持IE的縮放,em是相對單位。 我在調整本blog的時候,發現不只僅是字體,將行距(line-height),和縱向高度的單位都用em。保證縮放時候的總體性。htm

em有以下特色:
  1. em的值並非固定的;
  2. em會繼承父級元素的字體大小。
em重寫步驟:
  1. body選擇器中聲明Font-size=62.5%;
  2. 將你的原來的px數值除以10,而後換上em做爲單位; 簡 單吧,若是隻須要以上兩步就能解決問題的話,可能就沒人用px了。通過以上兩步,你會發現你的網站字體大得出乎想象。由於em的值不固定,又會繼承父級 元素的大小,你可能會在content這個div裏把字體大小設爲1.2em, 也就是12px。而後你又把選擇器p的字體大小也設爲1.2em,但若是p屬於content的子級的話,p的字體大小就不是12px,而是1.2em= 1.2 * 12px=14.4px。這是由於content的字體大小被設爲1.2em,這個em值繼承其父級元素body的大小,也就是16px * 62.5% * 1.2=12px, 而p做爲其子級,em則繼承content的字體高,也就是12px。因此p的1.2em就再也不是12px,而是14.4px。
  3. 從新計算那些被放大的字體的em數值。避免字體大小的重複聲明,也就是避免以上提到的1.2 * 1.2= 1.44的現象。好比說你在#content中聲明瞭字體大小爲1.2em,那麼在聲明p的字體大小時就只能是1em,而不是1.2em, 由於此em非彼em,它因繼承#content的字體高而變爲了1em=12px。
IE中的12px漢字:

完成 em轉換時還發現了一個詭異的現象,就是由以上方法獲得的12px(1.2em)大小的漢字在IE中並不等於直接用12px定義的字體大小,而 是稍大一點。你只需在body選擇器中把62.5%換成63%就能正常顯示了。緣由多是IE處理漢字時,對於浮點的取值精確度有 限。本現象只發生在12px的漢字,英文不存在此現象。解決方法就是把style.css中的62.5%換 爲63%。

一個px、em、pt單位轉換工具:

地址:pxtoem.com/

二、rem特色

rem是CSS3新增的一個相對單位(root em,根em),這個單位引發了普遍關注。這個單位與em有什麼區別呢?區別在於使用rem爲元素設定字體大小時,仍然是相對大小,但相對的只是HTML根元素。這個單位可謂集相對大小和絕對大小的優勢於一身,經過它既能夠作到只修改根元素就成比例地調整全部字體大小,又能夠避免字體大小逐層複合的連鎖反應。目前,除了IE8及更早版本外,全部瀏覽器均已支持rem。對於不支持它的瀏覽器,應對方法也很簡單,就是多寫一個絕對單位的聲明。這些瀏覽器會忽略用rem設定的字體大小。 舉例:

p {font-size:14px; font-size:.875rem;}
複製代碼

注意: 選擇使用什麼字體單位主要由你的項目來決定,若是你的用戶羣都使用最新版的瀏覽器,那推薦使用rem,若是要考慮兼容性,那就使用px,或者二者同時使用。

三、字體換算表

字號 pt px em
初號 42pt 56px 3.5em
小初 36pt 48px 3em
34pt 45px 2.75em
32pt 42px 2.55em
30pt 40px 2.45em
29pt 38px 2.35em
28pt 37px 2.3em
27pt 36px 2.25em
一號 26pt 35px 2.2em
25pt 34px 2.125em
小一 24pt 32px 2em
二號 22pt 29px 1.8em
20pt 26px 1.6em
小二 18pt 24px 1.5em
17pt 23px 1.45em
三號 16pt 22px 1.4em
小三 15pt 21px 1.3em
14.5pt 20px 1.25em
四號 14pt 19px 1.2em
13.5pt 18px 1.125em
13pt 17px 1.05em
小四 12pt 16px 1em
11pt 15px 0.95em
五號 10.5pt 14px 0.875em
10pt 13px 0.8em
小五 9pt 12px 0.75em
8pt 11px 0.7em
六號 7.5pt 10px 0.625em
7pt 9px 0.55em
小六 6.5pt 8px 0.5em
七號 5.5pt 7px 0.4375em
八號 5pt 6px 0.375em
相關文章
相關標籤/搜索