css使用inline-block时去除间隙

问题描述

属性为display: inline-block的元素之间,换行显示或用空格分隔的情况下会产生间距。

<ul>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
</ul>
ul li {
  display: inline-block;
}

这种间距会影响到我们布局,如何去除这种间距?

经典解决方案

使用html解决,将inline-block元素写在一行里,或让标签首尾不换行

<!-- 将inline-block元素写在一行 -->
<ul>
  <li></li><li></li><li></li><li></li>
</ul>
<!-- 标签首尾不换行 -->
<ul>
  <li></li><li></li><li></li><li></li>
</ul>

缺点:影响代码美观与格式化

使用css解决,设置父元素font-size为0,或设置子元素margin或letter-spacing或word-spacing属性为负值

/* 设置font-size */
ul {
  font-size: 0;
}
ul li {
  font-size: 14px;
}
/* 设置margin或letter-spacing或word-spacing */
ul li {
  margin: -1;
}
ul li {
  letter-spacing: -1;
}
ul li {
  word-spacing: -1;
}

缺点:跨浏览器兼容不好

终级解决方案

在父元素上使用display: flex

ul {
  display: flex;
}
ul li {
  display: inline-block;
}