inline-blcok
佈局時,一般狀況下, inline-blocks 之間有空白,儘管一般咱們是不想要的,畢竟不像padding
或者margin
同樣好控制,如圖:<div class="parent"> <span class="child child1">child child1</span> <span class="child child2">child child2</span> <span class="child child3">child child3</span> <span class="child child4">child child4</span> <span class="child child5">child child5</span> </div>
* { margin: 0; padding: 0; color: black; } .parent { background-color: pink; } .child { display: inline-block; border: 10px solid darkorange; background-color: lightblue; }
產生空白的緣由,其實有兩個:css
white-space
默認爲normal
,根據MDN
上來講,就是連續的空白符會被合併,換行符會被看成空白符來處理。填充line盒子時,必要的話會換行。html
這個不合理麼?不,這是合理的,這也就是爲何你的行內標籤之間有那麼多空白符或者換行,可是在實際展現的時候,都被縮成了一個空白。chrome
inline-blcok
元素對外是按照IFC
來佈局的,因此 inline-blcoks 之間的空白就變會被合併,變成一個空白,若是 inline-blcoks 之間沒有空白,那天然就不存在這個問題了,固然這在實際編碼中可行性不大。text-space-collapse:discard
,然而這個規範纔出來,2018.5 尚未瀏覽器支持,戳 草案.parent
設置letter-spacing : -0.3em
,.child
設置letter-spacing:0
。.parent
的letter-spacing
過大也不會有大問題,opera 老版瀏覽器和 IE6/7 可能會有問題。.child
設置margin-right:-0.3em
。但margin-right
過大可能會產生負間隙。.parent
設置word-spacing : -0.3em
,.child
設置word-spacing:0
。但.parent
的word-spacing
過大可能會產生負間隙。.parent
設置font-size : 0
,.child
把font-size
設置成原來的值。缺點明顯,若是原來字號都用的em
,就不太好用。float
佈局或去flex
佈局。總結:可行的方案就是負偏移和font-size
,考慮兼容性就結合font-size
和letter-spacing
,如:瀏覽器
.parent { letter-spacing: -0.3em; font-size: 0; } .child { display: inline-block; letter-spacing: 0; font-size: 12px; }
若是不考慮 opera 老版瀏覽器,就 letter-spacing
就能夠了,這個應該是趨勢。wordpress
注意letter-spacing
不要用-0.3em
和-0.31em
以外的值,不然會出現相似下面的狀況,在 chrome66上測試過。佈局
除此以外,還有些十分不優雅的方法,這裏就截圖一下,看看就好:測試
參考文章:
How do I remove the space between inline-block elements?
display: inline-block extra margin
Unwanted margin in inline-block list son sons
拜拜了浮動佈局-基於 displayinline-block 的列表佈局flex