CSS的字體單位

首先叁怪,本文所討論的“坑”是在做回應(yīng)式網(wǎng)頁設(shè)計(jì)( Responsive Web Design 以下簡稱 RWD)時顯現(xiàn)的菱肖,如果你還只是在做傳統(tǒng)的Web設(shè)計(jì)這算不上是一個坑,因?yàn)閭鹘y(tǒng)的Web頁面是死的,不會自動調(diào)節(jié)不能適應(yīng)各類設(shè)備屏幕尺寸自然不會產(chǎn)生任何尺寸變化的問題。相反地篡诽,要為不同設(shè)備上的用戶提供最好的閱讀或使用體驗(yàn)我們不可避免的就是對元素或字體的尺寸的測量與控制。由其是字體的尺寸榴捡,不知道你是否有以下的經(jīng)歷

同樣的一個網(wǎng)頁杈女,同一份樣式表,但:

  • 字體在mac 上很漂亮薄疚,但在windows很難看 ?
  • 文字在PC上位置正確赊琳,但在iPad上卻錯了位 街夭?
  • 文字塊在Chrome上長度適合,但換了FireFox卻變長了躏筏,甚至換了行 板丽?

如果不幸地被言中,那么真得好好檢查一下樣式表的字體尺寸單位與行高所使用的單位是否正確了趁尼。在CSS3中我們可以應(yīng)用很多的字體單位埃碱,如: pt, px, em, rem 和百分比(這里只討論字體單位,對于vw / vh這類元素長度單位不在此討論范疇)酥泞,這些單位的具體含義是什么砚殿,在什么場合使用,選擇哪個單位在RWD中最為適合呢 芝囤?那么就先來一個一個地去了解它們的意義與用法再對具體應(yīng)用作出選擇似炎。

點(diǎn)陣單位(pt)

PT是point(磅)縮寫,是一種固定長度的度量單位,大小為1/72英寸悯姊。如果在web上使用pt做單位的文字羡藐,字體的大小在不同屏幕(同樣分辨率)下一樣,這樣可能會對排版有影響悯许,但在Word中使用pt相當(dāng)方便仆嗦。因?yàn)槭褂肳ord主要目的都不是為了屏幕瀏覽,而是輸出打印先壕。當(dāng)打印到實(shí)體時瘩扼,pt作為一個自然長度單位就方便實(shí)用了:比如Word中普通的文檔都用“宋體 9pt”,標(biāo)題用“黑體 16pt”等等垃僚,無論電腦怎么設(shè)置邢隧,打印出來永遠(yuǎn)就是這么大。

可見如果將pt作為Web上的首選字體單位那就是一個大坑冈在!pt只適用于打印與普通文檔文字排版并不適用于Web.

像素單位 (px)

根據(jù)顯示器的分辨率來確定長度倒慧,在老式web應(yīng)用中多采用該單位;像素是相對于顯示器屏幕分辨率而言的。譬如纫谅,WONDOWS的用戶所使用的分辨率一般是96像素/英寸炫贤。而MAC的用戶所使用的分辨率一般是72像素/英寸。

兩種關(guān)系:一英寸=72pt(點(diǎn))=96px(像素)付秕,網(wǎng)頁中最常用到的:9pt=12px

px本身是一個極大的坑兰珍,也是最多人愿意跳進(jìn)去的。相對于同一分辨率的屏幕它是一個具體準(zhǔn)確的測量單位询吴,我們用做矢量圖也最喜歡使用這個單位(px值是絕對值)掠河, 所有的瀏覽器也是默認(rèn)使用px來作為尺寸的測量單位,因此在網(wǎng)頁設(shè)計(jì)時都會將px作為標(biāo)準(zhǔn)的尺寸單位使用猛计。當(dāng)沒有互動移連網(wǎng)時代唠摹,沒有RWD之前這是一個正確的選擇,但時代變了px并不能適用于可變字體尺寸的場景奉瘤,使用它會產(chǎn)生排版的變形勾拉。

像素單位會因屏幕分辨率變化而變型,不適于用作在各種設(shè)備上顯示的網(wǎng)頁的首選尺寸單位盗温。

相對長度單位 (em)

em 是一個相對于父節(jié)點(diǎn)尺寸的相對長度單位藕赞,可以理解為字體尺寸的百分比單位,但與百分比不同的是 em是有默認(rèn)常量值的卖局,當(dāng)不明確指定父節(jié)點(diǎn)字體尺寸時斧蜕,任意瀏覽器的默認(rèn)字體高(line-height)都是16px。所以未經(jīng)調(diào)整的瀏覽器都符合: 1em=16px 砚偶, 那么12px=0.75em, 10px=0.625em惩激。這是一個極為常用的換算公式。 em 是最適用于RWD的一種標(biāo)準(zhǔn)字體尺寸蟹演,支持字體放縮风钻,可根據(jù)屏幕分辨率以及不同瀏覽器間的顯示差異作出微調(diào),確保字體在不同的設(shè)備上酒请,保持視覺與設(shè)計(jì)的一至性骡技。值得注意的是,既然是相對單位就必定有參照物(元素)羞反,如果參照物不存在側(cè)采用16px作為真實(shí)尺寸布朦。以此理論我們就可以為我們的站點(diǎn)的樣式表的最開始部分加上以下的代碼:

