【问题标题】:Unknown whitespace appearing inside <div> without padding or margins<div> 内出现未知空白,没有填充或边距
【发布时间】:2011-05-01 19:48:27
【问题描述】:

我在构建的设计中遇到了一个奇怪的空白问题。

我创建了一个 &lt;div&gt; 来包含投票元素 - 它包含一个赞成按钮、反对按钮和投票总数,每个按钮都包含在自己的 &lt;div&gt; 元素中,并使用 &lt;img&gt; 作为按钮。

来源:

<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 中,&lt;div&gt;&lt;img&gt; 元素都被定义为不显示边距或填充,FireBug 确认这些特定元素没有边距或填充,但我看到添加了空格在&lt;img&gt; 元素的底部和它们各自包含的 ` 元素的底部之间。

我添加了以下 CSS 来显示每个元素周围的边框:

.votebox * {
  border: 1px #000 solid;
}

这就是它在 Firefox 3.6 中的显示方式(是的,这些是 StackOverflow 投票图像。我暂时将它们用作占位符):


现在,这个问题的明显答案是简单地将“投票”类设置为具有明确的图像高度(我会这样做,甚至可能选择 CSS 精灵而不是&lt;img&gt;s),但我很喜欢更有兴趣了解为什么这些元素以这种方式显示(毕竟这应该是一个自学项目)。

谁能帮我解释一下?


编辑:Steve H 向我指出,我应该使用轮廓而不是边框​​来显示元素的外边缘。我进行了更改,并将 CSS 中的元素分开,使它们各自显示为不同的颜色。

新大纲如下所示:


如您所见,这个问题与我想象的有点不同。看起来图像下方有一些空白,但由于底部图像似乎稍微超出了包含&lt;div&gt; 的位置,这使情况更加复杂。这对我来说似乎很奇怪。

【问题讨论】:

  • [Just a tip] 当调试这样的问题时,通常最好使用轮廓而不是边框​​,这是因为边框会增加对象的整体宽度/高度,而轮廓只会标记外围地区。
  • 不知何故,我不知道大纲。我知道进入这个边界会增加元素的宽度/高度,但认为这不是问题,因为我已经用萤火虫检查了所有东西,只是希望能够一次看到多个元素,而不是一个一次与萤火虫。有趣的是,轮廓和边框看起来彼此不同,并且有一条我无法识别的轮廓线(使用 firebug 检查时不会出现在任何元素的边缘)。

标签: html css image rendering whitespace


【解决方案1】:

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

过渡示例:http://jsbin.com/icesi

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

可能有助于您理解问题的相关声明如下

这是另一个例子。你可能有 发现设置 font-size: medium 导致不同的字体大小 资源管理器与导航器。出现这种情况 因为互联网的方式 Windows 团队的资源管理器解释 CSS 规范的意图。 为了保持一致 Windows 版本,Internet Explorer 用于 Macintosh 模仿了它的行为 4.x 系列。如果你把 IE5/Mac 进入错误兼容模式,它 将继续处理字体大小: 像 IE4.x/Win 一样中等。 严格 然而,它将充当导航器 确实如此,这实际上是正确的 根据 W3C 进行解释。

来源:http://oreilly.com/pub/a/javascript/synd/2001/08/28/doctype.html?page=2

【讨论】:

  • 我没有意识到文档类型如此重要。我读过文档类型主要用于强制浏览器进入标准模式。我现在找不到它,但是几天前我在 SO 上看到了一个答案,该答案说或暗示浏览器实际上并未将 doctype 用于其他任何事情。我猜那是错误的。作为记录,我使用的是 HTML5 文档类型。
  • 我添加了一个来自oreilly的附加评论,检查一下,也许会对你有所帮助。
【解决方案2】:

HTML 中的图像是内联元素,默认情况下放置在字体基线上,因此您看到的可能是下行空间。通常的解决方法是将它们设置为display: blockvertical-align: bottom

编辑:顺便说一句,您可以像使用任何其他元素一样使用 CSS 格式化图像,因此您很可能会在图像周围删除额外的 divs。

【讨论】:

  • 很好的解释;正是我想要的。您的两种方法都有效,但是display: block; 将图像扔到了容器的左侧(我知道这一点:这是因为默认情况下,块具有 100% 的宽度)。
  • 这也适用于inline-block 的其他元素。刚才我遇到了与 OP 类似的问题,菜单 ul 已设置为 Inline Block 并在下面有随机空格。添加vertical-align: middle; 为我修复了它。
【解决方案3】:

您使用的是严格的文档类型,所以

.votebox img{display:block;}

应该做的伎俩

【讨论】:

    猜你喜欢
    • 2013-09-06
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    • 2011-04-17
    • 2014-07-25
    • 2016-06-06
    • 2014-11-12
    相关资源
    最近更新 更多