深入解析CSS的display:inline-block屬性的使用

display:inline-block感覺與display:table-cell有些相似,例如對內(nèi)部元素的包裹性。但是,由于display:inline-block最大的不同就是其沒有父元素的匿名包裹特性,這使得display:inline-block屬性的使用非常自由,可與文字,圖片混排,可內(nèi)嵌block屬性元素,可以可以置身于inline水平的元素中??芍^黑白通吃,左右逢源。
inline-block屬性的元素適用于inline box模型,所以,當(dāng)其中的列表元素高度不一時(shí),是不會有錯位的。每一行所有的inline元素和inline-block元素會共同形成一個line boxes,這個line box的高度由里面最高的元素決定。所以,即使inline-block屬性的列表元素高度異常,撐開的是整個line boxes的高度,因而,不會與下一行的列表元素發(fā)生錯位。如下面的我自己畫得拙劣的示意圖所示的:
根據(jù)一些前輩的說法,IE6/7不支持display:inline-block屬性,只是可以讓標(biāo)簽有類似于inline-block的屬性,起初我也是接受這種說法的,不過后來又表示了懷疑,最近使用text-align:justify;做測試的時(shí)候的一些樣式表現(xiàn)證實(shí)了:確實(shí)IE6/7是不支持display:inline-block屬性,只是讓其表現(xiàn)的跟inline-block一樣,尤其對于inline水平的元素,其表現(xiàn)度可以用perfect一詞來形容了。
對于IE8+以及現(xiàn)代瀏覽器,直接使用:
- {display:inline-block;}
就可以了,支持任意水平的元素。
對于不支持的IE6/7瀏覽器該怎么辦呢?如果是inline水平的元素(如a標(biāo)簽,span標(biāo)簽之類)跟上面一樣,直接:
{display:inline-block;}
就可以了,對于這兩個瀏覽器,其功效與*zoom:1;是一樣的。
如果是block水平的元素,例如li標(biāo)簽。則需要多點(diǎn)代碼,目前我知道的方法有兩個,如下所示:
- li {display:inline-block;...}
- li {display:inline;}
或者是:
- li{display:inline; zoom:1;...}
block水平的inline-block化的元素與inline水平的在表現(xiàn)層又是有差異的。
inline-block的問題
觀察上面的例子,細(xì)心的同學(xué)肯定會發(fā)現(xiàn),每個li之間有一個小空隙,而我們的代碼中并沒有設(shè)置margin等相關(guān)屬性,這是為什么呢?
默認(rèn)的inline元素
首先,我們觀察一下默認(rèn)的inline元素的表現(xiàn):
HTML代碼
- <a>首頁</a>
- <a>熱點(diǎn)</a>
CSS代碼
- a { margin: 0; padding: 0; border: 1px solid #000; }
效果圖
默認(rèn)情況下,inline元素之間就有空隙出現(xiàn),所以結(jié)合了inline和block屬性的inline-block屬性自然也有這個特點(diǎn)。
那這些空隙是什么呢,它們是空白符!
消除空白符
在瀏覽器中,空白符是不會被瀏覽器忽略的,多個連續(xù)的空白符瀏覽器會自動將其合并成一個。我們編寫代碼時(shí)寫的空格,換行都會產(chǎn)生空白符。所以自然而然的兩個元素之間會有空白符,如果將上述例子中的a標(biāo)簽寫成一行,空白符消失,菜單之間也就緊湊起來了。
空白符雖然是瀏覽器正常的表現(xiàn)行為,但是通常情況下,設(shè)計(jì)師同學(xué)的設(shè)計(jì)稿不會出現(xiàn)這些空隙,我們在還原設(shè)計(jì)稿的時(shí)候,怎么去除掉這些空隙呢。
要取出空白符產(chǎn)生的間隙,首先要理解空白符歸根結(jié)底是個字符,通過設(shè)置font-size屬性可以控制產(chǎn)生的間隙的大小。
首先我們將font-size設(shè)置成50px試試,修改CSS代碼如下:
- ul, li { padding: 0; margin: 0; list-style-type: none; font-size:50px}
- li { display: inline-block; border: 1px solid #000; width: 100px; text-align: center;font-size:12px }
我們修改ul的font-size為50px,而li的font-size為12px保持原來的字體大小,效果如下:
可以看到菜單之間的空隙變大了。
接著我們設(shè)置font-site屬性為0px,代碼如下
- ul, li { padding: 0; margin: 0; list-style-type: none; font-size:0px}
- li { display: inline-block; border: 1px solid #000; width: 100px; text-align: center;font-size:12px }
效果如下:
兼容性問題
在IE8+,F(xiàn)F和Chrome的瀏覽器,inline-block可以完美的兼容,考慮到IE6和IE7等低版本瀏覽器的占用率,雖然有辦法可以兼容,但本文不再贅述,大家有興趣的可以查找相關(guān)資料。
inline-block的應(yīng)用
inline-block的應(yīng)用什么場景有哪些呢?我們大家考慮一個技術(shù)的應(yīng)用場景時(shí),首先一定要思考的是技術(shù)的特性和需求是否符合。inline-block的特點(diǎn)是結(jié)合inline和block兩種屬性的特定,可以設(shè)置width和height,并且元素保持行內(nèi)排列的特性,基于這一點(diǎn),所有行內(nèi)排列并且可以設(shè)置大小的場景都是我們可以考慮使用inline-block的應(yīng)用場景。下面舉例說明:
網(wǎng)頁頭部菜單
網(wǎng)頁頭部的菜單就是典型的橫向排列并且需要設(shè)置大小的應(yīng)用,在inline-block之前,實(shí)現(xiàn)菜單基本都是用float屬性來實(shí)現(xiàn),float屬性會造成高度塌陷,需要清除浮動等問題,使用inline-block實(shí)現(xiàn)就不需要在意這樣的問題。代碼如下:
HTML代碼
- <div class="header">
- <ul>
- <li>
- <a href="javascript:;" target="_blank">服裝城</a>
- </li>
- <li>
- <a href="javascript:;" target="_blank">美妝館</a>
- </li>
- <li>
- <a href="javascript:;" target="_blank">超市</a>
- </li>
- <li>
- <a href="javascript:;" target="_blank">全球購</a>
- </li>
- <li>
- <a href="javascript:;" target="_blank">閃購</a>
- </li>
- <li>
- <a href="javascript:;" target="_blank">團(tuán)購</a>
- </li>
- <li>
- <a href="javascript:;" target="_blank">拍賣</a>
- </li>
- <li>
- <a href="javascript:;" target="_blank">金融</a>
- </li>
- <li>
- <a href="javascript:;" target="_blank">智能</a>
- </li>
- </ul>
- </div>
CSS代碼:
- a, ul, li { padding: 0; margin: 0; list-style-type: none; }
- a { text-decoration: none; color: #333; }
- .header ul { font-size: 0; text-align: center; }
- .header li { display: inline-block; font-size: 16px; width: 80px; text-align: center; }
效果圖
這是模仿京東首頁頭部導(dǎo)航菜單的實(shí)現(xiàn),使用inline-block可以很簡單的實(shí)現(xiàn)橫向菜單列表
內(nèi)聯(lián)塊元素
除了菜單之外,一切需要行內(nèi)排列并且可設(shè)置大小的需求就可以用inline-block來實(shí)現(xiàn)。
例如使用a標(biāo)簽做按鈕時(shí),需要設(shè)置按鈕的大小,我們就可以使用inline-block來實(shí)現(xiàn)。
HTML代碼
- <div>
- 點(diǎn)擊右邊的按鈕直接購買
- <a href="javascript:;" class="button">
- 購買
- </a>
- </div>
CSS代碼
- .button { display: inline-block; width: 150px; height: 45px; background: #b61d1d; color: #fff; text-align: center; line-height: 45px; font-size: 20px; }
效果圖
布局
inline-block也可以用于常見的布局,使用它就不需要去注意float屬性布局帶來的問題。
舉例說明,創(chuàng)建一個常見的3列布局。
HTML代碼
- <div class="wrap">
- <div class="header">
- 網(wǎng)頁頭部
- </div>
- <div class="content">
- <div class="left">
- 左側(cè)
- </div>
- <div class="center">
- 中間
- </div>
- <div class="right">
- 右側(cè)
- </div>
- </div>
- <div class="footer">
- 網(wǎng)頁底部
- </div>
- </div>
CSS代碼
- body, div { margin: 0; padding: 0; }
- .header, .footer { width: 100%; background: #ccc; height: 120px; text-align: center; line-height: 120px; }
- .content { margin: 0 auto; background: #ff6a00; width: 1000px; font-size: 0; }
- .content .left, .content .center, .content .rightright { display: inline-block; font-size: 16px; height: 400px; }
- .content .left, .content .rightright { width: 200px; }
- .content .center { width: 600px; background: #00ffff; }
效果圖
這個例子使用了inline-block做出了常見的網(wǎng)頁布局。
關(guān)于inline-block的應(yīng)用,只要是從左到右,從上到下,并且需要設(shè)置大小的列表都可以用它來實(shí)現(xiàn),而這種需求是非常常見的,相比于float,我更推薦inline-block。inline-block的應(yīng)用應(yīng)該還有很多,大家可以多多挖掘出來。
總結(jié)
相比于使用float所帶來的問題,使用inline-block所需要注意的點(diǎn)主要是空白符帶來的問題,這一點(diǎn)也可以很方便的解決。
使用inline-block可以很方便的進(jìn)行列表布局,更加符合我們的思維習(xí)慣,相信使用它的同學(xué)們也會越來越多,歡迎大家討論。
相關(guān)文章
css之display屬性之inline-block布局實(shí)現(xiàn)詳解
今天學(xué)習(xí)css樣式的時(shí)候發(fā)現(xiàn)很多網(wǎng)站都是用css的display:inline-block這個屬性,這里剛好有篇特別好的解釋,特分享一下2020-03-21- 這篇文章主要介紹了詳解css中inline-block的最小寬度值,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起2019-12-09
- 這篇文章主要介紹了詳解CSS 去掉inline-block元素間隙的幾種方法,這些間隙會導(dǎo)致一些布局上的問題,需要把間隙去掉。非常具有實(shí)用價(jià)值,需要的朋友可以參考下2018-11-13
- 這篇文章主要介紹了css幾種解決inline-block間隙的方案(整理),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-16
css解決display:inline-block;產(chǎn)生的縫隙(間隙)的方法
本篇文章主要介紹了css解決display:inline-block;產(chǎn)生的縫隙(間隙)的方法,具有一定的參考價(jià)值,有需要的可以了解一下。2016-12-14- 這篇文章主要介紹了兼容瀏覽器的inline-block,需要的朋友可以參考下2016-02-17
CSS中使用inline-block來進(jìn)行居中的示例
這篇文章主要介紹了CSS中使用inline-block來進(jìn)行居中的示例,使用的時(shí)候注意一下容器的寬度,需要的朋友可以參考下2015-07-15- 這篇文章主要介紹了CSS解決inline-block的錯位問題,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-01