为什么在以下代码中,的高度div
大于的高度img
?图像下方有一个缝隙,但似乎不是填充/边距。
图像下方的间隙或多余空间是多少?
#wrapper {
border: 1px solid red;
width:200px;
}
img {
width:200px;
}
<div id="wrapper">
<img src="http://i.imgur.com/RECDV24.jpg" />
</div>
为什么在以下代码中,的高度div
大于的高度img
?图像下方有一个缝隙,但似乎不是填充/边距。
图像下方的间隙或多余空间是多少?
#wrapper {
border: 1px solid red;
width:200px;
}
img {
width:200px;
}
<div id="wrapper">
<img src="http://i.imgur.com/RECDV24.jpg" />
</div>
Answers:
默认情况下,图像以字母形式内联呈现,因此它位于a,b,c和d所在的同一行上。
在该行下方有空间,您可以找到字母g,j,p和q 的后代。
您可以:
vertical-align
图像的位置以将其放置在其他位置(例如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>
包含的图像是公共领域的,并来自 Wikimedia Commons
line-height
。设置line-height
为所需的尺寸还可以克服不希望的空白。
这里建议的另一个选项是将图像的样式设置为style="display: block;"
inline-block
如果您仍然希望它像通常的图像一样内嵌显示。
inline-block
似乎不起作用。
要消除图像下方的间隙,您可以:
vertical-align: bottom;
vertical-align: top;
或vertical-align: middle;
display:block;
请参见以下代码进行实时演示:
图像下方的间隙或多余空间不是错误或问题,它是默认行为。根本原因是图像被替换为元素(请参见MDN替换的元素)。这使它们可以“像图像一样工作”,并具有自己的固有尺寸,宽高比...。
浏览器计算其显示属性inline
但是它们赋予它们特殊的行为,使它们更接近inline-block
元素(因为您可以垂直对齐它们,所以它们的高度,顶部/底部边距和填充,转换...)。
这也意味着:
<img>
没有基线,因此当在带有vertical-align:基线的嵌入式格式化上下文中使用图像时,图像的底部将放置在文本基线上。
(来源:MDN,重点是我的)
由于浏览器默认将vertical-align属性计算为基线,因此这是默认行为。下图显示了基线在文本上的位置:
(图片来源)
如上图所示,基线对齐的元素需要留出延伸到基线以下的下降空间(如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>
这就是为什么<img>
标记的默认行为会在其容器的底部创建一个间隙,并且为什么更改“ vertical-align”属性或“ display”属性会删除它,如以下演示所示:
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
hack,或者至少要弄清楚为什么这是所有这些中最糟糕的“解决方案”:当有人在图像旁边放置文本时(尤其是预先格式化的带有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