Making an element fill the entire height of browser viewport using jQuery
代码
演示
HTML 的基本形式如下所示:
1 2 3 4 5 | <main id="main" class="site-main" role="main"> <!-- blah, blah, blah! --> </main> |
W.r.t HTML,我正在尝试使用 JavaScript/jQuery 使元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | jQuery(document).ready(function($){ // get height of browser viewport var window_h = $(window).height(); // get height of the jumbotron, i.e. element #main var jumbotron_h = $('.home #main').outerHeight(true); // calculate necessary padding (top/bottom) to apply on #main so that the // element's height is equal to that of the browser's viewport, // and its contents are centered vertically if (window_h > (jumbotron_h + 60)) { var jumbotron_padding = (window_h - jumbotron_h)/2 } else { var jumbotron_padding = 30 } // apply calculated padding on the element dynamically $('.home #main').attr('style', 'padding-top:'+jumbotron_padding+'px;padding-bottom:'+jumbotron_padding+'px;'); }); |
正如上面代码中的注释中清楚地解释的那样,代码会自动计算要应用于
它工作得很好,除了在我能够识别的一种情况下计算的填充(以及由此产生的高度)是错误的。
当您将浏览器窗口大小调整为 567x724 px(这意味着 551x611 px 视口大小)时,至少在 Windows 7、Google Chrome 浏览器(最新)上很容易重现(您可以使用 Window Resizer 之类的扩展程序),您会注意到元素的计算填充导致其高度大于浏览器视口的高度。
为什么会这样?我无法在任何其他分辨率下重现相同的内容。我可能会在这里遗漏什么?
首先,Jquery 的
您所指的具体错误可能是由于您调整窗口大小时的数学不一致 - 您使用填充(包含在上面提到的
我还要指出这行代码:
1 2 3 4 5 | if (window_h > (jumbotron_h + 60)) { var jumbotron_padding = (window_h - jumbotron_h)/2 } else { var jumbotron_padding = 30 } |
这会强制您的页面始终为
假设您的目标是使
HTML:
1 | Content here |
CSS:
1 2 3 4 5 6 | #parent {display: table;} #child { display: table-cell; vertical-align: middle; } |
IE 修复:
1 2 3 | #child { display: inline-block; } |
1 2 3 4 5 6 7 8 9 10 11 12 | body { height:100vh; } .element-to-be-centered { font-size:1em; text-align:center; top: 49%; -webkit-transform: translateY(-49%); -ms-transform: translateY(-49%); transform: translateY(-49%); } |
我最近一直在做很多关于居中内容的实验。此技术无需在任何元素上设置高度即可工作。
这适用于 ie9 及更高版本。
根据@Thomas 的回答,我确定了两种可能的解决方案。考虑到更好的浏览器支持,我将使用#2 解决方案。
1。使用单位
CSS:
1 2 3 4 5 6 7 8 9 10 | .home #primary { /* Parent */ display: table; width: 100%; } .home #main { /* Child */ display: table-cell; height: 100vh; /* 100% viewport height */ vertical-align: middle; } |
2。动态设置父级(
JS:
1 2 3 4 5 6 7 8 9 10 11 12 | jQuery(document).ready(function($){ var window_h = $(window).height(); var jumbotron_h = $('.home #main').height(); if (window_h <= (jumbotron_h + 60)) { var window_h = jumbotron_h + 60 } $('.home #primary').attr('style', 'height:'+window_h+'px;'); }); |
CSS:
1 2 3 4 5 6 7 8 9 10 | .home #primary { /* Parent */ display: table; width: 100%; } .home #main { /* Child */ display: table-cell; height: 100%; /* 100% height of parent */ vertical-align: middle; } |
在你的 CSS 中
1 2 3 4 5 6 7 | html, body { height: 100%; } div, #main { height: 100%; } |