document.body.height = document.getElementById("page-main").clientHeight + 400;
#page-main {
position:absolute;
width:100%;
height:2000px;
z-index:2;
background:#eeeeee;
}
#footer {
position:fixed;
width:100%:
bottom:0px;
height:400px;
z-index:1;
background:#aaaaaa;
}
<body>
<div id='page-main'>main</div>
<div id='footer'>footer</div>
</body>
我有一个页面div与position: fixed; bottom: 0px;
和一个主要内容div与position: absolute;
。
基本上这个想法是让主要内容div在文档的静态背景之上就像一张纸,所以你可以滚动浏览页面的内容,当你到达底部时,你需要能够滚动几百个像素以显示主内容div下方的页脚div。
我在我的着陆页中允许这个,通过找出身体的高度来促进底部的额外空间并使用height: 1720px;
在身体上设置高度。但是,我想以一种不需要保持不变的方式来实现它,因为我担心浏览器和设备可能对主内容div有不同的渲染高度,我想在多个页面上使用它而不需要单独硬编码身高。
我尝试使用JavaScript来查找主内容div的高度(使用clientHeight,这看起来效果很好),并为身体的高度添加几百个像素,如下所示:
document.body.height = document.getElementById("page-main").clientHeight + 400;
并尝试更改以下内容:
document.body.style.height
document.body.style.paddingBottom
这根本不会改变身体的高度。我尝试使用类似的方法将身体的背景改为红色,这有效,但出于某种原因,它只是拒绝改变高度。我已经尝试将这个脚本放在头部,身体上方和身体末端。没有帮助。找到主内容div的clientHeight工作正常,添加400到这个数字似乎很容易,我知道文档肯定有一个正文,所以我很困惑为什么它可能是JavaScript拒绝改变高度的身体。
我已经在Edge和Chrome中检查了控制台,似乎没有问题,所以我完全迷失在这里。通常情况下,我可以在网上找到答案,而且我从来没有求助过,但此时我觉得这是一个如此简单的问题,我不知道为什么它不起作用。
对不起,如果这个问题写得不好,但是有没有人知道为什么JavaScript可能不允许改变身体的高度?
TL; DR:
试试这样:
document.body.style.height = document.getElementById("page-main").clientHeight + 400 + 'px';
您必须指定单位才能获得正确的结果。就像你在CSS中一样。
设置body
元素的高度,在你的问题中你想要的方式,由于它与html
元素及其默认CSS(如position: static
上的body
)和overflow
属性的关系而变得复杂。阅读更多here。
根据我在chrome控制台上的实验,你不能通过document.body.clientHeight
设置身高,它似乎是只读的。你需要在CSS中设置高度(可能还有溢出)属性(通过document.body.style
为javascript)。
但是,我认为您想要的效果的最佳解决方案不涉及设置body(或html)属性。试试这个:
display: none
scrollTop
)或底部减去一些偏移量display: block
(最好通过切换类,或编辑样式属性)。这将自动增加主体的滚动条以容纳页脚。display: none
。使用上述方法,无需硬编码或事先了解页脚和非页脚内容的高度。你不需要搞乱html或body元素CSS。如果需要,您还可以应用CSS动画!