图片无法填满div元素

9
CSS/HTML问题。
这真是太疯狂了 - 我只能假设我很蠢。我无法使我的图片填充它所在的div。图像下方始终有5像素的“填充”。
以下是html代码:
<!doctype html>

<head><link rel="stylesheet" href="style.css" type="text/css" /></head>

<body>
<div class="row">
<img src="pic2.jpg" />
</div>
</body>

这里是 CSS:

body, .row, img {
padding: 0;
margin: 0;
border: none;
}

.row {
width: 80%;
background-color: orange;
}

img{
width: 50%;
}

这是结果:

http://imgur.com/yELMe

如您所见,(愚蠢的)蓝色和红色图像未填满橙色div。图像下方始终显示5个像素的橙色。这不受div或图像的%宽度更改或调整窗口大小的影响。
我可以通过“margin:-5px;”来解决此问题,但我想知道为什么会发生这种情况(特别是在不同情况下数量是否大于或小于5px)。
感谢您的帮助(如果这是我的荒谬错误,请再次道歉)。

这是一个实时示例:http://jsfiddle.net/aDtUm/ - jacktheripper
2个回答

29

像这样将垂直对齐值(不是默认的baseline)添加到您的图像中:topmiddle ...

vertical-align: top;

例子:

/* QuickReset */ *, ::after, ::before { margin: 0; box-sizing: border-box; }

.row {
  background-color: orange;
}

img {
  vertical-align: middle;    /* or top, bottom, ...  */
}
<div class="row">
  <img src="https://www.gravatar.com/avatar/69cfcc1895204718647d030c5e887cbe?s=64&d=identicon&r=PG" />
  <span>Some text</span>
</div>

或者,您可以将父元素的display设置为flexinline-flexgrid - 如果这符合您的需求

/* QuickReset */ *, ::after, ::before { margin: 0; box-sizing: border-box; }

.row {
  background-color: orange;
  display: flex;
  align-items: center;
}
<div class="row">
  <img src="https://www.gravatar.com/avatar/69cfcc1895204718647d030c5e887cbe?s=64&d=identicon&r=PG" />
  <span>Some text</span>
</div>


1
页面的自然浮动存在“泄漏”,对于内联图像(非浮动)它们开始尊重排版提供的元素空间,如字体大小、行高等。您可以轻松测试(在不工作的演示中):只需添加body{font-size:50px;},您将看到边距空间将增加。通过设置图像的垂直对齐方式,我们确保提供与浏览器默认值不同的位置。 - Roko C. Buljan
好的,我明白了。我永远不会想到那个。再次感谢你的帮助! - Joe_AK
@jkdume 感谢您!这里有一篇有趣的文章。 - Roko C. Buljan

5

我通过将 imgdisplay 设置为 block 来解决了这个问题:

display: block;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接