请注意,我并不是在询问如何使一个`div`的大小与“窗口”或“视口”相同,这方面已经有很多现成的问题解答。
我有一个具有一定高度和宽度的网页,并且我想添加一个空的顶层`div`(即不包含页面其余部分的`div`),其大小正好等于页面的高度和宽度。实际上,我还希望它至少具有视口的大小。
我知道可以使用JavaScript对高度和宽度进行一次性计算:
但是这个值会因为图片加载、AJAX或其他页面中发生的动态变化而改变。我想找到一种方法,将div的大小锁定在整个页面大小上,这样它就可以在需要时动态地调整大小。
我尝试了以下方式:
我有一个具有一定高度和宽度的网页,并且我想添加一个空的顶层`div`(即不包含页面其余部分的`div`),其大小正好等于页面的高度和宽度。实际上,我还希望它至少具有视口的大小。
我知道可以使用JavaScript对高度和宽度进行一次性计算:
var height = Math.max(document.body.scrollHeight,
document.documentElement.clientHeight);
var width = Math.max(document.body.scrollWidth,
document.documentElement.clientWidth);
但是这个值会因为图片加载、AJAX或其他页面中发生的动态变化而改变。我想找到一种方法,将div的大小锁定在整个页面大小上,这样它就可以在需要时动态地调整大小。
我尝试了以下方式:
function resetFakeBg() {
// Need to reset the fake background to notice if the page shrank.
fakeBg.style.height = 0;
fakeBg.style.width = 0;
// Get the full page size.
var pageHeight = Math.max(document.body.scrollHeight,
document.documentElement.clientHeight);
var pageWidth = Math.max(document.body.scrollWidth,
document.documentElement.clientWidth);
// Reset the fake background to the full page size.
fakeBg.style.height = pageHeight + 'px';
fakeBg.style.width = pageWidth + 'px';
}
// Create the fake background element.
fakeBg = setFakeBgStyle(document.createElement('div'));
document.body.appendChild(fakeBg);
// Keep resizing the fake background every second.
size_checker_interval = setInterval(resetFakeBg, 1000);
限制
这是一个Chrome扩展程序,我想将我的页面修改限制为仅添加单个div
。这意味着添加CSS以修改html
和/或body
标签的高度和宽度是不可取的,因为它可能会对页面的其余部分呈现方式产生副作用。
此外,我不想将现有页面包装在div
中,因为这可能会破坏一些网站。例如,想象一下使用CSS选择器body > div
样式化的网站。我希望我的扩展程序对尽可能少的网站造成影响。
为什么需要这样做?
因为有些人喜欢拿我的答案当作人质,直到他们满意于我想要这样做的真正好理由:
这是一个专注于辅助功能的Chrome扩展程序,它在整个页面上应用CSS过滤器。最近的Chrome版本(>= 45)不会将CSS过滤器应用于在<html>
或<body>
标签上指定的背景。因此,我选择通过将页面背景复制到一个非常负面的z-index
值的div
上来解决这个限制,以便它可以受到页面范围内的CSS过滤器的影响。为了使这种策略奏效,该div
需要完全模仿页面背景对用户的呈现方式-即成为文档的精确大小(不大于此)并至少填充视口。
body > div
。这个包装器会破坏它。作为扩展作者,我无法对网站强制执行任何指南,所以我只能处理像这样的不良实践,并尝试确保我的扩展程序做正确的事情。 - user108471