img元素中图片间垂直间距和水平间距产生原因?

水平间距产生的原因

首先要知道的是 img元素标签是行内元素,它不会换行,除非一行放不下了,再另起一行。当界面缩放到能放下后,又自动变成一行了,所以并不是真正意思的换行。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>图片间距产出的原因</title>
	</head>
	<body>
		<img src="img/1.jpg"><img src="img/2.jpg"><img src="img/3.jpg">
	</body>
</html>

按住Ctrl键滚动鼠标的中间的滑轮,实现界面的缩放。
在这里插入图片描述
当紧挨着的三个img标签通过回车使源代码分别处于三行时:
在这里插入图片描述

还有如下的情况:
在这里插入图片描述

在这里插入图片描述

解决方式

所以相邻图片水平方向上产生的间距,和行高及行距已经基线,顶线,中线,底线 是无关的。消除相邻图片之间的空白间距就避免让img标签元素之间产生空格或回车操作,应该无空格的都写到同一行内。

在这里插入图片描述
效果如下:无论界面放大或缩小,第三张图片始终都在第二行。
在这里插入图片描述
总结:
回车操作:表示源代码的换行,浏览器在渲染时会忽略掉,并转为一个空格;而br标签,浏览器在渲染解析时才会按换行进行操作。

当源代码中的img标签紧挨着写到同一行时:
在这里插入图片描述
在这里插入图片描述

竖直间距产生的原因

通过上面的动画演示,也可以看到,当第三张图片处于第二行,可以看到上下图片直接存在空白缝隙?这个是什么原因产生的呢?

以另一个例子来演示:
在这里插入图片描述
界面效果如下:
在这里插入图片描述
如上图所示, 将一张图片放入一个未设宽高的盒子(div)里, 盒子(div)的高度由图片撑起, 但是底部仍有空隙。
这是因为浏览器文字类型排版存在用于对齐的基线(baseline), 默认为基线对齐
在这里插入图片描述
上图即为文字基线
在这里插入图片描述
界面效果如下:
在这里插入图片描述
图片默认会与基线对齐
在这里插入图片描述
上方图片上打马赛克的文字写的内容有误,故打上马赛克了。

可以看到上图中的,文字并没有使图片下方的缝隙变大,这是因为图片提前预留的缝隙就是按浏览器默认字号16px(谷歌浏览器),默认缝隙大小是16px文字的基线和底线之间的距离。如果把字号调大,可以看到图片下方的缝隙会变大。
在这里插入图片描述
因为img也是行内元素,它会假设其左右侧会有默认按基线对齐方式显示的文字。其实基线和底线是文字排版时才存在的,对图片来说不存在基线或者底线。也就是顶线,中线,基线,底线 并不是图片的固有属性。而是文字的属性。但是在img为行内元素时,因为其周围可能存在文字,所以在CSS样式中img元素可以通过vertical-align属性来控制其相对于周围元素(特别是内联元素或文本)的垂直对齐方式。

在讨论img元素的基线(baseline)和底线(bottom line)时,我们需要理解这些概念通常是在字体排印(typography)的上下文中使用的
img元素并不直接参与文本的基线对齐。不过,在CSS中,img元素可以通过vertical-align属性来控制其相对于周围元素(特别是内联元素或文本)的垂直对齐方式。

vertical-align用于设置垂直对齐,仅对行内块(img, input,td)及行内元素有效

vertical-align的属性值有:
1.top :顶部对齐
在这里插入图片描述
加粗样式
2.bottom: 底部对齐
在这里插入图片描述
在这里插入图片描述
3.middle: 居中对齐
在这里插入图片描述
在这里插入图片描述
4.baseline:基线对齐 (默认)
在这里插入图片描述
在这里插入图片描述

解决方式

通过以上可以看到 当给img标签的vertical-align属性设置为 top、bottom、middle都能解决图片下方留白问题。
或者将img元素的display属性设置为block也可以解决图片下方留白问题,但是这样img就独占一行了,不能和文本在同一行了。
如需图片和文字在一个盒子里同时居中对齐, 需要同时设置vertical-align:middle和line-height。

vertical-align针对的是内联元素左右的文本和内联元素自己的垂直对齐方式,块级无效。

使用场景

1.文本框和表单按钮无法对齐

2.input和img无法对齐问题

3.div中的文本框, 文本框无法贴顶问题

4.div不设高度由img标签撑开,此时img标签下面会存在额外间隙问题

5.使用line-height让img标签垂直居中问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值