この質問に関連してインターネット上に散らばっている議論や質問がたくさん見つかりましたが、それらのどれも私のケースに一致しないようであり、解決策は特定の状況に非常に固有のものです。
ページの上部に高さ100px
のheader
要素があります。私はdiv#sidebar
要素を250px
の幅で左にフロートさせ、最後にdiv#main
要素も左にフロートさせました。
html
、body
、およびdiv#sidebar
の高さは100%
です。
私の目標は、ブラウザのサイズやコンテンツのサイズに関係なく、div#sidebar
をページの一番下まで伸ばすことです。明らかに、コンテンツが表示可能なページの高さよりも長い場合、コンテンツは正常に動作し、ページの終わりを超えてプッシュされ、スクロールバーが導入されます。
ただし、現状では、ページの高さは100% + 100px
として計算されているようで、div#sidebar
を押し下げるコンテンツがない場合でも、スクロールバーが導入されています。これまでのところ、うまくいく解決策が見つからなかったか、おそらく私はそれを逃したか、解決策を台無しにしました。とにかく、私は1時間以上ずっとこの場所にいて、髪の毛をはぎ取るところです。
これを正しく機能させてheader
の高さが100%
に追加されないようにするJavaScript以外の方法はありますか?
これが私のHTML/CSSです。上記に関連する詳細をすべて含めましたが、これは役立つはずです。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>My Awesome Template!</title>
<link href="./stylesheet.css" rel="stylesheet" />
</head>
<body>
<header id="primary">
<h1>My Awesome Template!</h1>
</header>
<div id="sidebar">
<h1>Sidebar</h1>
</div>
<div id="main">
<h1>Main</h1>
</div>
</body>
</html>
CSS:
html, body
{
margin: 0;
padding: 0;
height: 100%;
}
body
{
background: #fff;
font: 14px/1.333 sans-serif;
color: #080000;
}
header#primary
{
width: 100%;
height: 100px;
background: #313131;
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#4d4d4d), to(#313131));
background-image: -moz-linear-gradient(#4d4d4d, #313131);
background-image: -o-linear-gradient(#4d4d4d, #313131);
background-image: linear-gradient(#4d4d4d, #313131);
}
header#primary h1
{
margin: 0px 0px 0px 20px;
padding: 0px;
line-height: 100px;
color: #ffffff;
}
#sidebar
{
float: left;
width: 250px;
background: #ccc;
min-height: 100%;
}
#main
{
float: left;
}
あなたは悪名高い「偽の列」技術を探しています。これが チュートリアル です。
基本的に、単純な背景色ではそれを行うことはできません。繰り返し背景画像を使用する必要があります。
この記事 で概説されている方法は、問題を解決するための非常に単純な方法であることがわかりました。
#sidebarと#main divを別のdivで囲む必要があるため、htmlコードは次のようになります。
...
<div id="content">
<div id="sidebar">
<h1>Sidebar</h1>
</div>
<div id="main">
<h1>Main</h1>
</div>
</div>
...
そして、次のCSSはあなたが望むものに近い何かをします:
#content {
position: relative;
width: 100%;
}
#sidebar {
position: absolute;
top: 0;
bottom: 0;
left: 0;
width: 240px;
}
#main {
position: relative;
margin-left: 250px;
}
(少し調整して、たとえば、#mainのh1のマージンは無視されているように見えましたが、#sidebarのh1のマージンは無視されていませんでした!).
低いIEを気にしない場合は、親でdisplay: table
を使用し、要素でdisplay: table-cell
を使用します。これで一緒に高さが修正されます。ギャップについては、margin-top: -100 px; padding-top: 100px;
を使用します
これを試したかどうか、またはうまくいくかどうかはわかりませんが(コーディングは初めてです)、サイドバーを左にフロートさせ、コンテンツを右にフロートさせ、テキストを左に揃え、幅にパーセンテージを使用します。
#sidebar
{
float: left;
width: 25%;
background: #ccc;
min-height: 100%;
text-align: left;
}
#main
{
float: right;
text-align: left;
width: 70%;
}
他の設定がある場合は、それらに異なる方法でアプローチする必要がありますが、これでうまくいく場合があります。
$(".sidebar").height(Math.max($(".content").height(),$(".sidebar").height()));
あなたはこのjqueryコードでそれを行うことができます。メインコンテンツの高さを呼び出します。