国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > CSS > 正文

深入理解CSS中的line-height的使用

2024-07-11 08:42:20
字體:
來源:轉載
供稿:網友

什么是line-height(行高)?

line-height 是指兩行文字基線之間的距離。

什么是基線?

基線、底線、頂線、中線

 

注意:

  • 基線(base line)并不是漢字文字的下端沿,而是英文字母“x”的下端沿。
  • 不同字體的基線不盡相同。

行距、行高

 

line-height 與行內框盒子模型

所有內聯元素的樣式表現都與行內框盒子模型有關。例如浮動的圖文環繞效果... and so on

什么是行內框盒子模型

我們通過下面這段代碼進行講解

<p>這是一行普通的文字,這里有個<em>em</em>標簽</p>

在這段代碼中包含了 4 中盒子:

content area 內容區是指底線和頂線包裹的區域(行內元素 display:inline 可以通過 background-color 屬性顯示出來),實際中不一定看得到,但確實存在。內容區的大小依據 font-size 的值和字數進行變化。

inline boxes 。內聯盒子不會讓內容成塊排列,而是排成一行。如果外部 inline 水平的標簽( spanaem 等)則屬于 內聯盒子 ,如果是光禿禿的文字則屬于 匿名內聯盒子

line boxes 。每一行就是一個 行框盒子 。每個行框盒子又是由一個個 內聯盒子 組成。

containing box 包含盒子。 包含盒子 是由一行一行的 行框盒子 組成。 <p> 標簽就代表了一個 包含盒子 。(即上圖中的綠色部分)

line-height 的高度機理

深入理解內聯元素的高度表現

在講解原理之前,我們先看以下代碼:

<p>這是一行普通的文字,這里有個<em>em</em>標簽</p>
console.log(document.querySelector('p').clientHeight); // 輸出36px

現在我們思考這樣幾個問題:

  • 元素的高度從何而來?
  • 是由里面的文字撐開的?

the answer is :元素的高度是由 line-height 決定的:

line-height 明明是兩基線之間的距離,單行文字哪來行高,還控制了高度?

  • 行高由于其繼承性,影響無處不在,即使單行文本也不例外。
  • 高度的表現不是行高,而是內容區域和行間距。
  • 內容區域高度+行間距=行高
  • 內容區域高度只與字號以及字體有關,與 line-height 沒有任何關系。(在 simsun 字體下,內容區域高度等于 font-size )。換句話說,在 simsun 字體下: font-size+行間距=line-height
  • 行間距是上下均分的。

總結

  • 行高決定內聯盒子高度;行間距是墻頭草,可大可小(甚至負值),保證高度正好等于行高。
  • 多行文本的高度等于單行文本的高度累加。

 line-height 的各類屬性值

normal

line-height:normal; 默認屬性值,與瀏覽器相關,且與元素字體相關聯。

 <number>

line-height:1.5; 使用數值作為行高,根據當前元素的 font-size 大小計算。

 <length>

line-height:1.5em;line-height:1.5rem;line-height:20px; 使用具體單位作為行高值。

 <percent>

line-height:150% 使用百分比作為行高值。相對于設置了該 line-height 屬性的元素的 font-size 大小計算。

 inherit

input{line-height:inherit;} ,行高繼承。使用 inherit 可以讓文本框樣式可控性更強。 行高默認具有繼承性,為什么還是這樣做??? 控件元素 的默認行高是 normal ,而不是繼承父級元素的行高。

line-height:1.5line-height:1.5em;line-height:150% 的區別

在計算結果上是相同的,但是所影響的元素有區別。

  • line-height:1.5 所有可繼承元素會根據 font-size 重新計算行高。(也就是說其子元素都會根據自身的 font-size * 1.5 計算行高,每個子元素都要進行一次計算。)
  • line-height:150%/1.5em ,當前元素根據 font-size 計算行高,繼承給下面的元素。(當前元素根據 font-size 計算行高,然后將所計算的出來的值繼承給后代,也就是說只需要當前元素進行計算,而子元素不需要重新計算。)

body 全局數值使用經驗

如果是 blog ,已閱讀為主的網頁, line-height:1.5/1.6 較為適宜。

如果是面向用戶,并不是閱讀為主的網頁,則推薦使用匹配 20 像素的使用經驗。 body{font-size:14px;line-height:1.4286} 或者合并形式 body{font:14px/1.4286 'microsoft yahei'}

line-height 與圖片高度表現。

line-height 不會影響圖片的高度。

隱匿文本節點: <p> 標簽是一個文本節點,其默認會有文本。即使 <p></p> ,也就是當內容為空時,也存在文本節點,只不過看不到而已。這樣的節點稱其為隱匿文本節點,也正因為隱匿文本節點的存在,才會造成下面圖中的情形。

 

 

如何消除圖片與底部之間的間隙?

在項目開發中,我們偶爾會遇到以下情形:

 

解決的辦法主要有以下三種:

1.圖片塊狀化。( vertical-align )只適用于 inline``inline-block 元素,也就是說對于 block 元素并沒有基線對齊的說辭。 img{display:block;}

2.圖片底線對齊 img{vertical-align:bottom;}

3.行高足夠小,使基線上移。 .box{line-height:0}

line-height的實際應用

1.實現大小不固定的圖片,多行文字的垂直居中

2.實現多行文本水平垂直居中

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 柳江县| 建德市| 育儿| 宁强县| 石阡县| 松原市| 景宁| 邛崃市| 沈阳市| 定州市| 尤溪县| 南城县| 柏乡县| 吴堡县| 偏关县| 上高县| 正镶白旗| 开平市| 宽城| 五指山市| 伊宁市| 康马县| 禄劝| 中方县| 宁德市| 丰台区| 江阴市| 湟源县| 舞钢市| 黔西| 社旗县| 绥江县| 柏乡县| 故城县| 乌海市| 景东| 涟源市| 彭山县| 昆明市| 长沙市| 望江县|