html { font-size: 100%; // 通常默認(rèn)值為 16px }
body { font-size: 0.75em; // 12px }
h1 { font-size: 2em; // 24px }

如果我們想將1em=16px這個默認(rèn)規(guī)則改變的話,如將1em=12px可以寫成這樣:

html { font-size: 75%; // 12px }
body { font-size: 1em; // 12px }
h1 { font-size: 2em; // 24px }

如果我們希望在桌面顯示的字體更為精細(xì)昼窗,而在移動設(shè)備上顯示的字體可更為清晰的話也可以這樣來寫:

html { font-size: 75%; // 12px }
@media only screen and (max-device-width: 480px) {
    html { font-size: 100%; // 16px }
}

以上是舉出最簡單的例子以幫助我們理解em的用法是趴,而在實(shí)際應(yīng)用中則需要解決另一方面的問題:默認(rèn)元素樣式。各種瀏覽器對不同的標(biāo)準(zhǔn)元素有不同的默認(rèn)樣式澄惊,由其是字體唆途。如果要保持字體的一至性就需要在樣式表中明確地重寫這些樣式以保證瀏覽器間的兼容性富雅。如:li 的字體會按照ul的字體尺寸計(jì)算相對的大小:

html { font-size: 75%; // 12px }
body { font-size: 1em; // 12px }
li { font-size: 0.833em; // 10px }

當(dāng)然<button/>, <h1>~<h6>, <summary/>, <detail> 等還有很多的元素都需要進(jìn)行這個標(biāo)準(zhǔn)化的過程肛搬,如果覺得這個工作很麻煩也可以去下載著名的 normalize.css 樣式表完成這個重置工作没佑,雖然看起來很麻煩,但是這卻可以避免在整個項(xiàng)目設(shè)計(jì)的過程中掉入這些由于尺寸所帶來的不必要而耗時的調(diào)整温赔。

相對根節(jié)點(diǎn)長度單位 (rem)

CSS3引入新的字體尺寸單位 rem 蛤奢,可以簡單記憶為root rm。

CSS3的出現(xiàn)陶贼,他同時引進(jìn)了一些新的單位啤贩,包括我們今天所說的rem。在W3C官網(wǎng)上是這樣描述rem的——“font size of the root element” 拜秧。下面我們就一起來詳細(xì)的了解rem痹屹。

em單位是相對于父節(jié)點(diǎn)的font-size,會有一些組合的問題腹纳,而rem是相對于根節(jié)點(diǎn)(或者是html節(jié)點(diǎn))痢掠,意思就是說你可以在html節(jié)點(diǎn)定義一個單獨(dú)的字體大小驱犹,然后所有其他元素使用rem相對于這個字體的百分比進(jìn)行設(shè)置

我們來看一個簡單的代碼實(shí)例:

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*/}

我在根元素中定義了一個基本字體大小為62.5%(也就是10px嘲恍。設(shè)置這個值主要方便計(jì)算,如果沒有設(shè)置雄驹,將是以“16px”為基準(zhǔn) )佃牛。從上面的計(jì)算結(jié)果,我們使用“rem”就像使用“px”一樣的方便医舆,而且同時解決了“px”和“em”兩者不同之處俘侠。

如果你習(xí)慣了使用px作為測量單位而又希望可以使用到rem 這種相對單位的話 , 那么我們可以做一個簡單的mixin:

@base-font: 12px;
@mixin font-size(@font-size){
    font-size: @font-size;
    font-size: (@font-size/@base-font-size)*1rem;
}
li { font-size(10px); }

關(guān)于兼容性的考慮

rem 是CSS3新引進(jìn)來的一個度量單位,大家心里肯定會擔(dān)心瀏覽器的支持情況蔬将。其實(shí)支持的瀏覽器還是蠻多的爷速,比如:Mozilla Firefox 3.6+、Apple Safari 5+霞怀、Google Chrome惫东、IE9+和Opera11+。只是可憐的IE6-8不支持毙石。不過使用單位設(shè)置字體廉沮,可不能完全不考慮IE了,如果你想使用這個REM徐矩,但也想兼容IE下的效果滞时,可你可考慮“px”和“rem”一起使用,用”px”來實(shí)現(xiàn)IE6-8下的效果滤灯,然后使用“Rem”來實(shí)現(xiàn)代瀏覽器的效果坪稽。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末曼玩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子刽漂,更是在濱河造成了極大的恐慌演训,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贝咙,死亡現(xiàn)場離奇詭異样悟,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)庭猩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門窟她,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蔼水,你說我怎么就攤上這事震糖。” “怎么了趴腋?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵吊说,是天一觀的道長。 經(jīng)常有香客問我优炬,道長颁井,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任蠢护,我火速辦了婚禮雅宾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘葵硕。我一直安慰自己眉抬,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布懈凹。 她就那樣靜靜地躺著蜀变,像睡著了一般。 火紅的嫁衣襯著肌膚如雪介评。 梳的紋絲不亂的頭發(fā)上库北,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機(jī)與錄音威沫,去河邊找鬼贤惯。 笑死,一個胖子當(dāng)著我的面吹牛棒掠,可吹牛的內(nèi)容都是我干的孵构。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼烟很,長吁一口氣:“原來是場噩夢啊……” “哼颈墅!你這毒婦竟也來了蜡镶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤恤筛,失蹤者是張志新(化名)和其女友劉穎官还,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體毒坛,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡望伦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了煎殷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屯伞。...
    茶點(diǎn)故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖豪直,靈堂內(nèi)的尸體忽然破棺而出劣摇,到底是詐尸還是另有隱情,我是刑警寧澤弓乙,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布末融,位于F島的核電站,受9級特大地震影響暇韧,放射性物質(zhì)發(fā)生泄漏勾习。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一锨咙、第九天 我趴在偏房一處隱蔽的房頂上張望语卤。 院中可真熱鬧追逮,春花似錦酪刀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至巴席,卻和暖如春历涝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背漾唉。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工荧库, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赵刑。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓分衫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親般此。 傳聞我的和親對象是個殘疾皇子蚪战,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容