两个span标签的间距问题

一、前言

  平时在实现ui的设计稿的时候会遇见一些小问题,比如莫名其妙的间距,明明没有加margin和padding,但是就是会出现间距,这就是两个span标签的间距问题。我们今天就这个问题进行分析。

二、现象描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <span>hello</span>
    <span>world</span>
    <span>helloworld</span>
</body>
</html>

  我们看这样一段代码,他展示出来的效果是这样的
在这里插入图片描述
  可以看到,我们的span上没有应用任何样式,但是仍然出现了间距。
  又或者是下面这段代码;

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .inline-block {
            display: inline-block;
            width: 100px;
            height: 100px;
            border: 1px solid black;
        }
    </style>
</head>
<body>
    <div class="inline-block"></div>
    <div class="inline-block"></div>
</body>
</html>

  他的效果是这样的:
在这里插入图片描述
  我们也可以很明显的看到,两个div直接出现了间隙。那么,这个间隙到底是怎么出现的呢?

三、原因

  导致这个现象出现的原因很简单,我们知道多个空格或者回车浏览器都会解析成空格,其实,我们span与span之间敲的回车,就被解析成了空格。所以,那一点间隙,其实就是这个空格,如果不理解,看下面这段代码就能理解了。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <span>hello world</span>
    <br>
    <span>hello
        world
    </span>
    <br>
    <span>hello</span>
    <span>world</span>
</body>
</html>

  他的效果是这样的;
在这里插入图片描述
  怎么样,是不是一模一样,这下你能理解为什么我们没有加margin和padding,没有添加任何样式,他们之间也存在间距了吧?

四、解决方案

  既然知道了原因,那这个问题就很好解决了。

  • 代码中不要写空格:
    既然这个问题是空格导致的,那我们不要空格或者回车,这个问题就解决了
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <span>hello</span><span>world</span>
        <br>
        <span>hello</span
        ><span>world</span>
    </body>
    </html>
    
      像上面这种写法,展现出来的效果就是:
    在这里插入图片描述
      这样两个单词之间的间距就没有啦,不过这种写法会导致我们的代码不整洁,对于有强迫症的小伙伴来说是接受不了的,我们可以用其他的方法来解决这个问题。
  • 通过css去消除间距
      既然它出现了间距,那我们啥也不管,把它弄掉就行了,我们可以用样式把间距去掉,比如用margin/word-spacing/letter-spacing等:
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body=>
        <span>hello</span>
        <span style="margin-left: -5px;">world</span>
        <div style="word-spacing: -40px;">
            <span>hello</span>
            <span>world</span>
        </div>
    </body>
    </html>
    
      效果是下面这样的:
    在这里插入图片描述
      可以看到这样也能消除间距,但是如果使用margin,不能保证在任何情况下两个单词都恰好没有间距。而自己在chrome中测试发现,word-spacing的负值足够大的情况下,不会将两个单词重叠,只会紧紧贴住。所以设置一个负值较大的word-spacing看起来是一个比较好的方法,但是不清楚在其他浏览器中是否和chrome保持一致。
  • 通过设置font-size消除间距
      这种方法是我平时喜欢用的,既然空格占了位置,那么我们把font-size设置为0,空格就不会占位置了,同时再单独设置子元素的字体大小,就能干掉这个间隙了。
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <div style="font-size: 0;">
            <span style="font-size: 20px;">hello</span>
            <span style="font-size: 20px">world</span>
        </div>
    </body>
    </html>
    
      他的效果是这样的:
    在这里插入图片描述

五、结语

  总的来说,肯定有很多方法可以去掉这个空隙,但是最普遍的集中方法就是这几种了。同时,只要我们知道了这个空隙为何而来,我们就能对症下药,找到解决问题的办法。

发布了24 篇原创文章 · 获赞 46 · 访问量 5146

猜你喜欢

转载自blog.csdn.net/qq_38164763/article/details/104332683