<div>内出现未知空格,没有填充或边距

11

我在制作一个设计时遇到了奇怪的空格问题。

我创建了一个<div>来容纳投票元素 - 它包含一个上投票按钮、一个下投票按钮和一个投票总数,每个元素都在自己的<div>中,并使用<img>作为按钮。

来源:

<div class="votebox">
  <div class="vote"><img src="upvote.png" /></div>
  <div class="votetotal">15</div>
  <div class="vote"><img src="downvote.png" /></div>
</div>
在我的CSS中的mini-reset中,<div><img>元素都被定义为没有外边距或内边距,并且FireBug确认这些特定元素没有外边距或内边距,但我看到在<img>元素底部和它们各自所包含的 ` 元素底部之间添加了白色空格。
我添加了以下CSS以显示每个元素周围的边框:
.votebox * {
  border: 1px #000 solid;
}

这是 Firefox 3.6 中的显示效果(是的,那些是 StackOverflow 的投票图像...我暂时将它们用作占位符):


显然,解决这个问题的明显方法是简单地将 "vote" 类设置为具有图像高度的显式高度(我会这样做,甚至可以选择使用 CSS sprite 而不是 <img>),但我更感兴趣的是学习为什么这些元素以这种方式显示(毕竟这应该是一个自学项目)。

有谁能为我解释一下吗?


编辑:Steve H 指出我应该使用 outline 而不是 border 来显示元素的外边缘。我已经做出了更改,并在 CSS 中分离了元素,使它们每个显示为不同的颜色。

新的轮廓如下:


正如你所看到的,问题与我想象的有点不同。看起来图像下面有一些空白,但这被事实上底部的图像似乎在其包含的 <div> 外部略微呈现所复杂。这对我来说似乎很奇怪。


4
【小技巧】在调试类似的问题时,通常最好使用轮廓线(outline)而不是边框线(border),因为边框线会增加对象的总宽度/高度,而轮廓线仅仅标记外部区域。 - Steve H
不知何故,我没有意识到轮廓线。我知道在这个过程中边框会增加元素的宽度/高度,但我认为这不是问题,因为我已经用firebug检查了所有内容,只是想能够同时看到多个元素,而不是一个接一个地用firebug查看。有趣的是,轮廓线和边框看起来不同,而且有一条我无法识别的轮廓线(在使用firebug检查时不会出现在任何元素的边缘)。 - AgentConundrum
3个回答

18
在HTML中,图像是内联元素,并且默认情况下放置在字体基线上,因此您看到的可能是下降字母的空间。通常的解决方法是将它们设置为display: blockvertical-align: bottom
编辑:顺便提一下,您可以像其他元素一样使用CSS格式化图像,因此您可能可以删除图像周围的额外
标签。

非常好的解释,正是我在寻找的。你提供的两种方法都有效,但是 display: block; 会将图像抛到容器的左侧(我知道这个原因:默认情况下,块元素具有100%的宽度)。 - AgentConundrum
1
这同样适用于其他也是 inline-block 的元素。我刚刚遇到了一个类似的问题,我的菜单 ul 被设置为 Inline Block,并且在下面有随机的空白。添加 vertical-align: middle; 对我很有帮助。 - Samuel MacLachlan

0

你正在使用严格的文档类型,因此

.votebox img{display:block;}

这应该可以解决问题。


0

这取决于您使用的文档类型。如果您使用转换型(<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">),它将以您想要的方式显示。

转换型示例:http://jsbin.com/icesi

严格型示例:http://jsbin.com/icesi/2

以下相关声明可能有助于您理解此问题。

这是另一个例子。您可能已经发现,在Explorer和Navigator中设置font-size: medium会导致不同的字体大小。这是因为Windows版Internet Explorer团队解释CSS规范意图的方式不同。为了保持与Windows版本一致,Macintosh版Internet Explorer在4.x系列中模拟了其行为。如果将IE5/Mac放入bugwards兼容模式,它将继续像IE4.x/Win一样处理font-size: medium。然而,在strict模式下,它将像Navigator一样运行,这实际上是根据W3C的正确解释。

我没有意识到 doctype 如此重要。我曾经读过,doctype 主要用于强制浏览器进入标准模式。我现在找不到了,但是几天前我在 SO 上看到一个答案说或暗示浏览器实际上并不使用 doctype 进行其他任何操作。我想那是错误的。为了记录,我正在使用 HTML5 的 doctype。 - AgentConundrum
我从O'Reilly添加了一条额外的评论,请检查一下,也许会对你有帮助。 - Sotiris

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