这是重现问题的 HTML 代码:

<!DOCTYPE html>
<html>
    <body>
        <div style="width:800px; margin:0 auto;">
            <img src="logo.gif" width="100" height="40" />
        </div>
    </body>
</html>

当它在桌面浏览器中呈现时,唯一的 <div> 的高度变成了 45 像素,但不是我预期的 40(在 IE11 和 Opera Next v20 中测试过)。 logo.gif 是 100x40,即使我通过 CSS 将零边框应用于 <img> 标签(边框、边框宽度等),情况仍然相同。

为什么会发生以及如何解决?

最佳答案

我相信这不是错误,因为它在所有主要浏览器中的呈现方式都相同。如果我们只设置 display:block 样式,问题就解决了。没有这个,图像被渲染为一个内联元素,它的底部边框与所谓的文本基线对齐。

让我们更改我们的代码来演示这一点:

<!DOCTYPE html>
<html>
<body style="background-color: #FFFF99;">
<div style="width:800px; margin:0 auto; background-color: #00CCFF;">
<img src="logo.gif" width="100" height="40" style="border: 3px solid black;" />
Some text yyy qqq
</div>
</body>
</html>

结果如下:

如您所见,需要额外的空间来渲染文本而不进行剪裁!

我在 Eric Meyer CSS: The Definitive Guide 的著名著作中找到了对这一点的确认 - 在专门介绍对齐的部分中,当它描述 {vertical-align: baseline} 标记的 <img> 属性时。这是相应的摘录:

关于html - <div> 图像的高度比预期的要大,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21726898/

10-09 18:31
查看更多