在前端開發中,彷佛控制不一樣大小文字之間,或者文字與圖標之間對齊老是不那麼駕輕就熟,總以爲少了點什麼,這其中其實跟CSS中幾種跟內聯元素相關的屬性有很大的關係,從個人感受看,平時遇到的30%的css問題都是因爲搞不清這幾種屬性的關係有關。這裏第一篇文章先介紹字體,掌握相關概念。css
技術是以目的爲導向的,那麼先來拋出一個問題,前端開發中咱們使用font-size
來設置文字的大小,但檢查元素後發現內聯元素的高好像大多數時間並非咱們設置的font-size
大小,這是爲何哪?html
這裏面涉及到瀏覽器的影響,字體的設計等方面的知識。尤爲是字體設計是一門高深的學問,而咱們只是爲了開發網頁中控制文字大小和對齊,因此這裏咱們只取咱們須要的部分,下面先介紹字體概念。前端
咱們先來了解文字的各個概念。圖看起來更直觀,因此我簡單畫了個圖。git
對照着圖,能夠看出基線是位於字母x
下方的那條線,全部字符都基於這條線進行定位。這應該你們比較常見,畢竟vertical-align
的默認值就是baseline
,指的就是這條線。github
em-box
可能比較少見,但你們必定知道單位em
。1em
跟該元素的font-size
大小相同。仍是以圖爲例若是設置font-size: 20px
,那麼em-box
的高度就爲20px
。瀏覽器
這是一個很重要的概念,content-area
翻譯成中文是內容區域,這裏圖中沒有標出,由於一般默認狀況下,content-area
與line-height
是同樣高的。給一個內聯元素設置背景,這背景所佔的區域就能夠當作內容區域。post
大多數狀況下content-area
於em-box
的高度不一樣,conent-area
的高度受到font-family
和font-size
的影響,有時候即便font-size
一致可能覺得字體不一樣致使content-area
也不同,這是在字體設計的時候就決定了的。而em-box
只受font-size
影響。這也就解釋了爲何咱們有時候檢查元素看到的高度與實際字體設置大小不同的問題。測試
先看行距怎麼算,行距 = line-height - font-size
。半行距就是將行距一分爲二,一份加在em-box
的上面,一份加在下面,就構成了完整的文字高度。字體
x-height
顧名思義就是x
字符高度的意思,1ex
就是x-height
的值,一般沒什麼做用,可是對於咱們理解概念有很大幫助,css中vertical-align: middle
的解釋就是Aligns the middle of the element with the baseline plus half the x-height of the parent,意思就是將該元素的中心點與父元素基線加上x-height
高度的一半對齊。ui
這句話裏有幾個關鍵的部分必定要弄明白該元素的中心點
、父元素的基線
和基線加上x-height高度的一半
,咱們經常使用veritcal-align: middle
出錯,每每就是這幾個點沒有搞清楚,這裏先試着理解,之後的文章會詳細說明。
如下部分是介紹字體單位和一些理解,若是已經瞭解能夠直接跳過,別浪費時間,時間寶貴~
字體的大小在css中用font-size
來表示,它的度量單位有不少,主要分爲三大類:關鍵詞類型、數值類型、百分比類型。
關鍵詞類型分爲絕對尺寸和相對尺寸。因爲使用的較少,沒必要記憶,因此這裏僅僅羅列出來。
絕對尺寸:xx-small
、x-small
、small
、medium
、large
、x-large
、xx-large
。
相對類型:smaller
、larger
。
數值類型在平時使用較多,而數值類型的單位經常使用的有px
、em
和rem
,可能偶爾會用到ex
其餘基本用不到,再也不列舉。px
表示像素,em
是相對於父元素的字體進行計算,而rem
則是相對於根元素<html>
的字體大小進行計算。
font-size: 0
這種寫法很經常使用,在之前的Chrome中會限制font-size
小於12px
而且大於0的時候按照12px
計算,但我最近在最新版的Version 65.0.3325.181 (Official Build) (64-bit)
Chorme下測試,發現已經沒有這個限制了(不知道何時修改掉的-_-)。使用font-size: 0
讓字體大小變爲0,一般也會使得line-hight
變爲0,這常常能夠解決line-block
元素出現的空隙問題,這個問題具體的緣由咱們後面再說。
看了不少文章最後總結和整理了這些,下一篇介紹line-height
說說line-height
在內聯元素中的做用。在這篇文章中若有錯誤或我與你們理解不一致的地方,歡迎指出,感謝~原文連接。