vertical-align問題(img下方空白及無(wú)法對(duì)齊)

這是面試挺喜歡問的題,了解原理的同時(shí),順便做一下筆記。
本文參考:
http://www.zhangxinxu.com/wordpress/2015/08/css-deep-understand-vertical-align-and-line-height
http://www.cnblogs.com/starof/p/4512284.html

在現(xiàn)實(shí)使用或者面試中,我們經(jīng)常會(huì)碰到vertical-align一些奇怪的問題,主要由兩個(gè):
1、img圖片(inline-block元素)下方空白

image.png

2、無(wú)法對(duì)齊

image.png

【1、img下方空白問題】

產(chǎn)生原因:

  • 行內(nèi)元素,inline-block元素的默認(rèn)對(duì)齊是基于baseline的,
  • 對(duì)于沒有行內(nèi)元素的box,baseline為底部邊緣。如果有inline元素,對(duì)齊baseline為inline元素的baseline。
  • 在此例中,雖然沒有其他字符,但是默認(rèn)有一個(gè)類似長(zhǎng)度為0的空白字符,此時(shí)就會(huì)使底部高度被撐高。
  • 多高呢?
    是行高的底部到baseline的距離。
image.png

如果我們?cè)偌尤胍粋€(gè)字符,就會(huì)更清楚。

image.png

無(wú)論我們?cè)谂赃厡懖粚懽址?,這個(gè)默認(rèn)高度都會(huì)存在。

既然我們知道是line-height和vertical-align的原因,有什么解決辦法呢?

1、使vertical-align失效

把img或者inline-block元素設(shè)置為block元素,這樣vertical-align:baseline就不起作用了。

//box是指這個(gè)紅色的正方形
.box{
  display:block;
}
image.png

此時(shí)如果我們還想在同一行放入其他元素怎么辦?估計(jì)只能定位或者float了。

2、使vertical-align:baseline失效

就是給box設(shè)置其他的vertical-align值(top,bottom,middle)

image.png

3、設(shè)置line-height

既然有一個(gè)默認(rèn)的空白字符,而其高度是line-height底部到baseline的距離,如果我的line-height足夠小,那么這個(gè)距離也可以減小為0;

//.ct為包裹box和span文字的容器
.ct{
  line-height: 5px;
}
image.png

4、直接設(shè)置fontsize為0

既然是由于文字或者空白字符的baseline對(duì)齊導(dǎo)致的,那么我們直接控制font-size為0,讓baseline到行高底部為0.
本質(zhì)還是相當(dāng)于控制行高。不過span字體會(huì)消失。

.ct{
  font-size:0;
}
image.png

================分割線================================

【2.對(duì)齊問題】

一般我們直接設(shè)置兩個(gè)inline-block,會(huì)直接對(duì)齊的。
比如下面這樣。

image.png

代碼如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        .box1,.box2{
            width: 100px;
            height: 100px;
            border: 1px solid red;
            display: inline-block;
        }
    </style>
</head>
<body>
    <div class="ct">
      <div class="box1"></div>
      <div class="box2"></div>
    </div>
</body>
</html>

而當(dāng)我們?cè)谄渲幸粋€(gè)box加入一些文字的時(shí)候,就無(wú)法對(duì)齊了。

image.png

這是為什么呢?結(jié)合上面的知識(shí),其實(shí)還是vertical-align的對(duì)齊問題,box1沒有文字,對(duì)齊的還是box1的下邊緣,box2有文字,對(duì)齊的就是文字的baseline了。

image.png

既然知道是baseline搞的鬼,怎么解決呢?
我們可以試試各個(gè)vertical-align值,
為什么只有vertical-top可以呢?
看下面的圖你就知道了。

image.png
  • 當(dāng)我們給右邊box2設(shè)置middle時(shí),右邊middle會(huì)和左邊baseline對(duì)齊
  • 當(dāng)我們給右邊box2設(shè)置bottom時(shí),就是上圖的位置。
    因?yàn)樽筮厡?duì)齊方式還是不變(baseline),所以不改變位置。
    右邊對(duì)齊的是父元素的bottom,也就是最低的bottom,就是左邊的bottom。(父元素top取所有元素最高點(diǎn),bottom取所有元素最低點(diǎn))

所以最終的解決方案是在box2加一個(gè)vertical-ailgn:top

.box2{
  vertical-align:top;
}

以上。

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

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

  • 有些東西我們經(jīng)常用,但是我們卻并不了解它的原理,所以一旦換了場(chǎng)景,好多東西就不知道該怎么用了。最近一直很糾結(jié)ver...
    朱小維閱讀 4,977評(píng)論 8 34
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,777評(píng)論 1 92
  • 簡(jiǎn)介 今天我打算對(duì)css樣式vertical-align的知識(shí)點(diǎn)進(jìn)行一些總結(jié),在我寫具體內(nèi)容之前,我先要說明一下,...
    小貔閱讀 882評(píng)論 0 0
  • 今天,我在朋友圈發(fā)了一條動(dòng)態(tài)。 是的,這是我在關(guān)閉朋友圈2年后的第一條動(dòng)態(tài),關(guān)于遇見的動(dòng)態(tài)。 今天是七夕節(jié),真是個(gè)...
    唸臻閱讀 356評(píng)論 0 1
  • 看到了精神弒父環(huán)節(jié)、看到了弒父完成后另一種客觀的愛產(chǎn)生的環(huán)節(jié)-來(lái)自于男主在父親毆打母親的時(shí)候用槍指著父親、以及在軍...
    ZhouXuan閱讀 371評(píng)論 0 0