「line-height」深入理解

是不是感覺line-height會(huì)用摇予,但是用起來總是怪怪的十酣?那是因?yàn)槟銓?duì)它理解的還不夠!

* 什么是 line-height

??line-height【行高】顧名思意指一行文字的高度征字,用來指定行間的距離统翩,具體來說是指兩行文字間基線之間的最小距離。關(guān)于基線【base-line】耀找,如下圖:

* 支持性

所有瀏覽器都支持line-height翔悠,但ie不支持 line-height 的 inherit 值
?

* 注意點(diǎn)

line-height 不允許設(shè)置負(fù)值
?

* 說明

??line-heightfont-size 的計(jì)算值之差(在 CSS 中就是兩行的“行間距”)分為兩半,分別加到一個(gè)文本行內(nèi)容的頂部和底部野芒⌒畛睿可以包含這些內(nèi)容的最小框就是行框。
??原始數(shù)字值指定了一個(gè)縮放因子狞悲,后代元素會(huì)繼承這個(gè)縮放因子而不是計(jì)算值撮抓。即,當(dāng)子元素節(jié)點(diǎn)設(shè)置line-heihgt:inherit的時(shí)候摇锋,繼承的是父元素節(jié)點(diǎn)的縮放因子丹拯。
?

* javascript語法

object.style.lineHeight = "2"

?

* 取值

描述
normal 默認(rèn),設(shè)置合理的行間距
number 此數(shù)字會(huì)與當(dāng)前字體的尺寸相乘來設(shè)置行間距
length 設(shè)置固定的行間距
% 基于當(dāng)前尺寸的百分比行間距
inherit 從父元素繼承 line-height 屬性的值

?

* 深入理解 line-height

?css中起高度作用的應(yīng)該就是height以及line-height了吧荸恕!如果一個(gè)標(biāo)簽沒有定義height屬性(包括百分比高度)乖酬,那么其最終表現(xiàn)的高度一定是由line-height起作用,即使是 IE6 下 11像素左右默認(rèn)高度bug也是如此融求。待我慢慢敘來咬像。

?先說一個(gè)大家都熟知的現(xiàn)象,有一個(gè)空的div生宛,<div></div>县昂,如果沒有設(shè)置至少大于1像素高度height值時(shí),該div的高度就是個(gè)0陷舅。如果該div里面打入了一個(gè)空格或是文字倒彰,則此div就會(huì)有一個(gè)高度。那么您思考過沒有蔑赘,為什么div里面有文字后就會(huì)有高度呢狸驳?

?這是個(gè)看上去很簡(jiǎn)單的問題预明,是理解line-height非常重要的一個(gè)問題∽罚可能有人會(huì)跟認(rèn)為是:文字撐開的酥馍!文字占據(jù)空間,自然將div撐開阅酪。我一開始也是這樣理解的旨袒,但是事實(shí)上汁针,深入理解**inline模型**后,我發(fā)現(xiàn)砚尽,根本不是文字撐開了div的高度施无,而是line-height!

?那么必孤,line-height 是如何產(chǎn)生高度的呢猾骡?

?在inline box模型中,有個(gè)line boxes敷搪,這玩意是看不見的兴想,這個(gè)玩意的工作就是包裹每行文字;一行文字一個(gè)line boxes赡勘,無論是不同的<div>嫂便,<p>還是 <span>;還是單行內(nèi)容過多自動(dòng)換行闸与,每一行毙替,都有一個(gè) line-boxes 包裹;line-boxes只有一個(gè)特性几迄,就是高度蔚龙。
? 所以現(xiàn)在明白為什么沒有設(shè)置height屬性的div也有高度了吧?沒錯(cuò)映胁,就是由一個(gè)個(gè)line-boxes堆積起來的木羹。我們看下例子幫助理解:

html代碼

<div class="box">
  Hello world!
</div>
<br/>
<div class="box">
</div>

css代碼

* { marign:0; padding: 0; background-color: #4e4e4e; }
.box {
  background-color: pink;
  border: solid 1px white;
}

結(jié)果展示

?可以看到,同樣沒有設(shè)置height解孙,第一個(gè) div 的高度被文字撐開了坑填,第二個(gè)div高度為0。這就因?yàn)槲陌?“Hello World!”由一個(gè) line-boxes 包裹弛姜,line-boxes的默認(rèn)高度為字體高度的110%脐瑰;所以有了以上現(xiàn)象。需要理解的是廷臼,line-boxes是根據(jù)文案苍在、圖片等這些資源生成的一個(gè)高度框,自身不產(chǎn)生高度荠商。

既然如此寂恬,我們可以得出一個(gè)結(jié)論: line-height可以規(guī)定高度,有些時(shí)候莱没,他也可以取代height

?

* 拓展與使用

單行文本的居中

?從上面的經(jīng)驗(yàn)我們可以知道初肉,對(duì)于單行的文本有 line-boxes 這東西。網(wǎng)絡(luò)上常說饰躲,“把line-height設(shè)置與height相同的值牙咏,便可以實(shí)現(xiàn)單行文字的居中“臼隔。是沒有錯(cuò),但是其實(shí)略有冗余妄壶。line-height本身就能規(guī)定高度摔握,其實(shí)只需要“把line-height設(shè)置成所需要的box的高度” 即可。

多行文本的居中對(duì)齊

