javascript - 使用JS计算div高度

标签 javascript jquery css

我正在使用一些 javascript 来计算页面的高度,然后在 div 上设置一个最小高度。这样做的原因是将页脚推到内容不足的页面的底部。我的问题是最小高度大约为 30-40 像素,因此会导致滚动条。 (注意:出于各种原因,我没有使用像粘性页脚这样的解决方案,而是更喜欢这种解决方案。)

这是我的代码:

JS

$(function() {
  var height = $(window).height() - ($("header").outerHeight() + $("footer").outerHeight() );
 $("#page-content").css("min-height",height+"px");
});

HTML

 <header class="container">
 <div id="menu" class="row">
   <!-- Content -->
 </div>
</header>

<div id="page-content">
  <!-- Content --> 
</div>

<footer>
  <!-- Content --> 
</footer>

我认为问题出在我的 CSS 上。例如,我在页眉中有这样​​的边距:

#menu{
 margin: 5px auto 10px;
}

如果我删除该代码,它将稍微减少滚动条。 (我在页面上设置了其他边距,因此仅更改此边距将无法作为解决方案)。

我如何重写 JS 代码以考虑页眉和其他部分的边距?

最佳答案

<header>盒子的高度不反射(reflect) child #menu的边距,因为它们都是普通的盒子元素,如果 #page-content有边距,它们会与 #menu 重叠的边距,在这种情况下,页眉的高度将包括内容高度的某些部分,这是没有意义的。

问题是利润率下降:http://www.w3.org/TR/css3-box/#collapsing-margins

正如该页面所解释的那样,您可以通过几种方式告诉浏览器不要折叠边距:

  • 添加display: inline-block;给你的#menu { }规则(我的第一个建议)
  • 添加overflow: hidden;给你的header { } (如果您遇到对齐问题,可能是更好的建议)
  • 让你的<header>绝对定位,或 float 它。或者对 #menu 执行此操作里面。

或者如果你想尝试一下,你可以手动计算标题高度:

var header_height = $("header").outerHeight() +
   parseInt($("header").children().css('margin-top'), 10) +
   parseInt($("header").children().css('margin-bottom'), 10);

现在我想想,这是有道理的,我认为 css 规范做的是正确的。

更新:http://jsfiddle.net/HzBSz/2/

另见:Outer element margin not equal to inner element margin

关于javascript - 使用JS计算div高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13391114/

相关文章:

javascript - 在错误消息中访问 ng-pattern

javascript - 为什么 testmysite 声称我的网站速度很慢?

javascript - MomentJS 返回带时间戳的日期

javascript - 如果 JS 函数包含在 HTML 中,我如何在浏览器控制台中显示所有 JS 函数?

java - jStyleParser 无法解析我的 html 文件

css - 有什么办法可以在 2019 年使用纯 CSS 删除 IE11 中的滚动条箭头? (没有JavaScript)

javascript - 为什么我的弹出窗口不起作用?

javascript - select2 - 根据另一个列表的值限制选择一个列表

javascript - jQuery 自动完成 - 结果链接

javascript - 如何在 Div Wrapper 中实现圆形动画