詳細(xì)了解line-height和vertical-align

vertical-align

先看一個(gè)例子

<div id="text" style="border: 1px solid #ccc;height:15rem;">
    <span style="vertical-align:bottom;border: 1px solid #ccc;display:inline-block;height:2rem">假設(shè)我是一個(gè)有內(nèi)容的inline-block</span>
    <span style="border: 1px solid #ccc;font-size:5rem;vertical-align:baseline;">我的fontSize=5rem</span>
    <span style="vertical-align:baseline;border: 1px solid #ccc;display:inline-block;height:2rem;width:1rem;"></span>
    我是一個(gè)不存在的x
</div>

測(cè)試圖片

上面有一個(gè)block盒子,一個(gè)line盒子和3個(gè)inline(inline-block)盒子,一個(gè)文字(匿名)盒子,通常情況下就算盒子內(nèi)沒(méi)有文字也會(huì)存在一個(gè)寬度為0的匿名文字盒子(如果完全是個(gè)空盒子則沒(méi)有)
block盒子就是div,line盒子是由其內(nèi)部的盒子組合起來(lái)的,注意line盒子是由其內(nèi)部的盒子撐開(kāi)的,無(wú)論div設(shè)置多大的高度都和line盒子的大小無(wú)關(guān)
vertical-align的值,常用的分別有baseline(默認(rèn)),top,bottom,middle,text-top,text-bottom,sub,super,數(shù)值(px,em...),百分比.下面只談inline(inline-block)盒子的屬性值的效果

  • baseline(默認(rèn)值)
    基線,盒子的基線大約在其內(nèi)部文字(匿名)盒子英文字母X的下邊緣(不同的字體不同),img標(biāo)簽和空盒子的基線盒子的下邊緣,在比如上圖中的line盒子的基線就是上圖中我是一個(gè)不存在的x中x的下方,第一個(gè)span的基線就在英文字母i的下邊緣,第二個(gè)span的基線就在盒子的下邊緣,設(shè)置為baseline就是讓盒子本身的基線和line盒子的基線對(duì)齊
  • top
    頂線,盒子自身的頂部,設(shè)置為top是讓盒子自身的頂線和line盒子的頂線對(duì)齊
  • bottom
    底線,盒子自身的底部,設(shè)置為top是讓盒子自身的底線和line盒子的低線對(duì)齊
  • middle
    中線,盒子自身的中間,注意設(shè)置此值不是和line盒子的中線對(duì)齊,注意設(shè)置此值不是和line盒子的中線對(duì)齊,注意設(shè)置此值不是和line盒子的中線對(duì)齊
    w3cshoole直接說(shuō),middle是把此元素放置在父元素的中部,這應(yīng)該是不對(duì)的
    應(yīng)該是和line盒子中文字(匿名)小寫(xiě)x字母的中線對(duì)齊,line盒子中文字(匿名)小寫(xiě)x字母的中線對(duì)齊,line盒子中文字(匿名)小寫(xiě)x字母的中線對(duì)齊,比如這樣
    測(cè)試圖片

    如果比文字(匿名)盒子高的盒子設(shè)置為middle,會(huì)讓文字(匿名)盒子上浮,盒子的基線也會(huì)改變,可以理解為比文字(匿名)盒子高的盒子與line盒子中文字(匿名)小寫(xiě)x字母的中線對(duì)齊后,比文字(匿名)盒子高的盒子下沉,line盒子的高度也跟著下沉,比如這樣
    測(cè)試圖片

    middle的值只和文字(匿名)有關(guān),我覺(jué)得和屬性的名字不相符,也搞得很復(fù)雜,難道是我理解的問(wèn)題?后面會(huì)說(shuō)用middle和line-height居中對(duì)齊
  • text-top
    元素本身的基線與line盒子中文字(匿名)的頂端對(duì)齊,注意不是文字所在的匿名文字盒子的頂端
  • text-bottom
    元素本身的基線與line盒子中文字(匿名)的底端對(duì)齊,注意不是文字所在的匿名文字盒子的底端
  • sub
    元素本身的基線與line盒子中文字(匿名)的下標(biāo)對(duì)齊
  • super
    元素本身的基線與line盒子中文字(匿名)的上標(biāo)對(duì)齊
  • 數(shù)值(支持負(fù)值)
    元素本身基于line盒子基線的偏移
  • 百分比
    和數(shù)值一樣,不過(guò)基于父元素的line-height計(jì)算,也就是line盒子中文字盒子(匿名)的line-height

