我如今仍然記得做爲一個IE6時代的初級開發者拼命的渴望IE擁有display: inline-block;
這個屬性。當咱們想控制間距和填充在inline
元素兒不用block and float
的時候,inline-block
這個屬性是及其的有用。
然而,使用inline-block
的時候有一個問題,視覺上兩個元素之間會出現空白。
有不少辦法移除這些惱人的空白css
惟一一個百分之百解決這個問題的方案是這樣:不要在這些元素的源碼之間出現空白。html
<style type="text/css"> ul,li{ margin: 0; padding: 0; } li{ list-style: none; display: inline-block; border: 1px solid black; padding: 2px; } </style> <ul><li>Item</li><li>Item</li><li>Item</li></ul>
下面是效果:
固然了,這個維護起來比較麻煩,但他很實用、和邏輯,最重要的是比較可靠。spa
最好的空白解決方案:設置行區塊元素的父元素font-size: 0
。所以若是你有一個code
<style type="text/css"> ul,li{ margin: 0; padding: 0; } li{ list-style: none; display: inline-block; border: 1px solid black; padding: 2px; } .inline-block-list{ font-size: 0; } .inline-block-list li{ font-size: 14px; } </style> <ul class="inline-block-list"> <li>Item</li> <li>Item</li> <li>Item</li> </ul>
這種狀況通常狀況下和方法 0
是同樣的結果,不過在IE8中,若是給行塊級元素設置了position:absolute
,這個會致使一個嚴重的問題,頁面直接就是所有空白了。htm
這種方法有點取巧的意思,但仍然能夠用。在行塊元素之間使用HTML註釋,這個原理也是在元素源碼之間沒有空格blog
<style type="text/css"> ul,li{ margin: 0; padding: 0; } li{ list-style: none; display: inline-block; border: 1px solid black; padding: 2px; } .inline-block-list{ font-size: 0; } .inline-block-list li{ font-size: 14px; } .three{ position: absolute; margin-left: 20px; } </style> <ul class="inline-block-list"> <li>Item</li><!-- --><li>Item</li><!-- --><li class="three">Item</li> </ul>
用一個單詞形容這個。。。流氓(gross),兩個單詞形容這種方法。。。真流氓(really gross)。用三個單詞。。。就是——你可使用它(you get it)。他能夠正常的顯示。three
和方法 2
相似,這個方法也有點使人遺憾。你能夠利用行塊元素的靈活性,用負的間距抵消空白開發
<style type="text/css"> ul,li{ margin: 0; padding: 0; } li{ list-style: none; display: inline-block; border: 1px solid black; padding: 2px; } .inline-block-list li{ margin-left: -4px; } </style> <ul class="inline-block-list"> <li>Item</li> <li>Item</li> <li>Item</li> </ul>
這是一個不好勁的方案,你必須計算這個負間距是多少,有時候還會有不可預料的空白。因此,儘可能避免使用這種來解決行塊元素之間的空白。rem
另一個基於HTML的hack解決方案就是——只須要將閉合標籤>
放到下一個標籤的開始:get
<style type="text/css"> ul,li{ margin: 0; padding: 0; } li{ list-style: none; display: inline-block; border: 1px solid black; padding: 2px; } .inline-block-list{ font-size: 0; } .inline-block-list li{ font-size: 14px; } </style> <ul class="inline-block-list"> <li>Item</li ><li>Item</li ><li>Item</li> </ul>
跟HTML註釋這種方式相比,沒有那麼難看,但我知道,我能夠移除空白,但沒有去考慮這些空白爲何會存在。
全部的這些解決方案沒有一個是完美的,惟一能夠選擇的在HTML中不要使用空格和縮進也是一個不太好的方案。這不是告訴你「注意使用什麼方案」,由於inline-block
仍然很是的有用,但當開發者使用它的時候知道如何處理空白很是的重要。
個人方法是使用浮動,這個在IE7中也是ok的,前面的這些方法在IE系列中某些低版本可能會失效(inline-block不起做用)
<style type="text/css"> ul,li{ margin: 0; padding: 0; } ul:after{ content: '.'; height: 0; visibility: hidden; display: block; clear: both; } li{ list-style: none; display: inline-block; border: 1px solid black; padding: 2px; float: left; } </style> <ul class="inline-block-list"> <li>Item</li> <li>Item</li> <li>Item</li> </ul>
原文地址:
https://davidwalsh.name/remove-whitespace-inline-block
author: 燕睿濤 email: ritoyan@163.com