隣り合う2つのdivを連結するラッパーdivがあります。このコンテナの上に、ヘッダーを含むdivがあります。ラッパーdivは、100%からヘッダーの高さを引いたものでなければなりません。ヘッダーは約60ピクセルです。これは修正されました。だから私の質問は次のとおりです。ラッパーdivの高さを100%から60 pxを引いた値に設定するにはどうすればよいですか。
<div id="header"></div>
<div id="wrapper">
<div id="left"></div>
<div id="right"></div>
</div>
これは、Firefox/IE7/Safari/Chrome/Operaでテストされた動作中のcssです。
* {margin:0px;padding:0px;overflow:hidden}
div {position:absolute}
div#header {top:0px;left:0px;right:0px;height:60px}
div#wrapper {top:60px;left:0px;right:0px;bottom:0px;}
div#left {top:0px;bottom:0px;left:0px;width:50%;overflow-y:auto}
div#right {top:0px;bottom:0px;right:0px;width:50%;overflow-y:auto}
「overflow-y」はw3c承認ではありませんが、すべての主要なブラウザがサポートしています。 2つのdiv、#leftおよび#rightは、コンテンツが高すぎる場合に垂直スクロールバーを表示します。
IE7でこれを機能させるには、DOCTYPEを追加して標準準拠モードをトリガーする必要があります。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title></title>
<style type="text/css">
*{margin:0px;padding:0px;overflow:hidden}
div{position:absolute}
div#header{top:0px;left:0px;right:0px;height:60px}
div#wrapper{top:60px;left:0px;right:0px;bottom:0px;}
div#left{top:0px;bottom:0px;left:0px;width:50%;overflow-y:auto}
div#right{top:0px;bottom:0px;right:0px;width:50%;overflow-y:auto}
</style>
</head>
<body>
<div id="header"></div>
<div id="wrapper">
<div id="left"><div style="height:1000px">high content</div></div>
<div id="right"></div>
</div>
</body>
CSS3では、使用できます
height: calc(100% - 60px);
IE6をサポートする必要がある場合は、JavaScriptを使用してラッパーdivのサイズを管理します(ウィンドウサイズを読み取った後、ピクセル単位で要素の位置を設定します)。 JavaScriptを使用したくない場合、これは実行できません。回避策はありますが、すべてのケースおよびすべてのブラウザーで機能するようになるまでに1、2週間かかります。
他の最新のブラウザの場合、次のcssを使用します。
position: absolute;
top: 60px;
bottom: 0px;
素晴らしいもの...今、私は彼の使用を停止しました...以下に示すメインコンテナを除いて:
<div id="divContainer">
<div id="divHeader">
</div>
<div id="divContentArea">
<div id="divContentLeft">
</div>
<div id="divContentRight">
</div>
</div>
<div id="divFooter">
</div>
</div>
ここにCSSがあります:
#divContainer {
width: 100%;
height: 100%;
}
#divHeader {
position: absolute;
left: 0px;
top: 0px;
right: 0px;
height: 28px;
}
#divContentArea {
position: absolute;
left: 0px;
top: 30px;
right: 0px;
bottom: 30px;
}
#divContentLeft {
position: absolute;
top: 0px;
left: 0px;
width: 250px;
bottom: 0px;
}
#divContentRight {
position: absolute;
top: 0px;
left: 254px;
right: 0px;
bottom: 0px;
}
#divFooter {
position: absolute;
height: 28px;
left: 0px;
bottom: 0px;
right: 0px;
}
すべての既知のブラウザーでこれをテストし、正常に動作しています。この方法を使用する際に欠点はありますか?
height:calc(100%-nPx);のようなことを行うことができます。たとえば、height:calc(100%-70px);
div {
height: 100%;
height: -webkit-calc(100% - 60px);
height: -moz-calc(100% - 60px);
height: calc(100% - 60px);
}
より少ない使用中に確認してください
height: ~calc(100% - 60px);
そうでなければ、lessはそれを正しくコンパイルしません
これは、提示された質問に正確に答えるわけではありませんが、達成しようとしているのと同じ視覚効果を生み出します。
<style>
body {
border:0;
padding:0;
margin:0;
padding-top:60px;
}
#header {
position:absolute;
top:0;
height:60px;
width:100%;
}
#wrapper {
height:100%;
width:100%;
}
</style>
このようなものはまだ投稿されていませんが、それを公開すると思ったのです。
<div class="main">
<header>Header</header>
<div class="content">Content</div>
それからCSS:
body, html {
height: 100%;
margin: 0;
padding: 0;
}
.main {
height: 100%;
padding-top: 50px;
box-sizing: border-box;
}
header {
height: 50px;
margin-top: -50px;
width: 100%;
background-color: #5078a5;
}
.content {
height: 100%;
background-color: #999999;
}
動作する jsfiddle
注:これに対するブラウザーの互換性が何であるかはわかりません。私は別のソリューションで遊んでいたが、これはうまくいくように思えた。
この例では、さまざまな領域を識別できます。
<html>
<style>
#divContainer {
width: 100%;
height: 100%;
}
#divHeader {
position: absolute;
left: 0px;
top: 0px;
right: 0px;
height: 28px;
background-color:blue;
}
#divContentArea {
position: absolute;
left: 0px;
top: 30px;
right: 0px;
bottom: 30px;
}
#divContentLeft {
position: absolute;
top: 0px;
left: 0px;
width: 200px;
bottom: 0px;
background-color:red;
}
#divContentCenter {
position: absolute;
top: 0px;
left: 200px;
bottom: 0px;
right:200px;
background-color:yellow;
}
#divContentRight {
position: absolute;
top: 0px;
right: 0px;
bottom: 0px;
width:200px;
background-color:red;
}
#divFooter {
position: absolute;
height: 28px;
left: 0px;
bottom: 0px;
right: 0px;
background-color:blue;
}
</style>
<body >
<div id="divContainer">
<div id="divHeader"> top
</div>
<div id="divContentArea">
<div id="divContentLeft">left
</div>
<div id="divContentCenter">center
</div>
<div id="divContentRight">right
</div>
</div>
<div id="divFooter">bottom
</div>
</div>
</body>
</html>