图片有空隙_图片下方为什么会有空隙,这个怎么解决?

本文探讨了图片下方出现空隙的原因,涉及行内框盒子模型的content-area、inline boxes、line boxes和containing box。文章详细解释了图片为什么会有空隙,并提供了消除这种空隙的解决方案,包括图片块状化和调整行高等方法。
摘要由CSDN通过智能技术生成
c238183fc12ec63743499d5f5929d53a.png 作者 |  前端小少女 链接 |  https://www.jianshu.com/p/7b7ae3cc2a72 我们在实际开发的时候,是不是会遇到如下图这个情况?这个情况应该怎么解决呢? 0f05f2108e1d7c89b6479bf9243addd5.png 一个div里除了这张图片什么都没有,为什么会有这个空隙呢? 在看这个问题之前,我们需要了解关于行内框盒子模型的相关概念,理解了这些概念,自然就知道问题的答案了。
文章结构:
  • 行内框盒子模型

  1. content-area

  2. inline boxes

  3. line boxes

  4. containing box

图片下方为什么会有空隙?

怎样去掉这个空隙?


一、行内框盒子模型

首先分别来讲四个概念:内容区域 content-area 、内联盒子 inline boxes 、行框盒子 line boxes 、包含盒子 containing box

1、content-area

content-area是一种围绕文字的看不见的盒子,其大小与font-size的大小有关,与line-height无关。

2、inline boxes

inline-boxes使文字排成一行,而非成块显示。如就是一个内联盒子。如果没有内联标签,则属于“匿名内联盒子”,如下图: c122da2d994020eb2127ad27df321a00.png

3、line boxes

每一行都是一个行框盒子,每个行框盒子都是由一个个内联盒子组成。

4、containing box

包含盒子由一个个行框盒子组成。 一张图来说明上述概念: d1c4403280ba3f679371d1280ac529e8.png 那么,每个line boxes的高度是怎样确定的呢? 5f83dfa5a75fe1604e7eec3d2a8969b6.png 由图可知:内容区域高度 + 行间距 = 行高。行高决定内联盒子的高度,行间距可大可小(甚至可为负值);当行间距为负值时,说明行高的高度小于内容区域高度,就会使上下文字发生重叠

二、图片下方为什么会有空隙?

我们举一个简单的例子,代码如下:
// html  
![](http://upload-images.jianshu.io/upload_images/5617133-9c65cc36e54f5ff7.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) xxyy
// css.wrapper{  border:1px solid;  width:500px;  margin:10px auto;  font-size:30px;}.wrapper>img{  width:300px;}
结果: 3b23165cf4cf5e40a63b14685eff6733.png 上图红色的那根线就是文字的基线,字母 x 的底部刚好在基线上(基线:小写字母 x 的底部)。line boxes中的vertical-align默认基线对齐,而图片作为其中的一个inline boxes元素,同样也是基线对齐,所以会出现上图的结果。 现在我们把上图的 ‘xxyy’ 去掉,结果如下: 0f05f2108e1d7c89b6479bf9243addd5.png 这个空隙仍然存在。我们可以理解为在图片前面或者后面有一个看不见的文本节点与图片基线对齐,所以不管div中是否有文本,图片下面总是有一个空隙。
总结:图片下面的空隙是由于图片默认基线对齐造成的。

三、怎样去掉这个空隙?

通过上面的内容,我们知道:图片下面的空隙是由于图片默认基线对齐造成的。 想要去掉这个空隙,最简单的方法就是改变图片的对齐方式。修改img部分CSS如下:
.wrapper>img{  width:300px;  vertical-align:bottom;}
结果: def2bc449bb7dc187052c8c70d287a2b.png 咦?为什么要设置vertical-align为bottom,而不设置为top/middle呢? 这都是根据自己的应用场景来说的,现在我们在父div里添加一行文字,如果设置“vertical-align:bottom”: efefdc8971932828a70ec31d9ee0b230.png 设置“vertical-align:top”: 40d5a182d639929897aa45c1c14878c5.png 设置“vertical-align:middle”: 18395316543f66e71d4c8b2da19c4ef0.png 还有两种方法可以去掉图片下面的间隙:
  • 图片块状化(块状元素不存在基线对齐):
img{    display:block;}
  • 行高足够小,使基线位置上移:
.parent{    line-height:0;}
每种方法都有不同的应用场景,大家可以按需选择。
终于写完了,一旦涉及到line-height和vertical-align,CSS就会变得很复杂。这一部分目前只能理解这么多了,如有错误,烦请指正! 参考资料: 1、张鑫旭老师 CSS深入理解之line-height 2、 深入理解 CSS:字体度量、line-height 和 vertical-align

1743685ad354e4d93d101cc1f92f0434.png

7309d9fc472afdd016710f2df8842c03.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值