css中的px、em、rem 詳解

概念介紹:

1、px (pixel,像素):

是一個(gè)虛擬長(zhǎng)度單位,是計(jì)算機(jī)系統(tǒng)的數(shù)字化圖像長(zhǎng)度單位,如果px要換算成物理長(zhǎng)度,需要指定精度DPI(Dots Per Inch,每英寸像素?cái)?shù)),在掃描打印時(shí)一般都有DPI可選。Windows系統(tǒng)默認(rèn)是96dpi,Apple系統(tǒng)默認(rèn)是72dpi。

2、em(相對(duì)長(zhǎng)度單位,相對(duì)于當(dāng)前對(duì)象內(nèi)文本的字體尺寸):

是一個(gè)相對(duì)長(zhǎng)度單位,最初是指字母M的寬度,故名em。現(xiàn)指的是字符寬度的倍數(shù),用法類(lèi)似百分比,如:0.8em, 1.2em,2em等。通常1em=16px。

3、pt (point,磅):

是一個(gè)物理長(zhǎng)度單位,指的是72分之一英寸。pt=1/72(英寸), px=1/dpi(英寸)

4、rem(root em,根em):

是CSS3新增的一個(gè)相對(duì)單位,這個(gè)單位引起了廣泛關(guān)注。這個(gè)單位與em有什么區(qū)別呢?區(qū)別在于使用rem為元素設(shè)定字體大小時(shí),仍然是相對(duì)大小,但相對(duì)的只是HTML根元素。這個(gè)單位可謂集相對(duì)大小和絕對(duì)大小的優(yōu)點(diǎn)于一身,通過(guò)它既可以做到只修改根元素就成比例地調(diào)整所有字體大小,又可以避免字體大小逐層復(fù)合的連鎖反應(yīng)。目前,除了IE8及更早版本外,所有瀏覽器均已支持rem。對(duì)于不支持它的瀏覽器,應(yīng)對(duì)方法也很簡(jiǎn)單,就是多寫(xiě)一個(gè)絕對(duì)單位的聲明。這些瀏覽器會(huì)忽略用rem設(shè)定的字體大小。

1、em與px的問(wèn)題

px是何物?

px像素(Pixel)。相對(duì)長(zhǎng)度單位。像素px是相對(duì)于顯示器屏幕分辨率而言的。(引自CSS2.0手冊(cè))
em是相對(duì)長(zhǎng)度單位。相對(duì)于當(dāng)前對(duì)象內(nèi)文本的字體尺寸。如當(dāng)前對(duì)行內(nèi)文本的字體尺寸未被人為設(shè)置,則相對(duì)于瀏覽器的默認(rèn)字體尺寸。(引自CSS2.0手冊(cè))
PX特點(diǎn)

  1. IE無(wú)法調(diào)整那些使用px作為單位的字體大小;
  2. 國(guó)外的大部分網(wǎng)站能夠調(diào)整的原因在于其使用了em或rem作為字體單位;
  3. Firefox能夠調(diào)整px和em,rem,但是96%以上的中國(guó)網(wǎng)民使用IE瀏覽器(或內(nèi)核)。
em是何物?

em 指字體高,任意瀏覽器的默認(rèn)字體高都是16px。所以未經(jīng)調(diào)整的瀏覽器都符合: 1em=16px。那么12px=0.75em, 10px=0.625em。為了簡(jiǎn)化font -size的換算,需要在css中的body選擇器中聲明Font-size=62.5%,這就使em值變?yōu)?6px*62.5%=10px, 這樣12px=1.2em, 10px=1em, 也就是說(shuō)只需要將你的原來(lái)的px數(shù)值除以10,然后換上em作為單位就行了。

em特點(diǎn):

1em指的是一個(gè)字體的大小,它會(huì)繼承父級(jí)元素的字體大小,因此并不是一個(gè)固定的值。任何瀏覽器的默認(rèn)字體大小都是16px。因此,12px = 0.75em。實(shí)際應(yīng)用中為了方便換算,通常會(huì)如下設(shè)置樣式:
CSS代碼

html { font-size: 62.5%; }

這樣,1em = 10px。我們常用的1.2em理論上就是12px。但是,這個(gè)換算在IE瀏覽器下不成立,1.2em會(huì)比12px稍大一些,解決辦法是把html標(biāo)簽樣式中的62.5%改成63%,即:
CSS代碼

html { font-size: 63%; }

在 中文的文章中,一般會(huì)在段首空兩格。如果用px作為單位,對(duì)12px字體來(lái)說(shuō)需要空出24px,對(duì)14px字體來(lái)說(shuō)需要空出28px……這樣換算非常不通 用。如果用上em單位,這個(gè)問(wèn)題就很好解決了,1個(gè)字的大小就是1em,那兩個(gè)字的大小就是2em。因此,只需這樣定義就行了:
CSS代碼

p { text-indent: 2em; }

em和px兩種字體單位的區(qū)別

