我通常熟悉使用CSS刷新页脚的技术。
但是我很难让这种方法适用于Twitter引导程序,这很可能是因为Twitter引导程序本质上是响应式的。使用Twitter引导程序,我无法使用上述博客文章中描述的方法使页脚刷新至页面底部。
我通常熟悉使用CSS刷新页脚的技术。
但是我很难让这种方法适用于Twitter引导程序,这很可能是因为Twitter引导程序本质上是响应式的。使用Twitter引导程序,我无法使用上述博客文章中描述的方法使页脚刷新至页面底部。
Answers:
发现这里的片段非常适合引导
HTML:
<div id="wrap">
<div id="main" class="container clear-top">
<p>Your content here</p>
</div>
</div>
<footer class="footer"></footer>
CSS:
html, body {
height: 100%;
}
#wrap {
min-height: 100%;
}
#main {
overflow:auto;
padding-bottom:150px; /* this needs to be bigger than footer height*/
}
.footer {
position: relative;
margin-top: -150px; /* negative value of footer height */
height: 150px;
clear:both;
padding-top:20px;
}
现在,它包含在Bootstrap 2.2.1中。
Bootstrap 3.x
使用导航栏组件并添加.navbar-fixed-bottom
类:
<div class="navbar navbar-fixed-bottom"></div>
Bootstrap 4.x
<div class="navbar fixed-bottom"></div>
不要忘了添加body { padding-bottom: 70px; }
,否则页面内容可能会被覆盖。
navbar-static-bottom
。
Twitter bootstrap NOT STICKY FOOTER的工作示例
<script>
$(document).ready(function() {
var docHeight = $(window).height();
var footerHeight = $('#footer').height();
var footerTop = $('#footer').position().top + footerHeight;
if (footerTop < docHeight)
$('#footer').css('margin-top', 10+ (docHeight - footerTop) + 'px');
});
</script>
如果用户打开devtools或调整窗口大小,该版本将始终更新。
<script>
$(document).ready(function() {
setInterval(function() {
var docHeight = $(window).height();
var footerHeight = $('#footer').height();
var footerTop = $('#footer').position().top + footerHeight;
var marginTop = (docHeight - footerTop + 10);
if (footerTop < docHeight)
$('#footer').css('margin-top', marginTop + 'px'); // padding of 30 on footer
else
$('#footer').css('margin-top', '0px');
// console.log("docheight: " + docHeight + "\n" + "footerheight: " + footerHeight + "\n" + "footertop: " + footerTop + "\n" + "new docheight: " + $(window).height() + "\n" + "margintop: " + marginTop);
}, 250);
});
</script>
#footer
当不希望滚动条内容适合屏幕时,只需将10的值更改为0即可
。如果内容不适合屏幕,则会显示滚动条。
$('#footer').height();
为“ $('#footer').outerHeight();
$(window).resize(function() {//main code goes here});
并$(window).resize();
在页面加载时调用以对其进行设置。
以下是从官方页面实施此方法的方法:
http://getbootstrap.com/2.3.2/examples/sticky-footer.html
我现在刚刚对其进行了测试,它很棒!:)
的HTML
<body>
<!-- Part 1: Wrap all page content here -->
<div id="wrap">
<!-- Begin page content -->
<div class="container">
<div class="page-header">
<h1>Sticky footer</h1>
</div>
<p class="lead">Pin a fixed-height footer to the bottom of the viewport in desktop browsers with this custom HTML and CSS.</p>
</div>
<div id="push"></div>
</div>
<div id="footer">
<div class="container">
<p class="muted credit">Example courtesy <a href="http://martinbean.co.uk">Martin Bean</a> and <a href="http://ryanfait.com/sticky-footer/">Ryan Fait</a>.</p>
</div>
</div>
</body>
相关的CSS代码是这样的:
/* Sticky footer styles
-------------------------------------------------- */
html,
body {
height: 100%;
/* The html and body elements cannot have any padding or margin. */
}
/* Wrapper for page content to push down footer */
#wrap {
min-height: 100%;
height: auto !important;
height: 100%;
/* Negative indent footer by it's height */
margin: 0 auto -30px;
}
/* Set the fixed height of the footer here */
#push,
#footer {
height: 30px;
}
#footer {
background-color: #f5f5f5;
}
/* Lastly, apply responsive CSS fixes as necessary */
@media (max-width: 767px) {
#footer {
margin-left: -20px;
margin-right: -20px;
padding-left: 20px;
padding-right: 20px;
}
}
对于粘性页脚,我们DIV's
在HTML中使用两个来实现基本的粘性页脚效果。这样写:
的HTML
<div class="container"></div>
<div class="footer"></div>
的CSS
body,html {
height:100%;
}
.container {
min-height:100%;
}
.footer {
height:40px;
margin-top:-40px;
}
更简单的官方示例:http : //getbootstrap.com/examples/sticky-footer-navbar/
html {
position: relative;
min-height: 100%;
}
body {
margin-bottom: 60px;
}
.footer {
position: absolute;
bottom: 0;
width: 100%;
height: 60px;
background-color: #f5f5f5;
}
好吧,我发现了navbar-inner
和 navbar-fixed-bottom
<div id="footer">
<div class="navbar navbar-inner navbar-fixed-bottom">
<p class="muted credit"><center>ver 1.0.1</center></p>
</div>
</div>
看起来不错,对我有用
参见示例 Fiddle
在最新版本的bootstrap 4.3中,可以使用.fixed-bottom
class 完成此操作。
<div class="fixed-bottom"></div>
这是我在页脚中使用它的方法:
<footer class="footer fixed-bottom container">
<hr>
<p>© 2017 Company, Inc.</p>
</footer>
您可以在此处的职位文档中找到更多信息。
HenryW的答案很好,尽管我需要进行一些调整才能使其按我想要的方式工作。特别是以下内容也可以处理:
这些调整对我有用:
HTML:
<div id="footer" class="invisible">My sweet footer</div>
CSS:
#footer {
padding-bottom: 30px;
}
JavaScript:
function setFooterStyle() {
var docHeight = $(window).height();
var footerHeight = $('#footer').outerHeight();
var footerTop = $('#footer').position().top + footerHeight;
if (footerTop < docHeight) {
$('#footer').css('margin-top', (docHeight - footerTop) + 'px');
} else {
$('#footer').css('margin-top', '');
}
$('#footer').removeClass('invisible');
}
$(document).ready(function() {
setFooterStyle();
window.onresize = setFooterStyle;
});
您需要包装.container-fluid
div才能使粘性页脚正常工作,并且在.wrapper
类上还缺少一些属性。尝试这个:
padding-top:70px
从body
标签中删除,然后将其包含在您的标签中.container-fluid
,如下所示:
.wrapper > .container-fluid {
padding-top: 70px;
}
我们之所以必须这样做,是因为body
向下推以容纳导航栏最终会将页脚向视口的位置再推(更远70像素),从而得到一个滚动条。我们.container-fluid
改用div 可以获得更好的结果。
接下来,我们必须删除div .wrapper
之外的类,.container-fluid
并#main
用它包装div,如下所示:
<div class="wrapper">
<div id="main" class="container-fluid">
<div class="row-fluid">...</div>
<div class="push"></div>
</div>
</div>
当然,您的页脚必须位于.wrapper
div之外,因此将其从`.wrapper div中删除,然后将其放置在外部,如下所示:
<div class="wrapper">
....
</div>
<footer class="container-fluid">
....
</footer><!--END .row-fluid-->
完成这些操作后,请.wrapper
使用负边距将页脚正确地拉近班级,如下所示:
.wrapper {
min-height: 100%;
height: auto !important; /* ie7 fix */
height: 100%;
margin: 0 auto -43px;
}
那应该行得通,尽管您可能需要修改一些其他内容才能在调整屏幕大小时正常工作,例如重置.wrapper
类的高度,如下所示:
@media (max-width:480px) {
.wrapper {
height:auto;
}
}
这是使用Twitter Bootstrap和新的navbar-fixed-bottom类进行操作的正确方法:(您不知道我花了多长时间来寻找它)
CSS:
html {
position: relative;
min-height: 100%;
}
#content {
padding-bottom: 50px;
}
#footer .navbar{
position: absolute;
}
HTML:
<html>
<body>
<div id="content">...</div>
<div id="footer">
<div class="navbar navbar-fixed-bottom">
<div class="navbar-inner">
<div class="container">
<ul class="nav">
<li><a href="#">Menu 1</a></li>
<li><a href="#">Menu 2</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
使用Bootstrap 4内置的flex实用程序!这是我主要使用Bootstrap 4实用程序想到的。
<div class="d-flex flex-column" style="min-height: 100vh;">
<header></header>
<div class="container flex-grow-1">
<div>Some Content</div>
</div>
<footer></footer>
</div>
.d-flex
使主div成为flex容器.flex-column
在主div上将弹性项目排列在列中min-height: 100vh
到主div(具有style属性或在CSS中)以垂直填充视口.flex-grow-1
在容器上,使主要内容容器占据的元素将占据视口高度中的所有空间。min-height: 100vh
在min-vh-100
从Bootstrap类都可以使用。
要处理宽度约束布局,请使用以下命令,以免出现圆角,并使导航栏与应用程序的侧面齐平
<div class="navbar navbar-fixed-bottom">
<div class="navbar-inner">
<div class="width-constraint clearfix">
<p class="pull-left muted credit">YourApp v1.0.0</p>
<p class="pull-right muted credit">©2013 • CONFIDENTIAL ALL RIGHTS RESERVED</p>
</div>
</div>
</div>
那么您可以使用CSS覆盖引导类,以调整高度,字体和颜色
.navbar-fixed-bottom {
font-size: 12px;
line-height: 18px;
}
.navbar-fixed-bottom .navbar-inner {
min-height: 22px;
}
.navbar-fixed-bottom .p {
margin: 2px 0 2px;
}
您可以使用jQuery处理此问题:
$(function() {
/**
* Read the size of the window and reposition the footer at the bottom.
*/
var stickyFooter = function(){
var pageHeight = $('html').height();
var windowHeight = $(window).height();
var footerHeight = $('footer').outerHeight();
// A footer with 'fixed-bottom' has the CSS attribute "position: absolute",
// and thus is outside of its container and counted in $('html').height().
var totalHeight = $('footer').hasClass('fixed-bottom') ?
pageHeight + footerHeight : pageHeight;
// If the window is larger than the content, fix the footer at the bottom.
if (windowHeight >= totalHeight) {
return $('footer').addClass('fixed-bottom');
} else {
// If the page content is larger than the window, the footer must move.
return $('footer').removeClass('fixed-bottom');
}
};
// Call when this script is first loaded.
window.onload = stickyFooter;
// Call again when the window is resized.
$(window).resize(function() {
stickyFooter();
});
});
最简单的技术可能是navbar-static-bottom
结合使用Bootstrap 和将主容器div设置为height: 100vh
(新CSS3 视图端口百分比)。这会将页脚冲洗到底部。
<main class="container" style="height: 100vh;">
some content
</main>
<footer class="navbar navbar-default navbar-static-bottom">
<div class="container">
<p class="navbar-text navbar-left">© Footer4U</p>
</div>
</footer>
经过测试Bootstrap 3.6.6
。
的HTML
<div class="container footer navbar-fixed-bottom">
<footer>
<!-- your footer content here -->
</footer>
</div>
的CSS
.footer {
bottom: 0;
position: absolute;
}
这是使用Flexbox的最新版本Bootstrap(在撰写本文时为4.3)的解决方案。
HTML:
<div class="wrapper">
<div class="content">
<p>Content goes here</p>
</div>
</div>
<footer class="footer"></footer>
CSS:
html, body {
height: 100%;
}
body {
display: flex;
flex-direction: column;
}
.wrapper {
flex-grow: 1;
}
还有一个代码笔示例:https ://codepen.io/tillytoby/pen/QPdomR
按照Bootstrap 4.3示例,如果您像我一样失去理智,这实际上是这样的:
height: 100%
(h-100
班级)display: flex
(d-flex
class)margin-top: auto
(mt-auto
类)问题在于,在现代的前端框架中,我们经常围绕这些元素使用其他包装。
例如,在我的案例中,我使用Angular,从一个单独的应用程序根目录,主应用程序组件和页脚组件组成了视图-所有这些都将其自定义元素添加到DOM中。
因此,要使其工作,我必须向这些包装器元素中添加类:一个附加类h-100
,d-flex
向下移动mt-auto
一个级别,然后从页脚向上移动一个级别(因此实际上不再在页脚类上,而是在我的<app-footer>
自定义上元件)。
class="h-100"
到<html>
标签了。
这是不需要重新考虑HTML结构或涉及填充的任何其他CSS技巧的解决方案:
<html style="height:100%;">
...
<body class="d-flex flex-column h-100">
...
<main class="flex-grow-1">...</main>
<footer>...</footer>
</body>
...
</html>
请注意,此解决方案允许页脚具有灵活的高度,这在设计具有多种屏幕尺寸的页面并缩小内容时特别方便。
style="height:100%;"
使<html>
标签占据整个文档空间。d-flex
设置display:flex
为我们的<body>
标签。flex-column
设置flex-direction:column
为我们的<body>
标签。其子(<header>
,<main>
,<footer>
和任何其他直接孩子)现在垂直对齐。h-100
设置height:100%
为我们的<body>
标签,这意味着它将垂直覆盖整个屏幕。flex-grow-1
设置flex-grow:1
为我们的<main>
,有效地指示它填充任何剩余的垂直空间,因此等于我们之前在<body>
标签上设置的100%垂直高度。此处的工作演示:https : //codepen.io/maxencemaire/pen/VwvyRQB
有关flexbox的更多信息,请参见https://css-tricks.com/snippets/css/a-guide-to-flexbox/。
h-100
类无法正常工作,最好使用min-vh-100
。
h-100
类始终取决于父元素的高度,因此在某些情况下可能无法正常工作。由于我们希望页脚位于视口的底部,因此最好使用视口高度。
min-width
。这就是为什么HTML
标签有height
100%的代码。该示例有效,但我不明白为什么它不对CSS height
属性提供跨浏览器的支持,而CSS 属性最终就是Bootstrap片段所转换的。
HTML
标记中的样式。就我而言,您的解决方案无法正常工作,因为我不喜欢使用HTML
标记中的样式。而且我不希望body
标签依赖于另一个父元素而是视口。你不必把style="height:100%;"
和h-100
在同一时间。把min-vh-100
对身体根本没有工作和更少的代码。
在这里,您会发现HAML(http://haml.info)中的方法,导航栏位于页面顶部,页脚位于页面底部:
%body
#main{:role => "main"}
%header.navbar.navbar-fixed-top
%nav.navbar-inner
.container
/HEADER
.container
/BODY
%footer.navbar.navbar-fixed-bottom
.container
.row
/FOOTER
这是使用css3的示例:
CSS:
html, body {
height: 100%;
margin: 0;
}
#wrap {
padding: 10px;
min-height: -webkit-calc(100% - 100px); /* Chrome */
min-height: -moz-calc(100% - 100px); /* Firefox */
min-height: calc(100% - 100px); /* native */
}
.footer {
position: relative;
clear:both;
}
HTML:
<div id="wrap">
<div class="container clear-top">
body content....
</div>
</div>
<footer class="footer">
footer content....
</footer>
这是引导程序的执行方式:
http://getbootstrap.com/2.3.2/examples/sticky-footer.html
只需使用页面源代码,您就可以看到。不要忘记<div id="wrap">
顶部。
另一种可能的解决方案,仅使用媒体查询
@media screen and (min-width:1px) and (max-width:767px) {
.footer {
}
}
/* no style for smaller or else it goes weird.*/
@media screen and (min-width:768px) and (max-width:991px) {
.footer{
bottom: 0;
width: 100%;
position: absolute;
}
}
@media screen and (min-width:992px) and (max-width:1199px) {
.footer{
bottom: 0;
width: 100%;
position: absolute;
}
}
@media screen and (min-width:1120px){
.footer{
bottom: 0;
width: 100%;
position: absolute;
}
}