【发布时间】:2016-06-19 07:54:13
【问题描述】:
(如果有人出于娱乐目的对背景故事感兴趣,这是my previous question 的后续内容。它可能无法帮助您理解这个问题。)
这里有两个元素 <aside> 和 <main> 通过 JavaScript 获得宽度和高度,因此它们的组合宽度就是屏幕的宽度(注意它们的显示是内联块)。如果您在 Web 浏览器(最大化浏览器,以使浏览器的宽度等于屏幕的宽度)中运行此代码,您可能会注意到 body 出人意料地不适合元素:
<!DOCTYPE html>
<html>
<body>
<aside></aside><!-- comment to remove inline-block whitespace
--><main></main>
<script>
var h = screen.height/100;
var w = screen.width/100;
var e = document.getElementsByTagName("aside")[0].style;
e.display = "inline-block";
e.backgroundColor = "lightblue";
e.width = 14*w + "px";
e.height = 69*h + "px";
e.marginRight = 0.5*w + "px";
e = document.getElementsByTagName("main")[0].style;
e.display = "inline-block";
e.backgroundColor = "green";
e.width = 85.5*w + "px";
e.height = 69*h + "px";
e = document.getElementsByTagName("body")[0].style;
e.margin = e.padding = "0";
e.backgroundColor = "black";
</script>
</body>
</html>
如果你给 JavaScript 一个延迟,元素会被正确渲染。这表明身体以某种方式“需要时间”来确定其正确的宽度:
<script>
setTimeout(function() {
[...]
}, 200);
</script>
还可以通过添加以下行来为正文指定screen.width 的指定宽度,而不是引入延迟。这支持了之前的猜测,body 不会立即知道它的正确宽度(除非指定):
<script>
[...]
e.width = 100*w + "px";
</script>
尽管我冒昧地猜测来解释这一点,但我实际上并不知道发生了什么。
为什么一开始就没有正确放置元素,为什么这两种解决方案有效?
(注意: 也可以通过使用e.whiteSpace = "nowrap"; 将正文的空白设置为 nowrap 来解决此问题,但我怀疑这与其他两个不一样。而是为身体内部的元素创造空间,这只是迫使元素彼此相邻,即使身体没有足够的空间。)
【问题讨论】:
标签: javascript html document-body