inline-block 元素之间间隙清除的几种方法

Posted zichi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了inline-block 元素之间间隙清除的几种方法相关的知识,希望对你有一定的参考价值。

两个 inline-block 元素之间会有间隙(事实上,除了 inline-block 元素,两个 inline 元素之间也是有间隙的),究其根本,其实就是 html 元素换行导致(可以尝试下,换行和元素之间加个空格,或者多个空格,结果一样,最后都是一个空格)。如何清除这个间隙呢?

方法 0 - 移除空格

我们知道,产生间隙的原因,是因为元素之间有空格(换行,tabs,多个空格等,最后的表现都是一个空格),那么理论上,去掉这个空格,就不会有间隙了。

如果 html 是在后端模板中,那么有些模板可能就自带了去除 html 元素间隙的功能,比如 php 模板 twig,自带 spaceless 标签,而一些 html minimize 的工具,也会去除 html 之间的空格

如果不符合上述情况,也没有关系,我们手动去除:

<!-- 方法一 -->
<div>
one</div><div>
two</div><div>
three</div>

<!-- 方法二 -->
<div>one</div
><div>two</div
><div>three</div>

<!-- 方法三 -->
<div>one</div><!--
--><div>two</div><!--
--><div>three</div>

虽然生效了,但是不太优雅,如果有多个标签,这么写 html 太累了(当然,如果 html 是模版生成的,一般会有循环方法,也还好,推荐第三种 comments 方法,可读性相对强点)

方法二 - 负值 margin

想象一下,两个元素之间有间隙,给元素加上负值的 margin,是不是就能消除间隙了?答案是肯定的,但是这个负值,到底是多少,有待商榷,因为这个间隙,和 inline-block 父元素的 font-size 大小有关,跟页面所用字体有关,可能还跟浏览器有关(这点我并未探索)

nav a {
  display: inline-block;
  margin-right: -4px;
}

所以这个方法并不好

方法三 - 父元素 font-size 设置为 0

父元素设置 font-size 为 0,然后子元素(即 inline-block)的元素再单独设置 font-size

据说安卓机器可能会有问题,可以看下最下面的前两个链接中的此法说明

方法四 - 改用 float 布局

方法五 - 改用 flex 布局

方法六 - white-space-collapsing:discard

css3 草案 white-space-collapsing:discard,详见 这里,截至目前(2018/10/21),还并未有浏览器实现


参考:

以上是关于inline-block 元素之间间隙清除的几种方法的主要内容,如果未能解决你的问题,请参考以下文章

inline-block清除空隙2

去除inline-block间隙的几种方法

清除display:inline-block元素换行符间隙font-size:0;

清除浮动的几种方法

去除inline-block元素之间间隙和换行产生的行于行间隙的最佳方法

行内元素,display:inline-block元素,元素间间隙问题的解决