行內元素空白「消消樂」
- 2020 年 4 月 7 日
- 筆記
~歡迎點擊上方藍字「歪碼行空」快速關注~
前言
相信大家應該都遇到過下面這個問題:「HTML 源碼中行內元素之間的空白顯示在了螢幕上」。可能大家都有自己的小技巧來消除這些意料之外的空白。但是方法有很多,有時候不能滿足於一種方法,不同的方法適合於不同的場景。就像我之前一直用的方法,今天總結了之後才發現還有更好的方法。廢話不多說,接下來我給大家總結一下消除行內元素 HTML 源碼空白的小技巧。
下文中以一個div
中的兩個span
標籤為例。我們將兩個div
內的兩個span
設為display:inline-block;width:50%;
,會發現兩個span
元素並沒有在同一行,這就是源碼中的空白導致的。
示例圖與程式碼如下:

HTML:
<div class="Resolve"> <span>左側行內元素</span> <span>右側行內元素</span> </div>
CSS:
.Resolve { width: 90%; border: 1px solid #dd4b39; color: white; } .Resolve span { display:inline-block; width: 50%; } .Resolve span:first-child { height: 40px; background: #37b8ea; } .Resolve span:last-child { height: 30px; background: #5cb767; }
解決方案 1:源碼中直接就寫成一行
相信大家看到這個解決方案的時候,會想這不是廢話嘛。有時候我們就是為了程式碼的美觀,才將兩個 span 標籤分兩行顯示的,寫在一行根本就沒解決問題好不好?
不過,我覺得這並不是廢話,之所以將其列為一種解決方案,是防止有的人不知道是什麼原因導致的空白的顯示。知道了這個原因,如果兩個行內元素的橫向寬度(此處指程式碼寬度)不大,寫在一行也算是最快最直接的解決方法。
示例圖與程式碼如下:

HTML:
<div class="Resolve Resolve1"> <span>左側行內元素</span><span>右側行內元素</span> </div>
解決方案 2:font-size: 0; (筆者一直使用的方法)
問題中span
標籤之間的空白是因為換行符/Tab 製表符/空格等產生的間隔,並且據筆者測試,得出這個距離是字體大小的 1/3 倍(這個值是跟字體相關的,不同字體的空白字元的寬度可能不一樣,此處以此為例)。那麼既然空格和字體大小font-size
相關。那麼也可以通過字體大小來消除這個空隙。
在父級元素上設置font-size: 0;
,然後再在內部的span
設置需要的字體大小即可。
示例圖與程式碼如下:

HTML:
<div class="Resolve Resolve2"> <span>左側行內元素</span> <span>右側行內元素</span> </div>
CSS:
.Resolve2 { font-size: 0; } .Resolve2 span { font-size: 14px; }
這種情況在內部的行內元素字體大小比較統一時,處理起來較為方便,但如果包含的行內元素中存在多種字體大小,需要一一指定,較為繁瑣。不過往往這種時候內部的多種字體大小也是單獨指定。可以根據具體場景決定是否使用該方案。
解決方案 3:margin-left 設為負值
如果行內元素為塊級行內元素,則可以使用 margin 屬性來抵消空白。在【解決方案 2】中有提到行內元素之間的距離是字體大小的 1/3 倍。所以我們只需要將第二個span
元素的margin-left
設置為-0.333333em
即可。
示例圖與程式碼如下:

HTML:
<div class="Resolve Resolve3"> <span>左側行內元素</span> <span>右側行內元素</span> </div>
CSS:
.Resolve3 span:last-child { margin-left: -0.333333em; }
不過從上面可以看出,最右邊還會存在一點點的白邊誤差。這是由於margin-left
的計算精度導致的。所以為避免效果誤差,不建議使用該方法。
解決方案 4:letter-spacing 消除文字間距離
同方案 2、方案 3,我們還可以通過letter-spacing
改變行內元素之間空隙的大小,將letter-spacing
設為-0.333333em
即可。但是與font-size
一樣,改變letter-spacing
時會改變內部子元素的間隙,需要在子元素內手動進行矯正。
示例圖與程式碼如下:

HTML:
<div class="Resolve Resolve4"> <span>左側行內元素</span> <span>右側行內元素</span> </div>
CSS:
.Resolve4 { letter-spacing: -0.333333em; } .Resolve4 span { letter-spacing: 0; }
解決方案 5:HTML 注釋(推薦使用)
除了調整 css 樣式之外,我們可以使用 html 注釋來抵消空格,這種情況下不用額外進行 css 處理。此外筆者覺得還有一個好處,可以加上文字注釋,告知為什麼會加入注釋。
推薦使用該方式,能夠有效保持程式碼整齊,並且不用額外添加 css 樣式。
示例圖與程式碼如下:

HTML:
<div class="Resolve Resolve5"> <span>左側行內元素</span><!-- 消除行內元素換行導致的空白 --><span>右側行內元素</span> </div>
總結
以上就是消除行內元素間 HTML 空白的 5 種方案,其中第三第四種不太推薦使用,因為空白符的寬度跟字體相關,需要按照使用的字體進行調整,且計算有誤差。另外幾種方法不會有這個問題。
最後,雖然這些方案都不是很理想,但有時候在特定的情況下,我們往往需要其中之一作為解決方案。