gpt4 book ai didi

javascript - 使用 HTML5 文档类型时容器中的额外顶部填充

转载 作者:行者123 更新时间:2023-11-28 17:49:24 25 4
gpt4 key购买 nike

在下面的 div 中有额外的顶部填充:

<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<title>Extra Top Padding</title>
<style>
div {
background: tan;
}
div * {
vertical-align: middle;
}
span {
font-size: 16px;
}
</style>
</head>

<body>
<div id="container">
<img src="https://ssl.gstatic.com/images/icons/gplus-16.png"><span>Some text</span>
</div>
<p id="indicator"></p>
<script>
document.getElementById('indicator').textContent = document.getElementById('container').clientHeight;
</script>
</body>

</html>


<强> DEMO

如果您使用 HTML 4.01 Transitional 文档类型,它会正确显示:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">


这是 HTML5 中的错误吗?

最佳答案

tl;博士

这不是错误。这是因为您的文档几乎使用了标准模式或标准模式。而且它不是填充,它是行高空间。


就我个人而言,我不会对上述解释感到满意。但是要完全解释需要大量的细节。所以这里是:

计算是针对 Times New Roman 字体的。尽管原则保持不变,但其他字体可能会给出不同的值。

无论有没有 img 元素,高度差都是一样的,所以让我们放弃它。

当您使用 HTML5 文档类型(或 HTML 4.01 严格文档类型)时,您将获得标准模式。当您使用 HTML 4.01 Transitional 文档类型时,您将获得几乎标准模式。两种模式的区别主要在于哪些行内框会影响行高。特别是 strut在几乎标准模式下没有效果。

所以在Almost Standards 模式 中,唯一的行内框是文本。 div 的总高度就是该文本的行高。即 16px * 1.25(div 的行高设置)= 20px

标准模式更复杂。现在我们有了文本和支柱。支柱与基线对齐。默认行高 1.25 为我们提供了 2px 上半部行距 + 13px ascender 高于基线和 3px descender + 2px 下半部行距。总计 20px。

文本垂直对齐:居中。 CSS 2.1 规范说

Align the vertical midpoint of the box with the baseline of the parent box plus half the x-height of the parent.

父框的基线是我们从上面知道的 strut 的基线是底部上方 5px(在添加文本之前)。

字体大小为 16px 的字体的 x 高度约为 7px。将其减半并 chop 为整数得到 3px。将它添加到 5px,我们得到底部上方 8px 文本的对齐线。

框的垂直中点在对齐线上方 10px 和对齐线下方 10px。

行高必须足够大以包含其所有行内框,这意味着它必须是对齐线上方框的最大值 + 对齐线下方框的最大值。这是线上方的 max(12px[strut], 10px[text]) 和线下方的 max(8px[strut], 10px[text]) 。

等于 (12px + 10px) 或 22px

关于javascript - 使用 HTML5 文档类型时容器中的额外顶部填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22616556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com