83.display:inline-block 什么時候會顯示間隙?


display:inline-block是一種布局方法,它相比於與浮動、定位最大的不同就是其沒有父元素的匿名包裹特性,這使得display:inline-block屬性的使用非常自由,可與文字,圖片混排,可內嵌block屬性元素,可以置身於inline水平的元素中。

在CSS布局中,如果我們想要將一些元素在同一行顯示,其中的一種方法就是把要同行顯示的元素設置display屬性為inline-block。但是你會發現這些同行顯示的inline-block元素之間經常會出現一定的空隙,這就是“換行符/空格間隙問題”。

  1.  
    <!DOCTYPE html>
  2.  
    <html>
  3.  
    <head>
  4.  
    <title>display:inline-block元素之間空隙的產生原因和解決辦法</title>
  5.  
    <style type="text/css">
  6.  
    .parent .child {
  7.  
    display: inline-block;
  8.  
    background-color: #fdfd04;
  9.  
    width: 100px;
  10.  
    height: 100px;
  11.  
    }
  12.  
    </style>
  13.  
    </head>
  14.  
    <body>
  15.  
    <div class="parent">
  16.  
    <div class="child">child1</div>
  17.  
    <div class="child">child2</div>
  18.  
    </div>
  19.  
    </body>
  20.  
    </html>

頁面效果:注意被設置display:inline-block的元素之間的間隙

 

空隙產生的原因

元素被當成行內元素排版的時候,元素之間的空白符(空格、回車換行等)都會被瀏覽器處理,根據white-space的處理方式(默認是normal,合並多余空白),原來HTML代碼中的回車換行被轉成一個空白符,在字體不為0的情況下,空白符占據一定寬度,所以inline-block的元素之間就出現了空隙。這些元素之間的間距會隨着字體的大小而變化,當行內元素font-size:16px時,間距為8px。

解決空隙的辦法

辦法一:解決元素之間的空白符

  1.  
    <!-- 將前一個標簽結束符和后一個標簽開始符寫在同一行 -->
  2.  
    <div class="parent">
  3.  
    <div class="child">child1
  4.  
    </div><div class="child">child2
  5.  
    </div>
  6.  
    </div>
  7.  
    <!-- 將所有子元素寫在同一行 -->
  8.  
    <div class="parent">
  9.  
    <div class="child">child1</div><div class="child">child2</div>
  10.  
    </div>

缺點:代碼的可讀性變差。

方法二:為父元素中設置font-size: 0,在子元素上重置正確的font-size

  1.  
    <div class="parent" style="font-size: 0px">
  2.  
    <div class="child" style="font-size: 16px">child1</div>
  3.  
    <div class="child" style="font-size: 16px">child2</div>
  4.  
    </div>

缺點:inline-block元素必須設定字體,不然行內元素中的字體不會顯示。 增加了代碼量。

方法三:為inline-block元素添加樣式float:left

缺點:float布局會有高度塌陷問題,點我獲取解決辦法

方法四:設置子元素margin值為負數

  1.  
    .parent .child + .child {
  2.  
    margin-left: -2px
  3.  
    }

缺點:元素之間間距的大小與上下文字體大小相關;並且同一大小的字體,元素之間的間距在不同瀏覽器下是不一樣的,如:font-size:16px時,Chrome下元素之間的間距為8px,而Firefox下元素之間的間距為4px。所以不同瀏覽器下margin-right的負值是不一樣的,因此這個方法不通用。

注意:當marigin-right使用相對單位em來表示時,Chrome下可以正常去除間距,而Firefox下元素之間有重疊。

方法五:最優解在這,設置父元素,display:table和word-spacing

  1.  
    .parent{
  2.  
    display: table;
  3.  
    word-spacing:-1em; /*兼容其他瀏覽器,題主還未驗證*/
  4.  
    }

點我了解,幾個關於diaplay:table布局神器的絕妙應用場景 

解決空隙問題之后的頁面效果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM