聊一聊莫名出现的间距
发布于 3 年前 作者 guiying81 3372 次浏览 来自 分享

这是一个demo网页的截图

代码如下

<div class="container">
  <div class="item">123</div><div class="item">456</div>
</div>

我们希望他们能在一行展示并拥有高度属性,于是我们有了下面的样式代码

<style>
  .container {
    display: block;
  }
  .item  {
    display: inline-block;
    height: 30px;
    line-height: 30px;
    border: 1px solid;
  }
</style>

可是,有一天,这个页面变成了这样

为什么?经过检查,发现网页的代码变了

<div class="container">
  <div class="item">123</div>
  <div class="item">456</div>
</div>

那么,我们只是加了个回车,为什么他们之间会有间距?

因为在inline-block的布局方式下,两个item之间的回车、空格,也会被视为inline的元素,占据一个空格的位置。但是,在我们的代码编写过程中,优化代码、增加缩进与换行是很正常的事情,那如何避免呢?
其实有一种比较黑科技的做法。

  .container {
    display: block;
    font-size: 0;
  }
  .item  {
    display: inline-block;
    height: 30px;
    line-height: 30px;
    border: 1px solid;
    font-size: 12px;
  }
</style>


成功了,原理也很简单,将整个container的字体大小设置成0,那中间的空格,也本设置成了0,自然不会再占位,但代价就是内部的item需要单独设置字体大小。
至于是否有一劳永逸的解决办法?
以前我们使用float + BFC 或者 float + clearfix,现在我们使用flex布局。

为什么我会聊这个问题

聊到这个古老的inline-block的问题,其实是因为,之前在做小程序的时候有类似下面一段代码,表现也挺好。

  <view>
    今天<text>天气</text>真好
  </view>


但是有人有强迫症,喜欢格式化代码,于是代码变成了下面这样

  <view>
    今天
    <text>天气</text>
    真好
  </view>

乍看一下没问题,但看一下页面

???
眼熟的问题,但是,这个问题是有终极解决方案的。

  <view>
    <text>今天</text>
    <text>天气</text>
    <text>真好</text>
  </view>

永远不要让你的文字裸奔,因为你永远不知道会不会有一个有强迫症的同事,帮你优化代码格式。

回到顶部