對於行高(line-height)的一些理解


剛一開始學習這個特性的時候,總是出一些當時看起來很奇怪的問題。現在決定重新整理一下。畢竟使用css,十行揉在一起湊出效果是一種使用,知道為什么會有這種效果也是一種使用。我們需要做一些測試,所以首先需要了解一下到底哪些DOM元素適合。

那我們第一個問題就來了。

line-height可以應用於哪些元素

* line-height只影響行內元素,並不能直接應用於塊級元素。 * line-height 具有可繼承性,塊級元素的子元素會繼承該特性,並且在行內元素上生效。 

所以,我們在這里可以只考慮行內元素,包括行內替換元素和行內非替換元素,img和span可以分別作為它們典型的代表。

什么是line-height

對於這個問題一直感覺很困惑。定義上說,line-height就是兩個文本行基線之間的距離,難道就是像下圖這樣子:enter image description here

但是問題來了,如果我分別給兩個元素設置了line-height, 那么哪個line-height是這兩個文本行之間的距離? 我寫了如下的測試代碼:

<div style="width:170px;">
     <span style="font-size:16px;line-height:20px;background:red;">I'm the first line</span>
     <span style="font-size:16px; line-height:40px;background:green;">I'm the second line</span>
</div>

得到結果如圖:enter image description here

我們可以知道上面一行的行框高度是20px,下面一行是40px。我們就可以算出兩行文本基線之間的間距,應該是(20 - 16) / 2 + (40 - 16) / 2 + 16 = 30。 這個數據看起來和兩個元素的line-height並沒有什么關系。 這便是我當時理解這個概念時走入的誤區,實際上,line-height指的是在同一個元素中,兩個文本行基線間的距離。如下圖所示:enter image description here

只怪我反應太慢。所以,當我明白這個事情以后,就不對它到底是什么耿耿於懷了。開始關注於它的作用,它是怎樣影響行內框的高度,進而影響整行的行框的高度的。

與height的關系

類似於span的行內非替換元素,我們知道它們的高度並不能通過height直接設置,但是可以由line-height來改變。

類似於input,img的行內非替換元素,在line-height的設置上和塊級元素類似,line-height在自身上並沒有起作用,但是可以應用到子元素上。它們的行內框的高度就是它們內容區的高度,是可以通過height來設置的。

總之呢,這兩個css屬性並沒有什么關系。

line-height與height相等,為什么會使文字居中

這大概是大家會經常遇到的一個問題,大概也是單行文字居中的慣用手段。我思考了一下原因,並且做了一些測試:

<span style="height: 40px;line-height:40px;background:red;display: inline-block;">I'm the first line</span>

顯示如下:enter image description here

我去掉line-height屬性,顯示如下:enter image description here

原因是這樣的。文本是屬於textNode,它也是一個DOM元素。當外層元素設了line-height之后,它自然繼承過來,就像我們上文中說過的一樣,顯示在中央,是因為文字自然的落在了textNode的基線上面。

理解了上面所說的這些,我們就能理解為什么有時候設line-height和height相等不起作用了。如下圖代碼:

 <span style="height: 40px;line-height:40px;background:red;display: inline-block;padding: 3px;box-sizing:border-box;">I'm the first line</span>

結果如下圖所示:enter image description here

我加了padding和border-box,也就是說外層的span的內容區域縮小了,但是里面的textNode並沒有什么變化。

好了,感覺總算是弄明白了一個事情。看上去它也不是如狼似虎。

地址:http://www.html-js.com/article/3465

轉自:nanshan231--前端亂燉


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM