# 如何解决inline-block的间隔问题

# 需求

在我们日常开发当中,我们经常会遇到将一些元素排列成一行的需求。这样的需求实现起来却是不难,我们可以利用浮动,利用flex布局都可以实现,但是今天我们要用inline-block的方法。

<div class="box">看这里➡️</div>
<div class="box">⬅️看这里➡️</div>
<div class="box">⬅️看这里</div>
.box{
    display: inline-block;
    width: 100px;
    height: 50px;
    background-color: #ddd;
    text-align: center;
    line-height: 50px;
}

# 现象

我们就得到了这样的效果:

我们不难发现,我们并没有使用margin值。但是它们之间确有间隔。很显然,这不是我们想要的结果,那是为什么导致这样呢?如何解决它呢?

# 原因

其实,html的原因。我们回顾一下这段代码:

<div class="box">看这里➡️</div>
<div class="box">⬅️看这里➡️</div>
<div class="box">⬅️看这里</div>

我们不仅看到元素节点,属性节点还有文本节点,问题就是处在文本节点的渲染导致3px(chrome)的间隔。那如何解决它?

# 解决办法

# 方法一、删除空白节点

同样的方法,有五种写法

<div class="box">看这里➡️</div><div class="box">⬅️看这里➡️</div><div class="box">⬅️看这里</div>

<div class="box">看这里➡️</div
><div class="box">⬅️看这里➡️</div
><div class="box">⬅️看这里</div>

或者

<div class="box">看这里➡️</div
><div class="box">⬅️看这里➡️</div
><div class="box">⬅️看这里</div>

亦或者

<div class="box">
看这里➡️</div><div class="box">⬅️看这里➡️
</div><div class="box">⬅️看这里</div>

或者添加 注释标签

<div class="box">看这里➡️</div><!--
--><div class="box">⬅️看这里➡️</div><!--
--><div class="box">⬅️看这里</div>

以上的这些方法,无一列外破坏了代码的可读性。

# 方法二、标签自动补全

我这里插一句。我有个有毒的面试题,拿出来跟大家分享一下。请问a标签嵌套a标签。

    <a href="https://shenzhiyong.com.cn/">扫码关注!<a href="https://github.com/szy1000">沈志勇说</a></a>

请问点击「扫码关注」和「沈志勇说」分别跳转到哪里?

其实在浏览器会自己帮你解析错误帮你解析成正确的代码

<a href="https://shenzhiyong.com.cn/">扫码关注!</a>
<a href="https://github.com/szy1000">沈志勇说</a>

其实,上面的这个面试题就是我自己在项目中犯的错!

我们回到主题:既然a标签能自己校正,那我们故意偷懒呢?

<a class="box">看这里➡️
<a class="box">⬅️看这里➡️
<a class="box">⬅️看这里

很显然是可以的,但是div是不行的。我亲自测试过!不过你在项目不要这样写,免的被喷死!

# 方法三、负的marigin值

.box {
    margin: -3px; /*左右缩小3px*/
    display: inline-block;
    width: 100px;
    height: 50px;
    background-color: #ddd;
    text-align: center;
    line-height: 50px;
}

这样的方式,可以解决chrome下面的问题。但是不建议使用。因为在某些游览器上面,这个文本节点可能设置成4px的间隔。因为解决问题,引入了新的问题,那就尴尬!

# 方法四、 font-size: 0

既然是文本节点导致的,那我们就把文本节点设置成0不就ok?顺着这个思路,我们这些写: 我们先给div加一个父级节点

<div class="wrapper">
    <div class="box">看这里➡️</div>
    <div class="box">⬅️看这里➡️</div>
    <div class="box">⬅️看这里</div>
</div>
.wrapper{
	font-size: 0;
}
.box {
    font-size: 14px;
    display: inline-block;
    width: 100px;
    height: 50px;
    background-color: #ddd;
    text-align: center;
    line-height: 50px;
}

主要: 因为font-size是默认继承的属性。所以父级给了0,子级要重新设置font-size: 14px。

# 方法五、 补充 letter-spacing和word-spacing

后来我看到这样2个方法,其实这种方法跟margin为负值的相同。还有比较生僻的方法就不一一介绍了。

关注公众号
组队学习,一同成长
扫码添加好友
备注 加群学习