文字居中 深入了解lineheight文字垂直居中

2021-10-16 03:58:04 字數 1308 閱讀 1146

先思考下面這個問題:預設空div高度是 0,但是一旦裡面寫上幾個文字,div高度就有了,請問這個高度由何而來,或者說是由哪個 css 屬性決定的?

如果僅僅通過表象來確認,估計不少人會認為div高度是由裡面的文字撐開的,也就是font-size 決定的,但本質上是由 line-height 屬性全權決定的,儘管某些場景確實與font-size 大小有關。

我們不妨設計乙個簡單的例子來看看真相究竟是什麼。例如:12

3456

7//html測試div>測試div>

結果如下圖(windows ie6瀏覽器下):

很顯然,從上面這個例子可以看出,div高度是由行高決定的,而非文字。

坊間流傳著這麼一種說法:「要想讓單行文字垂直居中,只要設定 line-height 大小和height 高度一樣就可以了。」類似下面這樣的**:12

34.title 

從效果上看,似乎驗證了這種說法的正確性。但是,實際上,上面的說法對 css 初學者會產生兩個嚴重的誤導,同時,語句本身也存在不嚴謹的地方!

誤區之一:要讓單行文字垂直居中,只需要 line-height 這乙個屬性就可以,與 height一點兒關係都沒有。也就是說,我們直接:12

34.title 

誤區二:行高控制文字垂直居中,不僅適用於單行,多行也是可以的。準確的說法應該是「line-height 可以讓單行或多行元素近似垂直居中」。稍等,這裡有個詞似乎和上面的表述有點兒微妙的差異,「近似垂直居中」?沒錯,一定要加上「近似」二字,這樣的說法才足夠嚴謹。換句話說,我們通過 line-height 設定的垂直居中,並不是真正意義上的垂直居中!究竟是怎麼一回事?

這裡,其實要解答的是兩個問題,乙個是為何可以「垂直居中」,另乙個是為何是「近似」。正如上一節所說的,沒有什麼理所當然,行高可以實現「垂直居中」原因在於 css 中「行距的上下等分機制」,如果行距的新增規則是在文字的上方或者下方,則行高是無法讓文字垂直居中的。說「近似」是因為文字字形的垂直中線位置普遍要比真正的「行框盒子」的垂直中線位置低,譬如我們拿現在用得比較多的微軟雅黑字型舉例:12

3456

78p 微軟雅黑p>

結果,我都不需要標註,肉眼就能看出字形明顯偏下,如圖

由於我們平時使用的 font-size 都比較小,12px~16px 很多,因此,雖然微軟雅黑字型有下沉,但也就 1 畫素的樣子,所以我們往往覺察不到這種「垂直對齊」其實並不是真正意義上的垂直居中,只是感官上看上去像是垂直居中罷了。這也是我總是稱line-height 實現的單行文字垂直居中為「近似垂直居中」的原因。

深入了解A

一 前言 在這裡我將對a 演算法的實際應用進行一定的 並且舉乙個有關a 演算法在最短路徑搜尋的例子。值得注意的是這裡並不對a 的基本的概念作介紹,如果你還對a 演算法不清楚的話,請看姊妹篇 初識a 演算法 這裡所舉的例子是參考amit主頁中的乙個源程式,使用這個源程式時,應該遵守一定的公約。二 a ...

深入了解A

一 前言 在這裡我將對a 演算法的實際應用進行一定的 並且舉乙個有關a 演算法在最短路徑搜尋的例子。值得注意的是這裡並不對a 的基本的概念作介紹,如果你還對a 演算法不清楚的話,請看姊妹篇 初識a 演算法 這裡所舉的例子是參考amit主頁中的乙個源程式,使用這個源程式時,應該遵守一定的公約。二 a ...

深入了解Dojo Data

譯自http www.sitepen.com blog 2010 10 13 dive into dojo data 使用dojo data有助於快速建立web應用的介面,且易於嵌入各種資料來源。它在使用者介面與底層資料之間提供了一層抽象層,使得使用者介面開發人員能夠專注於ui的開發,而無需擔心資料...