字體單位應(yīng)該用em而不用px,原因簡(jiǎn)單來(lái)說(shuō)就是支持IE6下的字體縮放,在頁(yè)面中按ctrl+滾輪,字體以px為單位的網(wǎng)站沒(méi)有反應(yīng)。px是絕對(duì)單位,不支持IE的縮放,em是相對(duì)單位。
我在調(diào)整本blog的時(shí)候,發(fā)現(xiàn)不僅僅是字體,將行距(line-height),和縱向高度的單位都用em。保證縮放時(shí)候的整體性。

em有如下特點(diǎn):
  1. em的值并不是固定的;
  2. em會(huì)繼承父級(jí)元素的字體大小。
em重寫(xiě)步驟:
  1. body選擇器中聲明Font-size=62.5%;
  2. 將你的原來(lái)的px數(shù)值除以10,然后換上em作為單位;
    簡(jiǎn) 單吧,如果只需要以上兩步就能解決問(wèn)題的話(huà),可能就沒(méi)人用px了。經(jīng)過(guò)以上兩步,你會(huì)發(fā)現(xiàn)你的網(wǎng)站字體大得出乎想象。因?yàn)閑m的值不固定,又會(huì)繼承父級(jí) 元素的大小,你可能會(huì)在content這個(gè)div里把字體大小設(shè)為1.2em, 也就是12px。然后你又把選擇器p的字體大小也設(shè)為1.2em,但如果p屬于content的子級(jí)的話(huà),p的字體大小就不是12px,而是1.2em= 1.2 * 12px=14.4px。這是因?yàn)閏ontent的字體大小被設(shè)為1.2em,這個(gè)em值繼承其父級(jí)元素body的大小,也就是16px * 62.5% * 1.2=12px, 而p作為其子級(jí),em則繼承content的字體高,也就是12px。所以p的1.2em就不再是12px,而是14.4px。
  3. 重新計(jì)算那些被放大的字體的em數(shù)值。避免字體大小的重復(fù)聲明,也就是避免以上提到的1.2 * 1.2= 1.44的現(xiàn)象。比如說(shuō)你在#content中聲明了字體大小為1.2em,那么在聲明p的字體大小時(shí)就只能是1em,而不是1.2em, 因?yàn)榇薳m非彼em,它因繼承#content的字體高而變?yōu)榱?em=12px。
IE中的12px漢字:

完成 em轉(zhuǎn)換時(shí)還發(fā)現(xiàn)了一個(gè)詭異的現(xiàn)象,就是由以上方法得到的12px(1.2em)大小的漢字在IE中并不等于直接用12px定義的字體大小,而 是稍大一點(diǎn)。你只需在body選擇器中把62.5%換成63%就能正常顯示了。原因可能是IE處理漢字時(shí),對(duì)于浮點(diǎn)的取值精確度有 限。本現(xiàn)象只發(fā)生在12px的漢字,英文不存在此現(xiàn)象。解決方法就是把style.css中的62.5%換 為63%。

一個(gè)px、em、pt單位轉(zhuǎn)換工具:

地址:http://pxtoem.com/

2、rem特點(diǎn)

rem是CSS3新增的一個(gè)相對(duì)單位(root em,根em),這個(gè)單位引起了廣泛關(guān)注。這個(gè)單位與em有什么區(qū)別呢?區(qū)別在于使用rem為元素設(shè)定字體大小時(shí),仍然是相對(duì)大小,但相對(duì)的只是HTML根元素。這個(gè)單位可謂集相對(duì)大小和絕對(duì)大小的優(yōu)點(diǎn)于一身,通過(guò)它既可以做到只修改根元素就成比例地調(diào)整所有字體大小,又可以避免字體大小逐層復(fù)合的連鎖反應(yīng)。目前,除了IE8及更早版本外,所有瀏覽器均已支持rem。對(duì)于不支持它的瀏覽器,應(yīng)對(duì)方法也很簡(jiǎn)單,就是多寫(xiě)一個(gè)絕對(duì)單位的聲明。這些瀏覽器會(huì)忽略用rem設(shè)定的字體大小。
舉例:

p {font-size:14px; font-size:.875rem;}

注意:
選擇使用什么字體單位主要由你的項(xiàng)目來(lái)決定,如果你的用戶(hù)群都使用最新版的瀏覽器,那推薦使用rem,如果要考慮兼容性,那就使用px,或者兩者同時(shí)使用。

3、字體換算表

字號(hào) pt px em
初號(hào) 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
一號(hào) 26pt 35px 2.2em
25pt 34px 2.125em
小一 24pt 32px 2em
二號(hào) 22pt 29px 1.8em
20pt 26px 1.6em
小二 18pt 24px 1.5em
17pt 23px 1.45em
三號(hào) 16pt 22px 1.4em
小三 15pt 21px 1.3em
14.5pt 20px 1.25em
四號(hào) 14pt 19px 1.2em
13.5pt 18px 1.125em
13pt 17px 1.05em
小四 12pt 16px 1em
11pt 15px 0.95em
五號(hào) 10.5pt 14px 0.875em
10pt 13px 0.8em
小五 9pt 12px 0.75em
8pt 11px 0.7em
六號(hào) 7.5pt 10px 0.625em
7pt 9px 0.55em
小六 6.5pt 8px 0.5em
七號(hào) 5.5pt 7px 0.4375em
八號(hào) 5pt 6px 0.375em
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容