
HTML、CSSを勉強中です。
こちらで似た質問は拝見したのですが、疑問が解決できなかったので投稿させて頂きます。
ページの内容が少ないときにもフッターを最下部に表示させるため、
いくつかのサイトを参考にさせて頂いて以下のようなコードを書きました。
・HTML(一部)
<html>
<body>
<div id="container">
<div id="article">内容</div>
<div id="footer">フッター</div>
</div>
</body>
</html>
・CSS(一部)
html,body {
height: 100%;
}
div#container {
position: relative;
min-height: 100%;
}
body > #container {
height: auto;
}
div#article {
padding-bottom: 20px;
}
div#footer {
position: absolute;
bottom: 0px;
height: 20px;
width: 100%;
}
これで目的は達成したのですが、ほぼ丸写しの作業で、containerにheightではなくmin-heightを指定する意味がよく分かりません。
min-heightは高さの最小値を設定するプロパティとのことで、これ自体が上手くいくことは分かるのですが、何故heightに替えると上手くいかないのかが分かりません(実際に、フッターがページ内容の終わり位置まで浮き上がってきます)。
親のbody、親の親のhtmlの高さが100%に指定されているのだから、containerの高さ(height)もこれらに対して100%とすることで画面いっぱいの高さが常に確保されるのかと思ったのですが、違うのでしょうか。
そもそもhtmlの高さは何に対して100%なのかと調べてみると「表示領域に対して」とのことで、実はこの記載があったページではmin-heightではなくheightを利用してボックスの高さを100%に出来るとまとめてあったのですが、上述の通り私は今回の目的には上手く利用できませんでした。
「高さ100%のhtml、bodyに対してcontainerのheightが100%」というのが上手くいかないのなら、
何故heightをmin-heightに替えるだけでOKなのかますます分からなくなってしまいました。
だらだらとした文面で申し訳ないのですが、解説していただければ大変助かります。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
理由は単純で、footerがデフォルトのoverflow:visibleのため、折角配置されても下に突き抜けてしまうためです。
heightとmin-heightの違いは、heightはサイズを決めてしまいますが、min-heightは最初サイズしか決めませんから自動調整されます。
下のサンプルで本文が少ない場合はいずれでもまったく同じになるはずです。
横幅の場合は書きサンプルのように組み合わせて使用することが多いでしょう。たての場合は、ウィンドウ幅やフォントサイズが変わると長くならなければならないので通常はheightで高さを決めないほうが良いです。
常に高さを固定する場合はoveflowの値をautoなりhiddenにします。
ちょっとHTMLを書き直します。
※class名やid名は文書構造を示すものにします。idはリンクやjavascriptののターゲットにする以外は使わないほうが色々な意味で楽です。classだと複数個所を一度に指定できる。
←「DIV要素とSPAN要素は、id属性及び class属性と併用することで、文書に構造を付加するための一般機構を提供する。 ( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html4 … )」
HTML5の「新しい要素 」がその意味・用途と共に参考になるでしょう。
←新しい要素 ( http://standards.mitsue.co.jp/resources/w3c/TR/h … )
なお、header,footer,articleなどはひとつの文書中に何度も登場する可能性があるのでclass名のほうが良いです。将来HTML5でページを作成する場合、そのまま<div class="section">→<section>に書き換えるだけです。
★HTMLには文書構造しか書かないので後々のメンテナンスが楽です。HTMLもCSSもわかりやすくなりますしね。
<html>
<body>
<div class="article">
<div class="header><!-- 文書のヘッダー -->
</div>
<div class="section><!-- 本文 -->
内容
</div>
<div class="footer"><!-- フッタ -->
フッター
</div>
</div>
</body>
</html>
の場合
html,body {margin:0;padding:0;height:100%;line-height:1.6em;}
body>div.article>div>*{margin:0 20px;}
body>div.article{
width:80%;min-width:480px;max-width:800px;
margin:0 auto;
min-height:100%;
position:relative;
}
body>div.article>div.section{padding-bottom:40px;}
body>div.article>div.footer{position:absolute;bottom:0;width:100%;height:40px;}
で叶えられると思います。--IE6など子供セレクタを理解できないブラウザには、子孫セレクタを使って書き直す必要があります。
[その他気付き]
div#container(詳細度0,1,0,1)・・・一意セレクタは詳細度が高いためタイプセレクタがなくても良いです。
body > #container(詳細度0,1,0,1)・・詳細度同じですから追記されます。
詳しくは「REC-CSS2 邦訳 ( http://www.swlab.it.okayama-u.ac.jp/man/rec-css2 … )」を見ていただくことにして・・。
・4.3.3 パーセント値(Percentages) ( http://www.swlab.it.okayama-u.ac.jp/man/rec-css2 … )
・8.1 ボックスの寸法(Box dimensions) ( http://www.swlab.it.okayama-u.ac.jp/man/rec-css2 … )
・10.5 内容領域の高さ(Content height: the 'height' property) ( http://www.swlab.it.okayama-u.ac.jp/man/rec-css2 … )★重要
・10.7 高さの最大値と最小値(Minimum and maximum heights: 'min-height' and 'max-height') ( http://www.swlab.it.okayama-u.ac.jp/man/rec-css2 … )
[サンプル]タブは_に置換してあります。HTML4.01strict+CSS2.1です。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ja">
<head>
_<meta http-equiv="content-type" content="text/html; charset=Shift_JIS">
_<title>サンプル0</title>
_<meta name="author" content="ORUKA1951">
_<meta http-equiv="Content-Style-Type" content="text/css">
_<link rev="made" href="mailto:oruka1951@hoge.com" title="send a mail" >
_<link rel="START" href="../index.html">
_<style type="text/css">
<!--
html,body {margin:0;padding:0;height:100%;line-height:1.6em;}
body>div.article>div>*{margin:0 20px;}
body>div.article{
width:80%;min-width:480px;max-width:800px;
margin:0 auto;
min-height:100%;
position:relative;
}
body>div.article>div.section{padding-bottom:40px;}
body>div.article>div.footer{position:absolute;bottom:0;width:100%;height:40px;}
/* おまけ・・色分け */
body{background-color:gray;}
div.article{background-color:white;}
div.header{background-color:aqua;}
div.footer{background-color:yellow;}
-->
_</style>
</head>
<body>
_<div class="article">
__<div class="header">
___<h1>タイトル</h1>
___<p>このページでは・・・・</p>
__</div>
__<div class="section">
___<h2>見出し</h2>
___<p>ここに自由な長さの文章を入れてみる</p>
__</div>
__<div class="footer">
___<address>© ORUKA1951 2012 - 2016 All Rights Reserved mailto:*****</address>
__</div>
_</div>
</body>
</html>
お礼が大変遅くなり、まことに申し訳ございません。
付け焼刃の知識のみでWebページを作っていたため、実はご回答いただいた内容がよく理解出来ないまま、長い間、質問したきりとなっておりました。
min-heightは最小サイズしか決めないため、その他の場合に自動調整される、ということですね。
サンプルや参考情報まで詳しくご回答頂きとてもためになりました。
本当にありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript vertical sliderをautoplayしたい 2 2022/08/25 14:47
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- HTML・CSS cssが効かなくて困ってます 1 2023/01/01 23:57
- HTML・CSS html/cssで要素が出てこなくて困ってます 1 2022/12/31 16:59
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- HTML・CSS img と p を縦中央に配置したいのですがうまくいきません。 2 2023/01/12 14:38
- HTML・CSS (Javascript)印刷するファイルに応じて印刷プレビュー画面で用紙を自動的に切り替えたい!! 2 2022/04/11 12:04
- HTML・CSS スクロールすると追従する画像のコードを書いているのですが、追従する画像の大きさの調節が上手くいきませ 2 2022/04/18 12:52
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
HTML属性での「""」 「''」違い
-
htmlのolやulなどlistにtitleや...
-
複数のボタンを等間隔に、かつ...
-
divとpの使いわけ
-
<div id="container">の使いか...
-
hタグを使わずに小見出し
-
要素間、要素内に隙間が空く
-
html の divとtable の役割
-
div要素が重なってします
-
IE・NNの独自タグについて
-
htmlでdivをなるべく使わないで
-
align="middle"が無視される T...
-
レイアウトが崩れる・・・
-
htmlとcssの文章構造、これは正...
-
divの中に外部のHTMLを埋め込む
-
セクションをdivで囲むと見出し...
-
ヘッダーとフッターだけ背景を...
-
開始タグと終了タグについて
-
iframeを使わずに上下50%ずつに...
-
CSSを使って定型文を挿入できま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
htmlのolやulなどlistにtitleや...
-
HTML属性での「""」 「''」違い
-
html の divとtable の役割
-
<div id="container">の使いか...
-
ヘッダーとフッターだけ背景を...
-
1時間30分を簡単に表したいで...
-
スペースを使わず文字位置を揃...
-
div要素が重なってします
-
divの中に外部のHTMLを埋め込む
-
複数のボタンを等間隔に、かつ...
-
min-heightとheightの違いについて
-
セクションをdivで囲むと見出し...
-
htmlでdivをなるべく使わないで
-
要素間、要素内に隙間が空く
-
ブログのサイドバーが下にくる
-
body>div{}の意味を知りたい
-
スライド部分のリンクが貼れな...
-
画面を縮小するとカラムが落ち...
-
htmlの見出しタグ(<h1>)の次...
-
インラインフレームのページ内...
おすすめ情報