私はcssを使用してフッターをフラッシュする手法に一般的に精通しています。
しかし、私はこのアプローチをTwitterブートストラップで機能させるのにいくつかの問題を抱えています。おそらく、Twitterブートストラップが本質的に応答性があるという事実が原因です。Twitterブートストラップを使用すると、上記のブログ投稿で説明されているアプローチを使用して、フッターをページの下部にフラッシュすることができません。
私はcssを使用してフッターをフラッシュする手法に一般的に精通しています。
しかし、私はこのアプローチをTwitterブートストラップで機能させるのにいくつかの問題を抱えています。おそらく、Twitterブートストラップが本質的に応答性があるという事実が原因です。Twitterブートストラップを使用すると、上記のブログ投稿で説明されているアプローチを使用して、フッターをページの下部にフラッシュすることができません。
回答:
ここのスニペットがブートストラップに非常にうまく機能することがわかりました
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に含まれています。
ブートストラップ3.x
navbarコンポーネントを使用して.navbar-fixed-bottom
クラスを追加します。
<div class="navbar navbar-fixed-bottom"></div>
ブートストラップ4.x
<div class="navbar fixed-bottom"></div>
追加することを忘れないでくださいbody { padding-bottom: 70px; }
。そうしないと、ページのコンテンツがカバーされる可能性があります。
ドキュメント:http : //getbootstrap.com/components/#navbar-fixed-bottom
navbar-static-bottom
。
Twitterブートストラップの実際の例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;
}
}
以下のためにスティッキーフッター、我々は2を使用して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
では、最新バージョンのブートストラップ4.3の、これは使用して行うことができる.fixed-bottom
クラスを。
<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
、ナビゲーションバーに対応するために下に押すと、最終的にフッターがビューポートを少し超えて(さらに70px)押し出され、スクロールバーが表示されるためです。私たちはプッシュしてより良い結果を得ます.container-fluid
代わりにdiv。
次に、次のように.wrapper
、.container-fluid
divの外側のクラスを削除し、divでラップする必要があります#main
。
<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-column
メインdivで、フレックスアイテムを列に配置します。min-height: 100vh
メインdivに、スタイル属性またはCSSで、ビューポートを垂直方向に塗りつぶします.flex-grow-1
コンテナでは、メインコンテンツコンテナがビューポートの高さに残っているすべてのスペースを占めるようにする要素。min-height: 100vh
のmin-vh-100
クラスの代わりに 使用できます。
幅制約レイアウトを処理するには、以下を使用して、角が丸まらないようにし、ナビゲーションバーがアプリケーションの側面と面一になるようにします。
<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
、メインコンテナーのdivをheight: 100vh
(新しいCSS3 ビューのポートパーセンテージ)に設定して、Bootstrapを使用することでしょう。これにより、フッターが一番下にフラッシュされます。
<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;
}
#wrap {
min-height: 100%;
height: auto !important;
height: 100%;
width: 100%;
/*Negative indent footer by its height*/
margin: 0 auto -60px;
position: fixed;
left: 0;
top: 0;
}
フッターの高さは、折り返し要素の下のインデントのサイズと一致します。
.footer {
position: fixed;
bottom: 0;
left: 0;
right: 0;
height: 60px;
}
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
パーブートストラップ4.3たとえば、私が行ったように、あなたの正気を失っている場合には、これはそれが実際にどのように動作するかです:
height: 100%
(h-100
クラス)display: flex
(d-flex
クラス)margin-top: auto
(mt-auto
クラス)が必要です問題は、最新のフロントエンドフレームワークでは、これらの要素の周りに追加のラッパーがあることが多いことです。
たとえば、私の場合、Angularを使用して、個別のアプリルート、メインアプリコンポーネント、フッターコンポーネントからビューを構成しました。これらすべてで、カスタム要素がDOMに追加されました。
そのため、機能させるために、これらのラッパー要素にクラスを追加する必要がありました:追加h-100
、d-flex
1レベル下に移動、mt-auto
1レベル上にフッターから移動(実際には、フッタークラスではなく、<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
プロパティのクロスブラウザーサポートが提供されない理由はわかりません。これが、最終的にBootstrapスニペットに変換されます。
HTML
タグで。私の場合、HTML
タグでスタイルを使用したくないので、ソリューションは機能しませんでした。そして、私はbody
タグがビューポートではなく別の親に依存することを望んでいません。あなたは配置する必要はありませんstyle="height:100%;"
とh-100
同時に。min-vh-100
ボディに置くことは単に仕事をし、コードを減らします。
ここに、HAML(http://haml.info)でのアプローチを示します。上部にnavbarがあり、ページの下部にフッターがあります。
%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;
}
}