line-height與vertical-align:簡單的屬性不簡單

學(xué)習(xí)過CSS肯定對line-height與vertical-align兩個屬性有印象;line-height用來設(shè)置行高,vertical-align用來設(shè)置文本垂直方向的對齊方式,兩種看似十分簡單,但是其應(yīng)用及原理卻不簡單

line-height

line-height與內(nèi)容

先思考個問題:默認(rèn)的div元素高度為0,為什么添加了文字之后,高度就有了?這個高度是由哪個屬性決定的?如果是span元素,高度又是又誰決定的呢?

image

如上圖所示,結(jié)果應(yīng)該很明確了:影響div元素高度的是line-height屬性,影響span元素高度的是font-size屬性,更準(zhǔn)確的說法應(yīng)該是line-height決定塊狀元素的內(nèi)容區(qū)域高度,而font-size影響行內(nèi)元素的文本區(qū)域高度,這里請記住內(nèi)容區(qū)域與文本區(qū)域不是同一個概念

line-height與x

我們這里的x就是26個英文字母中的x。由于自身形態(tài)的一些特殊性,這個小小的不起眼的字母在CSS中是一個很重要的概念。
如基線base-line的定義就是:

字母x 的下邊緣(線)就是我們的基線。

vertical-align中的middle指的就是:

關(guān)于基線向上1/2的x高度對齊

而x的高度甚至作為一個尺寸單位,這個單位就是ex,就是指小寫字母x的高度。

veritcal-align

veritcal-align屬性值

張鑫旭在《CSS世界》中一書中,將veritcal-align屬性值分為4類:

  • 線類,如baseline(默認(rèn)值)、top、middle、bottom;
  • 文本類,如text-top、text-bottom;
  • 上標(biāo)下標(biāo)類,如sub、super;
  • 數(shù)值百分比類,如20px、2em、20%等。

這種劃分方法是根據(jù)屬性值的類型來劃分的,實(shí)際使用中感覺這樣的劃分方法不夠合理,如線類中的baseline、middle是受到元素font-size影響,而top、bottom卻是受到元素line-height影響;也就是說baseline、middle是子元素文本區(qū)域與父元素文本區(qū)域?qū)R,top、bottom是子元素內(nèi)容區(qū)域與父元素內(nèi)容區(qū)域?qū)R,不同的veritcal-align屬性值,影響其對齊效果的屬性都是不同的。

middle屬性值不受line-height影響
top屬性值會被line-height影響

上圖顯示的是改變子元素line-height(內(nèi)容區(qū)域)對對齊的影響,此外根據(jù)veritcal-align屬性值不同,子元素的內(nèi)容區(qū)域、文本區(qū)域,父元素的內(nèi)容區(qū)域、文本區(qū)域都會對對齊造成影響,設(shè)置百分比或相對尺寸更是會與font-size與line-height兩個屬性產(chǎn)生直接聯(lián)系,可見簡單的vertical-align想要合理使用并不是那么簡單的。

內(nèi)容區(qū)域與文本區(qū)域

理解和正確使用line-height與vertical-align,首先要明確內(nèi)容區(qū)域與文本區(qū)域的概念:

image

在一般情況下,可以認(rèn)為font-size影響span,span內(nèi)容大小即為文本區(qū)域,line-height影響div,div的內(nèi)容大小即為內(nèi)容區(qū)域。這里要注意影響并不是簡單的font-size或line-height數(shù)值就決定區(qū)域的高度。

image

如上圖div元素的實(shí)際高度是43而不是40,這是因?yàn)閐iv中的文本存在一個為ling-height值40px的內(nèi)容區(qū)域,而span也存在一個ling-height值40px的內(nèi)容區(qū)域,這兩個內(nèi)容區(qū)域高度相等,但是vertical-align默認(rèn)值為baseline,所以兩者之間是關(guān)于文本區(qū)域?qū)R的,文本區(qū)域兩者大小是不同的,即baselin所在位置不同,連接兩個高度相同矩形,接口不在同一個位置,自然兩者就無法對齊,父元素要包含這兩個元素,高度也就不可能只有40px。div包含圖片,底部出現(xiàn)空白也是因?yàn)檫@個原因了,圖片的底部就是baseline,div中存在幽靈節(jié)點(diǎn),兩者基于baseline對齊造成了底部空白。

CSS中許多奇怪的現(xiàn)象都可以從概念的角度合理的去解釋,在初步學(xué)習(xí)CSS的使用之后,進(jìn)一步理解學(xué)習(xí)CSS的概念是非常有必要的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,168評論 1 92
  • 參考文章:深入了解CSS的line-height屬性Vertical-Align: 你需要知道的所有事【譯】Ver...
    若邪Y閱讀 3,568評論 1 6
  • 1. 前言 前端圈有個“?!保涸诿嬖嚂r,問個css的position屬性能刷掉一半人,其中不乏工作四五年的同學(xué)。在...
    YjWorld閱讀 4,924評論 5 15
  • ?我和我表妹如是兩人,在上海待了四天。從一開始的斗志昂揚(yáng),到后來的疲累,上海用炙烤般的溫度迎接我們。除了第一天下了...
    圓形斑禿閱讀 352評論 0 2

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