私は次のページ(deadlink:http://www.workingstorage.com/Sample.htm
)にフッターがあり、それをページの下部に表示できません。
フッターにしたい
CSSは継承され、私を悩ませます。コンテンツの高さを最小にしたり、フッターを一番下にしたりするように適切に変更することはできません。
簡単な方法はあなたのページの本文を100%
に、min-height
を100%
にすることです。フッターの高さが変わらない場合はこれでうまくいきます。
フッターにマイナスのマージントップを設定します。
#footer {
clear: both;
position: relative;
height: 40px;
margin-top: -40px;
}
フッターを一番下に貼り付けるための非常に簡単な方法を開発しましたが、最も一般的な方法として、フッターの高さに合わせて微調整する必要があります。 デモを見る
以下のこのメソッドは、body
に::after
疑似要素を置き、フッターの高さが exact になるように設定して、フッターとまったく同じスペースを占有するようにします。フッタがその上にabsolute
配置されると、フッタが実際にスペースを取っているように見え、絶対配置の悪影響を排除します(たとえば、本文の内容の上に移動するなど)。
html{ height:100%; }
body{ min-height:100%; padding:0; margin:0; position:relative; }
header{ height:50px; background:lightcyan; }
footer{ background:PapayaWhip; }
/* Trick: */
body {
position: relative;
}
body::after {
content: '';
display: block;
height: 50px; /* Set same as footer's height */
}
footer {
position: absolute;
bottom: 0;
width: 100%;
height: 50px;
}
<body>
<header>Header</header>
<article>Content</article>
<footer>Footer</footer>
</body>
html, body{ height:100%; margin:0; }
header{ height:50px; background:lightcyan; }
footer{ height:50px; background:PapayaWhip; }
/* Trick */
body{
display:flex;
flex-direction:column;
}
footer{
margin-top:auto;
}
<body>
<header>Header</header>
<article>Content</article>
<footer>Footer</footer>
</body>
html,body { height: 100%; margin: 0; }
header {
height: 50px;
background: lightcyan;
}
footer {
height: 50px;
background: PapayaWhip;
}
/**** Trick: ****/
body {
display: table;
width: 100%;
}
footer {
display: table-row;
}
<body>
<header>Header</header>
<article>Content</article>
<footer>Footer</footer>
</body>
ブラウザ間でうまく機能する非常に単純な方法は、次のとおりです。
http://matthewjamestaylor.com/blog/keeping-footers-at-the-bottom-of-the-page
<div id="container">
<div id="header"></div>
<div id="body"></div>
<div id="footer"></div>
</div>
html,
body {
margin:0;
padding:0;
height:100%;
}
#container {
min-height:100%;
position:relative;
}
#header {
background:#ff0;
padding:10px;
}
#body {
padding:10px;
padding-bottom:60px; /* Height of the footer */
}
#footer {
position:absolute;
bottom:0;
width:100%;
height:60px; /* Height of the footer */
background:#6cf;
}
私が使っている簡単な解決策は、IE8で動作します+
Htmlにmin-height:100%を指定すると、コンテンツが少ない場合は静止画ページがビューポート全体の高さになり、フッターがページ下部に固定されます。コンテンツが増えると、フッターはコンテンツとともに下に移動し、下に固執し続けます。
JSフィドル作業デモ: http://jsfiddle.net/3L3h64qo/2/ /
html{
position:relative;
min-height: 100%;
}
/*Normalize html and body elements,this style is just good to have*/
html,body{
margin:0;
padding:0;
}
.pageContentWrapper{
margin-bottom:100px;/* Height of footer*/
}
.footer{
position: absolute;
bottom: 0;
left: 0;
right: 0;
height:100px;
background:#ccc;
}
<html>
<body>
<div class="pageContentWrapper">
<!-- All the page content goes here-->
</div>
<div class="footer">
</div>
</body>
</html>
それでも、もう1つの非常に単純な解決策はこれです。
html, body {
height: 100%;
width: 100%;
margin: 0;
display: table;
}
footer {
background-color: grey;
display: table-row;
height: 0;
}
コツは、文書全体にdisplay:table
を、フッターにdisplay:table-row
を付けてheight:0
を使用することです。
フッターはtable-row
として表示されている唯一の本文の子であるため、ページの下部に表示されます。
注意が必要なことの1つは、モバイルデバイスです。ビューポートのアイデアを「珍しい」方法で実装しているからです。
そのため、position: fixed;
を使用するのは(他の場所で推奨されているように)通常はありません。もちろん、それはあなたがしている正確な振る舞いによります。
私が使ったことがあり、デスクトップとモバイルでうまく機能したのは、次のとおりです。
<body>
<div id="footer"></div>
</body>
と
body {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
padding: 0;
margin: 0;
}
#footer {
position: absolute;
bottom: 0;
}
これを行う
<footer style="position: fixed; bottom: 0; width: 100%;"> </footer>
最新のブラウザすべてでサポートされているflexについても読むことができます。
更新 :私はflexについて読んでそれを試しました。それは私のために働きました。それがあなたのために同じことを願っています。これが私がどのように実装したかです。ここでのメインはそれがdivであるIDではありません
body {
margin: 0;
display: flex;
min-height: 100vh;
flex-direction: column;
}
main {
display: block;
flex: 1 0 auto;
}
ここでflex https://css-tricks.com/snippets/css/a-guide-to-flexbox/ についてもっと読むことができます。
古いバージョンのIEではサポートされていないことに注意してください。
これはスティッキーフッターとして知られています。 グーグル検索 それは多くの結果を生み出します。 CSSスティッキーフッター は私がうまく使ったものです。しかし、もっとあります。
css:
* {
margin: 0;
}
html, body {
height: 100%;
}
.wrapper {
min-height: 100%;
height: auto !important;
height: 100%;
margin: 0 auto -4em;
}
.footer, .Push {
height: 4em;
}
html:
<html>
<head>
<link rel="stylesheet" href="layout.css" ... />
</head>
<body>
<div class="wrapper">
<p>Your website content here.</p>
<div class="Push"></div>
</div>
<div class="footer">
<p>Copyright (c) 2008</p>
</div>
</body>
</html>
私のjqueryメソッドは、ページコンテンツがウィンドウの高さより小さい場合はページの下部にフッターを配置し、それ以外の場合はコンテンツの後にフッターを配置します。
また、他のコードの前にコードを独自のEnclosureに格納すると、フッターの位置を変更するのにかかる時間が短縮されます。
(function() {
$('.footer').css('position', $(document).height() > $(window).height() ? "inherit" : "fixed");
})();
私は自分自身でこの問題を調べてきました。私はかなりの数の解決策を見てきましたが、それぞれに問題がありました。
だから私はこのソリューションを思い付いたさまざまなソースからのベストプラクティスを使用して:
http://jsfiddle.net/vfSM3/248/
ここで具体的に達成したいことは、メインのコンテンツを緑色の領域内のフッターとヘッダーの間でスクロールさせることです。
これが簡単なCSSです。
html, body {
height: 100%;
margin: 0;
padding: 0;
}
header {
height: 4em;
background-color: red;
position: relative;
z-index: 1;
}
.content {
background: white;
position: absolute;
top: 5em;
bottom: 5em;
overflow: auto;
}
.contentinner {
}
.container {
height: 100%;
margin: -4em 0 -2em 0;
background: green;
position: relative;
overflow: auto;
}
footer {
height: 2em;
position: relative;
z-index: 1;
background-color: yellow;
}
私はちょうどここで同様の質問として答えました:
私はWeb開発についてはかなり新しいです、そしてこれはすでに答えられていることを私は知っています、しかしこれは私がそれを解決するのを見つける最も簡単な方法であり、私はどういうわけか違うと思います。私のWebアプリのフッターは動的な高さを持っているので、私は柔軟なものを望みました、私はFlexBoxとスペーサーを使用することになった。
html, body {
height: 100%;
display: flex;
flex-direction: column;
margin: 0px;
}
私たちのアプリにはcolumn
の動作を想定しています。ヘッダー、ヒーロー、または縦に並べたコンテンツを追加する必要がある場合です。
.spacer {
flex: 1;
}
<html>
<body>
<header> Header </header>
Some content...
<div class='spacer'></div>
<footer> Footer </footer>
</body>
</html>
あなたはそれをここで遊ぶことができます https://codepen.io/anon/pen/xmGZQL
これが私の2セントです。他のソリューションと比較すると、追加のコンテナを追加する必要はありません。そのため、この解決策はもう少しエレガントです。コード例の下に、なぜこれが機能するのかを説明します。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>test</title>
<style>
html
{
height:100%;
}
body
{
min-height:100%;
padding:0; /*not needed, but otherwise header and footer tags have padding and margin*/
margin:0; /*see above comment*/
}
body
{
position:relative;
padding-bottom:60px; /* Same height as the footer. */
}
footer
{
position:absolute;
bottom:0px;
height: 60px;
background-color: red;
}
</style>
</head>
<body>
<header>header</header>
<footer>footer</footer>
</body>
</html>
だから私たちが最初にすることは、最大のコンテナ(html)を100%にすることです。 htmlページはページ自体と同じくらい大きいです。次にボディの高さを設定します。これはhtmlタグの100%より大きくすることができますが、少なくとも同じ大きさにする必要があるため、min-height 100%を使用します。
私達はまた体を親戚にします。相対とは、ブロック要素を元の位置から相対的に移動できることを意味します。ここでは使用しません。親戚には2つ目の用途があります。絶対要素は、ルート(html)または最初の相対的な親/祖父母に対して絶対的です。それが私たちが欲しいものです、私たちは体、つまり下の部分に対して絶対的であるべきです。
最後のステップは、フッターをabsoluteおよびbottom:0に設定することです。これは、相対的な最初の親/祖父母の親の下に移動します(コースオブコース)。
ページ全体を埋めると、コンテンツがフッターの下に入ります。どうして?それは絶対的なので、フッターはもはや "htmlフロー"の内側にはないからです。では、どうすればこれを修正できますか。ボディにpadding-bottomを追加します。これはボディが実際にそれがコンテンツより大きいことを確認します。
私はあなたたちのためにたくさん明確にしたことを願っています。
これは私が同じ問題を解決した方法です
html {
height: 100%;
box-sizing: border-box;
}
*,
*:before,
*:after {
box-sizing: inherit;
}
body {
position: relative;
margin: 0;
padding-bottom: 6rem;
min-height: 100%;
font-family: "Helvetica Neue", Arial, sans-serif;
}
.demo {
margin: 0 auto;
padding-top: 64px;
max-width: 640px;
width: 94%;
}
.footer {
position: absolute;
right: 0;
bottom: 0;
left: 0;
padding: 1rem;
background-color: #efefef;
text-align: center;
}
<div class="demo">
<h1>CSS “Always on the bottom” Footer</h1>
<p>I often find myself designing a website where the footer must rest at the bottom of the page, even if the content above it is too short to Push it to the bottom of the viewport naturally.</p>
<p>However, if the content is taller than the user’s viewport, then the footer should disappear from view as it would normally, resting at the bottom of the page (not fixed to the viewport).</p>
<p>If you know the height of the footer, then you should set it explicitly, and set the bottom padding of the footer’s parent element to be the same value (or larger if you want some spacing).</p>
<p>This is to prevent the footer from overlapping the content above it, since it is being removed from the document flow with <code>position: absolute; </code>.</p>
</div>
<div class="footer">This footer will always be positioned at the bottom of the page, but <strong>not fixed</strong>.</div>
フッターセクションをカスタマイズするだけです
.footer
{
position: fixed;
bottom: 0;
width: 100%;
padding: 1rem;
text-align: center;
}
<div class="footer">
Footer is always bootom
</div>
footer {
margin-top:calc(5% + 60px);
}
これはうまくいきます
Html、body、およびフッター以外の他の行を100%に設定するだけです。例えば
<body>
<header></header>
<content></content>
<footer></footer>
cSSは
html, body, header, content{
height:100%;
}
私が遭遇したすべてのCSSメソッドは厳しすぎます。また、フッターをfixed
に設定することは、デザインの一部ではない場合は選択できません。
テスト済み:
このレイアウトを仮定します。
<html>
<body>
<div id="content"></div>
<div id="footer"></div>
</body>
</html>
次のjQuery関数を使用してください。
$('#content').css("min-height", $(window).height() - $("#footer").height() + "px");
これは、min-height
の#content
を ウィンドウの高さ - フッターの高さ に設定することです。
min-height
を使用したので、#content
の高さが ウィンドウの高さ を超える場合、関数は適切に劣化し、必要ないので何もしません。
実際に見てください。
$("#fix").click(function() {
$('#content').css("min-height", $(window).height() - $("#footer").height() + "px");
});
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html {
background: #111;
}
body {
text-align: center;
background: #444
}
#content {
background: #999;
}
#footer {
background: #777;
width: 100%;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<html>
<body>
<div id="content">
<p>Very short content</p>
<button id="fix">Fix it!</button>
</div>
<div id="footer">Mr. Footer</div>
</body>
</html>
JsFiddle と同じスニペット
これをさらに進めて、この関数を動的なビューアの高さのリサイズに適応させることができます。
$(window).resize(function() {
$('#content').css("min-height", $(window).height() - $("#footer").height() + "px");
}).resize();
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html {
background: #111;
}
body {
text-align: center;
background: #444
}
#content {
background: #999;
}
#footer {
background: #777;
width: 100%;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<html>
<body>
<div id="content">
<p>Very short content</p>
</div>
<div id="footer">Mr. Footer</div>
</body>
</html>
高さを固定したり要素の位置を変更したりしない、非常に単純なフレックスソリューション。
_ html _
<div class="container">
<header></header>
<main></main>
<footer></footer>
</div>
_ css _
.container {
display: flex;
flex-direction: column;
min-height: 100vh;
}
main {
flex: 1;
}
ブラウザのサポート
IE11以下を除くすべての主要ブラウザ。
適切なプレフィックスには必ず Autoprefixer を使用してください。
.container {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
min-height: 100vh;
}
main {
-webkit-box-flex: 1;
-ms-flex: 1;
flex: 1;
}
/////////////////////////////////////////////
header,
main,
footer {
margin: 0;
display: block;
}
header,
footer {
min-height: 80px;
}
header {
background-color: #ccc;
}
main {
background-color: #f4f4f4;
}
footer {
background-color: orange;
}
<div class="container">
<header></header>
<main></main>
<footer></footer>
</div>
あなたはこれを行うことができます
.footer {
position: absolute;
right: 0;
bottom: 0;
left: 0;
padding: 1rem;
text-align: center;
}