inline「一」:從 image 底部白邊初識(shí) line-height

本文首發(fā)于個(gè)人博客 http://www.lijundong.com/image-and-line-height/

今天在做一個(gè)靜態(tài)頁面時(shí),圖片底部出現(xiàn)一條 3px 高度的白邊伤锚,既不是 margin 也不是 padding,找了好久沒能解決,后來才發(fā)現(xiàn)與 line-height 相關(guān)蛉拙,問題解決后查缺補(bǔ)漏厕宗,這里作下筆記。
解決問題之前需要理清楚幾個(gè)概念奠货,基線介褥、line-height、vertical-align递惋、inline 元素柔滔。

基線(baseline)

基線(Baseline) 是字體排印學(xué)中的概念,指的是多數(shù)字母排列的基準(zhǔn)線萍虽,大多字母都沿著紅色基線排列睛廊,舉個(gè)例子輔助理解



圖中 xHh 字母的下邊緣紅線就是基線的所在,那么有沒有一個(gè)特定的條件來定義基線呢杉编?這里有個(gè)概念可供參考

字母x的下邊緣(線)就是基線的所在超全。

這里又引出了 x-height 的概念,此處不表邓馒。

line-height

關(guān)于 line-height 如何定義的討論嘶朱,有說法是兩條基線之間的距離,看到這個(gè)結(jié)論我首先想到第一行的行高如何處理光酣,后來去找了資料疏遏,發(fā)現(xiàn)兩條基線之間的距離即是 line-height 這樣的結(jié)論并不準(zhǔn)確。
關(guān)于 line-height 的定義,MDN 闡述如下:

On block level elements, the line-height property specifies the minimum height of line boxes within the element.
On non-replaced inline elements, line-height specifies the height that is used to calculate line box height.

block 元素中财异, line-height 的值等于元素中高度最低的行框(line box) 的高度值倘零。
在 non-replaced inline 元素中,line-height 的值等于行框(line box) 的高度值戳寸。

注:

replaced element VS non-replaced element

  • replaced element: 例如 img呈驶、video、canvas 此類渲染出的內(nèi)容引用外部的元素
  • non-replaced element: 渲染自身的 content疫鹊,
    例如 <a href="lijundong.com">Leeon Blog</a> 此類俐东,渲染出的內(nèi)容來自自身。

inline(內(nèi)聯(lián)) 元素

HTML5 中的常見 inline 元素如下:

  • inline:span订晌、strong虏辫、em
  • inline-block:input、button锈拨、textarea砌庄、select、img

vertical-align

vertical-align 作用于 inline 元素 以及 table-cell 元素奕枢,還有 ::first-letter::first-line娄昆,更多內(nèi)容可以參見 MDN

屬性分類:

適用于 inline 元素的屬性:

/* keyword values */
vertical-align: baseline;  /*基于基線對(duì)齊*/
vertical-align: sub;
vertical-align: super;
vertical-align: text-top;
vertical-align: text-bottom;
vertical-align: middle;
vertical-align: top;
vertical-align: bottom;

/* <length> values */
vertical-align: 10em;
vertical-align: 4px;

/* <percentage> values */
vertical-align: 20%;

/* Global values */
vertical-align: inherit;
vertical-align: initial;
vertical-align: unset;

適用于 table-cell 的屬性:

vertical-align: top;
vertical-align: bottom;
vertical-align: middle;

回到問題

問題代碼示例如下,

<style >
    * {
        padding: 0;
        margin:  0;
    }
    body {
        background-color: #ccc;
    }
    img {
        width: 100px;
    }
    div ,p {
        font-size: 100px;
        background-color: #fff;
    }
</style>
<body>
    <div >
        ![](headpic.png)
    </div>
</body>

代碼效果圖如下缝彬,紅框圈出部分為出現(xiàn)的白條


通過對(duì)代碼稍作修改可以輕松看出問題所在萌焰,實(shí)圖如下

