图片空白间隙是怎么出现以及解决方案。
图片空白间隙问题
图片空白间隙复现
图片空白问题很常见,在设置 img 元素 后,在排列其他元素时,会在两者中间形成一个小空白间隙。一般情况,我们可以将其看作元素间的分隔。可是我们并没有在这两个元素直接设置 margin 属性,那么我们想解决这个图片多出来的空白间隙,需要如何解决?

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>图片空白问题</title>
    <style>
      body {
        margin: 0;
        padding: 0;
        background-color: lightblue;
      }
      div {
        padding: 5px;
        background-color: chocolate;
        width: 400px;
      }
    </style>
  </head>
  <body>
    <img
      src="https://cdn.nlark.com/yuque/0/2020/png/656137/1599188104271-avatar/01d4de2d-045c-4384-adbd-91bbdac7926c.png?x-oss-process=image%2Fresize%2Cm_fill%2Cw_56%2Ch_56%2Fformat%2Cpng"
    />
    <div>
      <p>
        Lorem ipsum dolor sit amet consectetur adipisicing elit. Omnis,
        corporis.
      </p>
    </div>
  </body>
</html>
空白间隙是怎么产生的
其实这个跟 CSS 参考线有关。在 CSS 字体参考线 中,我们字体一般都是以 基线 Baseline 为对齐来着,可图片的 display是 inline,这样的inline图片与块盒的基线是不同的。图片的基线位置位于下外边距。而img 元素的父元素(body 元素)是一个 块盒 block,图片的基线与块盒的基线并没有对齐,两者错开而导致出现空白间隙。
图片空白间隙解决方案
- 调整垂直居中方式 vertical-align,可以是 bottom、middle、top
 
img {
  vertical-align: bottom;
}
- img 元素设置为 块盒,图片为块盒与 父元素块盒 的基线一致就不会产生空白间隙了。
 
img {
  display: block;
}
- img 元素 包裹一个父元素div 元素,并修改行高 line-height 为 0
 
.img-parent {
  line-height: 0px;
}
修改line-height其实这是变相 压缩掉 该父元素 块盒的间隙,line-height是设置参考线之外上下间隙的高度,直接将line-height设置0,这样父元素没有多余的间隙空间,就不会形成图片空白间隙了。 -- CSS 字体参考线
- img 元素包裹一个父元素div 元素,并修改 字体 font-size 为 0
 
.img-parent {
  font-size: 0px;
}
修改font-size其实也是修改line-height,元素的 line-height 计算像素值 = font-size * line-height。该父元素 div不管是继承自浏览器还是其他父级元素的line-height的,与 字体 font-size=0计算后都是 0。 -- line-height 的应用
图片失效时的宽高问题
如果 img 元素的图片链接无效,img 元素会默认给个图片无效的图片标识。但是这样之前原本图片的宽高失效后会对周边元素的布局造成影响。那么我们就需要给 img 元素设置宽高。可是,img 元素的 display 为 inline,这样是无法设置宽高数值的。所以需要将 img 元素设置为行块盒即可。
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>图片失效时的宽高问题</title>
    <style>
      img {
        width: 200px;
        height: 200px;
        border: 2px solid;
        display: inline-block;
      }
    </style>
  </head>
  <body>
    <img src="" alt="失效的图片" />
  </body>
</html>