1. 對(duì)于高度不固定的多行文本:
使用padding實(shí)現(xiàn)效果丁寄,只要把上下padding的值設(shè)為相同盒发。

2. 對(duì)于高度固定的多行文本:
文字可能為單行,也可能為多行狡逢,再又或者字體大小不一致宁舰,這時(shí)我們就可以借助 line-height 實(shí)現(xiàn)居中效果。方案如下
注意:文案較多發(fā)生自動(dòng)換行奢浑,或者不同屏幕適配時(shí)文字顯示行數(shù)不一致下蛮艰,將不適用
html代碼

<p class="mulit_line">
    <span style="font-size:12px;">這里是高度為150像素的標(biāo)簽內(nèi)的多行文字,文字大小為12像素雀彼。<br/>這里是第二行壤蚜,用來測(cè)試多行的顯示效果。</span>
  <i>&nbsp;</i>
</p>

css 代碼

* { margin: 0; padding: 0;}
.mulit_line{
  line-height: 150px; 
  padding: 15px;
  margin-left: 50%;     /* 讓盒子左右居中  */
  transform: translateX(-50%);
}
.mulit_line span{
  display: -moz-inline-stack; 
  display: inline-block; 
  line-height: 1.4em; 
  vertical-align: middle;
}
.mulit_line i{
  width:0; 
  display: -moz-inline-stack;
  display: inline-block; 
  vertical-align: middle; 
  font-size: 0;
}

效果展示

?

避免haslayout:巧妙的設(shè)置文字的背景顏色

?經(jīng)常我們有這樣的需求: 在一個(gè)文案中徊哑,需要對(duì)某些文字加背景顯示袜刷,或者,我們有一個(gè)tag莺丑,用作標(biāo)注信息著蟹。情形如下:


Tag 標(biāo)簽

可以這么實(shí)現(xiàn)
html代碼

<span class="box">NEWS!</span>

css代碼

.box {
  line-height: 20px;
  background-color: pink;
  padding: 5px;
  color: white;
  border-radius: 6px;
}

說明: 在某些情形下,line-height可以和height互換梢莽,因?yàn)閷?shí)現(xiàn)的效果一樣萧豆。都能撐開一個(gè)高度,然而這兩個(gè)css屬性有一個(gè)較隱蔽的差異昏名,就是使用height會(huì)使標(biāo)簽haslayout涮雷,而使用line-height則不會(huì)。

沖破限制

關(guān)于line-height先說這些轻局,如果有錯(cuò)誤洪鸭,歡迎指正。
如果覺得還不夠深入仑扑,可以查看 騰訊團(tuán)隊(duì)的 深入理解line-height

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末览爵,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子夫壁,更是在濱河造成了極大的恐慌拾枣,老刑警劉巖沃疮,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盒让,死亡現(xiàn)場(chǎng)離奇詭異梅肤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)邑茄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門姨蝴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人肺缕,你說我怎么就攤上這事左医。” “怎么了同木?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵浮梢,是天一觀的道長。 經(jīng)常有香客問我彤路,道長秕硝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任洲尊,我火速辦了婚禮远豺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘坞嘀。我一直安慰自己躯护,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布丽涩。 她就那樣靜靜地躺著棺滞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪矢渊。 梳的紋絲不亂的頭發(fā)上检眯,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音昆淡,去河邊找鬼锰瘸。 笑死,一個(gè)胖子當(dāng)著我的面吹牛昂灵,可吹牛的內(nèi)容都是我干的避凝。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼眨补,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼管削!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起撑螺,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤含思,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體含潘,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡饲做,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了遏弱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盆均。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖漱逸,靈堂內(nèi)的尸體忽然破棺而出泪姨,到底是詐尸還是另有隱情,我是刑警寧澤饰抒,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布肮砾,位于F島的核電站,受9級(jí)特大地震影響袋坑,放射性物質(zhì)發(fā)生泄漏唇敞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一咒彤、第九天 我趴在偏房一處隱蔽的房頂上張望疆柔。 院中可真熱鬧,春花似錦镶柱、人聲如沸旷档。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鞋屈。三九已至,卻和暖如春故觅,著一層夾襖步出監(jiān)牢的瞬間厂庇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國打工输吏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留权旷,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓贯溅,卻偏偏與公主長得像拄氯,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子它浅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案译柏? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,737評(píng)論 1 92
  • 行高: 兩行文字“基線”之間的垂直距離 基線并不是漢字的下端沿,而是英文字母"x"的下端沿 行距: 一行“底線”至...
    lmmy123閱讀 1,750評(píng)論 0 2
  • 前言 總括: 本文通過實(shí)例講解CSS中最大的難點(diǎn)之一姐霍,行內(nèi)元素的布局鄙麦,主要是挖掘line-height和verti...
    秦至閱讀 1,908評(píng)論 0 1
  • 以下文章是我在網(wǎng)上收集的內(nèi)容典唇,為了記錄自己的學(xué)習(xí)以及為了以后不到處找而記錄下來,如果對(duì)你有用胯府,請(qǐng)感謝寫這些文章的前...
    DCbryant閱讀 927評(píng)論 0 2
  • 夜 深邃 沉靜 在億萬光年里 默默的 默默的 恰如一個(gè)孤獨(dú)的守望者 等待著遺落的繁星 我劃一片星船 穿過片片云彩...
    思京閱讀 197評(píng)論 0 3