我再次提醒我为什么讨厌GUI编程。
我已经解决了这个非常简单的HTML测试用例的问题:
<div style="padding:5px;background-color:#ccccff">
<form>
<label for="username">Username</label>
<input name="username" />
<label for="password">Password</label>
<input name="username" type="password" />
<button type="button" id="logout">Login</button>
</form>
</div>
当我将它输入到jsfiddle的HTML区域时,它会像我期望的那样呈现,一直有漂亮,一致的填充(紫色背后的浅灰色是jsfiddle&#39; s默认bakground): / p>
但是,当我将完全内容 - 不多也不少 - 放入笔记本电脑上服务器的文档根目录中的.html
文件中时,然后加载页面,它呈现如下:
<div>
的额外部分在我的标签和控件下面做了什么?为什么差异?
(两个示例均在Chrome版本47.0.2526.106(64位)的相同实例中呈现,在MacBook Pro,OS X 10.8.5上运行。)
对于第一个示例(由jsfiddle提供),Chrome的box-visualizer小部件如下所示:
对于第二个例子(由我的机器提供服务),盒子可视化器显示:
但如果我随后从第二个示例中删除填充属性,则内框的高度会降回19px
。
无论发生什么事情,它似乎都与底部填充有关,因为:
"padding:5px 5px 1px 5px"
,内部框也会显示为35px
高。"padding:5px 5px 0px 5px"
,则内框高度将恢复为19px
。我不清楚应该从哪里开始调试这个。
(顺便说一句,我已经为border-box
尝试了content-box
和box-sizing
,但这两种选择似乎都没有改变我在任何一个地方观察到的行为。)
答案 0 :(得分:2)
这实际上是form
元素的底部边距。这个底部边距仅出现在quirks mode中,用于呈现您的网页,因为HTML片段中没有DOCTYPE。
div
元素不受影响,但是its padding does prevent that bottom margin from collapsing,这就是为什么只有填充在那里才能看到它。删除填充允许它从div
中折叠,因此您不会看到div
背景中原本会占用的部分。
由于box-sizing
对边距没有影响,因此在任何元素上更改它都不会产生任何影响。
通常,每当您使用HTML(和CSS)时,首先要确保的是存在有效的DOCTYPE,它将触发标准模式。在HTML5中,它是<!DOCTYPE html>
。