line-height

line-height顧名思義,我覺(jué)得就是設(shè)置line盒子的最低高度,比如下圖中,設(shè)置div的line-height為3rem就是設(shè)置div盒子中l(wèi)ine盒子的最低高度為3rem,設(shè)置span的line-height為5rem就是設(shè)置span盒子中l(wèi)ine盒子的最低高度為5rem

測(cè)試圖片

<div id="text" style="border: 1px solid #ccc;position:absolute;height:8rem;line-height:3rem;">
    <span style="vertical-align:baseline;border: 1px solid #ccc;display:inline-block;font-size:1rem;line-height:5rem;">我的line-height為5rem</span>
    我是第一行我的line-height為5rem
    <br/>
    我是第二行我的line-height為3rem
</div>

div中有兩個(gè)line盒子,第一個(gè)是由內(nèi)部撐開(kāi)的5rem,第二個(gè)是設(shè)置div的3rem
紅框我把它稱(chēng)作行內(nèi)間距,注意是行內(nèi)間距,不是行間距,不是line盒子和line盒子之間的間距,我的理解是line盒子和line盒子之間是沒(méi)有間距的,但是line盒子本事,有行內(nèi)上間距和行內(nèi)下間距,他們是相等的,都等于(line盒子的高度-font-size)/2,上面一共有六個(gè)行內(nèi)間距,div盒子內(nèi)兩行的4個(gè)和span盒子中一行的2個(gè)
line-height常用的值有normal(初始值),數(shù)字(不是數(shù)值),數(shù)值(px,em...),百分比,inherit(默認(rèn)值)

  • inherit(默認(rèn)值)
    繼承父元素的值
  • normal(初始值)
    這個(gè)值在不同的font-size和瀏覽器下有所不同,一般為1.2左右
  • 數(shù)字(推薦使用)
    1,1.1,1.2,1.3...這個(gè)值是自身font-size的倍數(shù),比如設(shè)置為1,那么行內(nèi)間距就會(huì)(line-height-font-size)/2=0,所以看起來(lái)文字之間就會(huì)沒(méi)有間距
  • 數(shù)值
    設(shè)置固定的數(shù)值,如果設(shè)置為em,就會(huì)根據(jù)當(dāng)前盒子font-size的大小計(jì)算出一個(gè)固定的值,后代會(huì)繼承此值
  • 百分比
    還是設(shè)置固定的數(shù)值,根據(jù)當(dāng)前font-size的大小計(jì)算,后代會(huì)繼承此值

記錄幾種用line-height和vertical居中的方法

  • 單行文字在blcok中居中
    設(shè)置外部block的line-height和height相等,可以不設(shè)置height的值,設(shè)置了line-height,height會(huì)自動(dòng)計(jì)算等于line-height
  • 多行文字在block中居中
    同樣設(shè)置外部block的line-height和height相等,將內(nèi)部包含文字的block元素display:inline-block;line-height:normal;vertical-align:middle;如下圖所示
    測(cè)試圖片
<div id="text" style="border: 1px solid #ccc;position:absolute;height:8rem;line-height:8rem;">
    <p style="line-height:normal;vertical-align:middle;display:inline-block">我是多行文字<br/>我真的是多行<br/>其實(shí)只有三行了</p>
</div>

其實(shí)上面的并不是真正的垂直居中,只是近似垂直居中,因?yàn)樽帜竫的中間并不一定是line盒子的中間,會(huì)稍微偏下一點(diǎn)點(diǎn),要真正的垂直居中,要將外部block盒子的font-size設(shè)為0,內(nèi)部block盒子的font-size設(shè)置為正常值就是真正的垂直居中了

  • 單個(gè)圖片
    和上面的一樣,圖片本身就是inline-block
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,963評(píng)論 6 542
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,348評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 178,083評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,706評(píng)論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,442評(píng)論 6 412
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,802評(píng)論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,795評(píng)論 3 446
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,983評(píng)論 0 290
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,542評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,287評(píng)論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,486評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,030評(píng)論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,710評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 35,116評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,412評(píng)論 1 294
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,224評(píng)論 3 398
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,462評(píng)論 2 378

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