有了上面的鋪墊,現(xiàn)在回頭看遇到的問題谷浅,就很簡(jiǎn)單了扒俯,究其原委,首先 img 元素默認(rèn)對(duì)齊方式為 vertical-align: baseline;一疯,這就導(dǎo)致了撼玄,baseline 以下的部分被空了出來,顯示了背景的白色墩邀。

問題找到了掌猛,對(duì)癥下藥可得出下面的解決方案:

  • 根本上消除 img 的對(duì)齊方式 —— 塊狀化:
img { 
    display: block; 
}
  • 更改 img 對(duì)齊方式,以下三種均可
img {
    vertical-align: top;
    vertical-align: middle;
    vertical-align: bottom;
}
  • 更改行高眉睹,行高是兩條 baseline 之間的距離荔茬,因此可以暴力的讓行高消失
{ 
    line-height: 0;
    /* font-size: 0; 當(dāng) line-height 使用數(shù)值、百分比或者 rem 定義時(shí)也可用這種方式竹海,因?yàn)?line-height 參照的是 font-size 的值*/
}

總結(jié)

遇到問題多多求證慕蔚,即便是很常見的問題也會(huì)挖出大學(xué)問,在求證的過程中也不能盡用拿來主義站削,多參考 w3c 和 MDN 的文檔坊萝。
寫的過程中孵稽,修修補(bǔ)補(bǔ)了好幾回许起,關(guān)于 vertical-align 的內(nèi)容講的很倉促十偶,后面會(huì)補(bǔ)上,如果文中表達(dá)有誤园细,煩請(qǐng)指出惦积,感謝。


參考:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末猛频,一起剝皮案震驚了整個(gè)濱河市狮崩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鹿寻,老刑警劉巖睦柴,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異毡熏,居然都是意外死亡坦敌,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門痢法,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狱窘,“玉大人,你說我怎么就攤上這事财搁≌赫ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵尖奔,是天一觀的道長搭儒。 經(jīng)常有香客問我,道長提茁,這世上最難降的妖魔是什么仗嗦? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮甘凭,結(jié)果婚禮上稀拐,老公的妹妹穿的比我還像新娘。我一直安慰自己丹弱,他們只是感情好德撬,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著躲胳,像睡著了一般蜓洪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坯苹,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天隆檀,我揣著相機(jī)與錄音,去河邊找鬼。 笑死恐仑,一個(gè)胖子當(dāng)著我的面吹牛泉坐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播裳仆,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼腕让,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了歧斟?” 一聲冷哼從身側(cè)響起纯丸,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎静袖,沒想到半個(gè)月后觉鼻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡队橙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年滑凉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喘帚。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡畅姊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出吹由,到底是詐尸還是另有隱情若未,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布倾鲫,位于F島的核電站粗合,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏乌昔。R本人自食惡果不足惜隙疚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望磕道。 院中可真熱鬧供屉,春花似錦、人聲如沸溺蕉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽疯特。三九已至哗魂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間漓雅,已是汗流浹背录别。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來泰國打工朽色, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人组题。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓葫男,卻偏偏與公主長得像,于是被迫代替她去往敵國和親往踢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

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

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案徘层? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,737評(píng)論 1 92
  • 參考文章:深入了解CSS的line-height屬性Vertical-Align: 你需要知道的所有事【譯】Ver...
    若邪Y閱讀 3,428評(píng)論 1 6
  • 有些東西我們經(jīng)常用峻呕,但是我們卻并不了解它的原理,所以一旦換了場(chǎng)景趣效,好多東西就不知道該怎么用了瘦癌。最近一直很糾結(jié)ver...
    朱小維閱讀 4,922評(píng)論 8 34
  • 前言 總括: 本文通過實(shí)例講解CSS中最大的難點(diǎn)之一,行內(nèi)元素的布局跷敬,主要是挖掘line-height和verti...
    秦至閱讀 1,908評(píng)論 0 1
  • 這個(gè)是我搭建的場(chǎng)景讯私,畫面比較Low,但這不是重點(diǎn)西傀。紅色的Cube相當(dāng)于一個(gè)小車斤寇,面片就是相當(dāng)于我的右后視鏡 當(dāng)我移...
    LeoYangXD閱讀 4,086評(píng)論 0 0