提问人:Misha Moroshko 提问时间:4/27/2011 最后编辑:web-tikiMisha Moroshko 更新时间:5/26/2022 访问量:230432
div 内的图像在图像下方有额外的空间
Image inside div has extra space below the image
问:
为什么在下面的代码中,的高度大于 的高度?图像下方有一个间隙,但似乎不是填充/边距。div
img
图片下方的间隙或额外空间是什么?
#wrapper {
border: 1px solid red;
width:200px;
}
img {
width:200px;
}
<div id="wrapper">
<img src="http://i.imgur.com/RECDV24.jpg" />
</div>
答:
默认情况下,图像以内联方式呈现,就像一个字母一样,因此它与 a、b、c 和 d 位于同一行上。
该行下方有空间用于您在 g、j、p 和 q 等字母上找到的降序。
您可以:
- 调整图像的
垂直对齐
方式以将其放置在其他位置(例如 )或middle
- 更改 使其不是内联的。
display
div {
border: solid black 1px;
margin-bottom: 10px;
}
#align-middle img {
vertical-align: middle;
}
#align-base img {
vertical-align: bottom;
}
#display img {
display: block;
}
<div id="default">
<h1>Default</h1>
The quick brown fox jumps over the lazy dog <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/f/f2/VangoghStarry-night2.jpg/300px-VangoghStarry-night2.jpg" alt="">
</div>
<div id="align-middle">
<h1>vertical-align: middle</h1>
The quick brown fox jumps over the lazy dog <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/f/f2/VangoghStarry-night2.jpg/300px-VangoghStarry-night2.jpg" alt=""> </div>
<div id="align-base">
<h1>vertical-align: bottom</h1>
The quick brown fox jumps over the lazy dog <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/f/f2/VangoghStarry-night2.jpg/300px-VangoghStarry-night2.jpg" alt=""> </div>
<div id="display">
<h1>display: block</h1>
The quick brown fox jumps over the lazy dog <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/f/f2/VangoghStarry-night2.jpg/300px-VangoghStarry-night2.jpg" alt="">
</div>
所包含的图像是公共领域,来源于维基共享资源
评论
line-height
line-height
vertical-align: bottom
middle
这篇博文中建议的另一个选项是将图像的样式设置为style="display: block;"
评论
inline-block
inline-block
text-align:center
还可以取消父项的行高:
#wrapper {
line-height: 0;
}
所有修复:http://jsfiddle.net/FaPFv/
评论
我刚刚添加到div,它起作用了float:left
评论
float:left
display:block
我用过,它对我来说效果很好。line-height:0
评论
<BR>
我发现它使用 display:block 效果很好;在图像上和 vertical-align:top;在文本上。
.imagebox {
width:200px;
float:left;
height:88px;
position:relative;
background-color: #999;
}
.container {
width:600px;
height:176px;
background-color: #666;
position:relative;
overflow:hidden;
}
.text {
color: #000;
font-size: 11px;
font-family: robotomeduim, sans-serif;
vertical-align:top;
}
.imagebox img{ display:block;}
<div class="container">
<div class="imagebox">
<img src="http://machdiamonds.com/n69xvs.jpg" /> <span class="text">Image title</span>
</div>
<div class="imagebox">
<img src="http://machdiamonds.com/n69xvs.jpg" /> <span class="text">Image title</span>
</div>
<div class="imagebox">
<img src="http://machdiamonds.com/n69xvs.jpg" /> <span class="text">Image title</span>
</div>
<div class="imagebox">
<img src="http://machdiamonds.com/n69xvs.jpg" /> <span class="text">Image title</span>
</div>
<div class="imagebox">
<img src="http://machdiamonds.com/n69xvs.jpg" /> <span class="text">Image title</span>
</div>
<div class="imagebox">
<img src="http://machdiamonds.com/n69xvs.jpg" /> <span class="text">Image title</span>
</div>
</div>
或者你可以编辑代码 JS FIDDLE
快速修复:
要移除图片下方的间隙,您可以:
- 将图像的 vertical-align 属性设置为 或
vertical-align: bottom;
vertical-align: top;
vertical-align: middle;
- 将图像的 display 属性设置为
display:block;
有关现场演示,请参阅以下代码:
#vAlign img {
vertical-align :bottom;
}
#block img{
display:block;
}
div {border: 1px solid red;width:100px;}
img {width:100px;}
<p>No fix:</p>
<div><img src="http://i.imgur.com/RECDV24.jpg" /></div>
<p>With vertical-align:bottom; on image:</p>
<div id="vAlign"><img src="http://i.imgur.com/RECDV24.jpg" /></div>
<p>With display:block; on image:</p>
<div id="block"><img src="http://i.imgur.com/RECDV24.jpg" /></div>
解释:为什么图片下面有缝隙?
图像下方的间隙或额外空间不是错误或问题,而是默认行为。根本原因是图像被替换元素(参见 MDN 替换元素)。这使它们能够“像图像一样行事”,并具有自己的内在尺寸、纵横比。
浏览器计算它们的显示属性,但它们赋予它们一种特殊的行为,使它们更接近元素(因为您可以垂直对齐它们,为它们提供高度、上/下边距和填充、转换......inline
inline-block
这也意味着:
<img>
没有基线,因此当图像以内联格式使用时 带有 vertical-align: baseline 的上下文,图像的底部将是 放置在文本基线上。
(来源:MDN,强调我的)
由于浏览器默认将 vertical-align 属性计算为 baseline,因此这是默认行为。下图显示了基线在文本上的位置:
(图片来源)
基线对齐的元素需要为延伸到基线以下的下降器留出空间(如 ),如上图所示。在此配置中,图像的底部在基线上对齐,如以下示例所示:j, p, g ...
div{border:1px solid red;font-size:30px;}
img{width:100px;height:auto;}
<div>
<img src="http://i.imgur.com/RECDV24.jpg" />jpq are letters with descender
</div>
这就是为什么标记的默认行为会在其容器底部创建一个间隙,以及为什么更改 vertical-align 属性或 display 属性会将其删除,如以下演示所示:<img>
div {width: 100px;border: 1px solid red;}
img {width: 100px;height: auto;}
.block img{
display:block;
}
.bottom img{
vertical-align:bottom;
}
<p>Default:</p>
<div>
<img src="http://i.imgur.com/RECDV24.jpg" />
</div>
<p>With display:block;</p>
<div class="block">
<img src="http://i.imgur.com/RECDV24.jpg" />
</div>
<p>With vertical-align:bottom;</p>
<div class="bottom">
<img src="http://i.imgur.com/RECDV24.jpg" />
</div>
评论
line-height:0;
font-size:0
middle
text-top
sub
super
您所要做的就是分配此属性:
img {
display: block;
}
默认情况下,图像具有以下属性:
img {
display: inline;
}
您可以使用多种方法来解决此问题,例如
用
line-height
#wrapper { line-height: 0px; }
用
display: flex
#wrapper { display: flex; } #wrapper { display: inline-flex; }
使用 、 和
display:
block
table
flex
inherit
#wrapper img { display: block; } #wrapper img { display: table; } #wrapper img { display: flex; } #wrapper img { display: inherit; }
评论
line-height
您还可以为容器进行设置,并将图像的高度增加到 > 100%。overflow: hidden;
height: 100%;
评论