为什么会有幽灵空白元素,display:inline/inline-block会出现空隙的原因
display: inline-block 样式会在一些情况下产生间隙,这通常是由于元素之间的空白符或换行符所致。具体来说,以下情况可能导致 display: inline-block 元素之间出现间隙:
-
HTML 源代码中的换行符和空格:如果
display: inline-block元素之间有换行符或空格,浏览器会将这些空白符解释为文字空间,从而在布局中产生间隙。<div class="inline-block-element"></div> <div class="inline-block-element"></div>上面的例子中,如果两个
<div>元素之间有换行符或空格,就会在页面上显示间隙。 -
字体大小不为 0 的父元素:如果父元素的字体大小不为 0(即父元素内包含文字),那么子元素之间也可能出现间隙。这是因为行内块级元素会受到父元素文字基线的影响,导致垂直方向上出现间隙。
要解决这些间隙问题,可以采取以下方法:
- 去除 HTML 源代码中元素之间的换行符和空格,或者使用 HTML 注释将它们包裹起来,以避免间隙产生。
- 将父元素的字体大小设置为 0,或者使用其他方法来消除父元素对子元素布局的影响。
例子
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>幽灵空白元素</title>
</head>
<style>
.parent {
background: red;
// font-size: 0;
// line-height: 0;
}
img {
// vertical-align: middle;
}
</style>
<body>
<div class="parent">
<img
src="https://copyright.bdstatic.com/vcg/creative/cc9c744cf9f7c864889c563cbdeddce6.jpg"
width="300"
height="200"
/>
</div>
</body>
</html>
粘贴代码运行后的结果

图片底部存在一个间隙,明明页面就只有一个div和img。
原因是行内/行内块级元素会受到父元素文字基线的影响,导致垂直方向上出现间隙。
解决办法
- 父元素
font-size设置为0,或者line-height为0。 - 子元素的
vertical-align设置为非baseline的值,比如middle。
vertical-algin仅inline/inline-block生效
在 CSS 中,vertical-align 属性用于控制行内元素或行内块元素在垂直方向上的对齐方式。但是,这个属性仅对行内元素(inline elements)和行内块元素(inline-block elements)生效。对于其他类型的元素(比如块级元素),设置 vertical-align 是不会产生任何效果的。
这是因为块级元素在垂直方向上是按照其父元素的 line-height 属性来对齐的,而不是通过 vertical-align 属性来控制的。vertical-align 属性主要用于调整行内元素在其所在行的垂直对齐方式,比如使得图片与文本的基线对齐,或者垂直居中等。

浙公网安备 33010602011771号