212

2つのdivを隣り合わせに含むラッパーdivがあります。このコンテナの上に、ヘッダーを含むdivがあります。ラッパーdivは、100%からヘッダーの高さを引いたものでなければなりません。ヘッダーは約60ピクセルです。これは修正されました。だから私の質問は:ラッパーdivの高さを100%から60ピクセルを引いたものに設定するにはどうすればよいですか?

<div id="header"></div>
<div id="wrapper">
  <div id="left"></div>
  <div id="right"></div>
</div>
4

11 に答える 11

314

CSS3では、使用できます

height: calc(100% - 60px);
于 2013-02-05T21:58:32.340 に答える
80

これは、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>

于 2009-07-28T10:46:35.600 に答える
47

IE6 をサポートする必要がある場合は、JavaScript を使用して、ラッパー div のサイズを管理します (ウィンドウ サイズを読み取った後、要素の位置をピクセル単位で設定します)。JavaScript を使用したくない場合、これは実行できません。回避策はありますが、すべてのケースとすべてのブラウザーで機能するようになるまでに 1 ~ 2 週間かかります。

他の最新のブラウザーでは、次の css を使用します。

position: absolute;
top: 60px;
bottom: 0px;
于 2009-07-28T08:53:17.903 に答える
6

すばらしい...今、私は% he he he ...の使用をやめました...以下に示すメインコンテナを除いて:

<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;
}

既知のすべてのブラウザでこれをテストし、正常に動作しています。この方法を使用する欠点はありますか?

于 2010-09-10T15:26:16.383 に答える
0

このような投稿はまだ見たことがありませんが、投稿したいと思いました。

<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があります

注: これに対するブラウザの互換性についてはわかりません。私は別のソリューションをいじっていましたが、これはうまくいくようでした。

于 2015-03-05T22:59:25.900 に答える
0

この例では、さまざまな領域を識別できます。

<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>
于 2013-01-14T21:39:36.213 に答える
0

これは、提起された質問に正確に答えるものではありませんが、達成しようとしているのと同じ視覚効果を生み出します。

<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>
于 2009-07-28T16:36:39.383 に答える
-1

100% に設定された外側のラッパー div を使用すると、内側のラッパー div 100% がそれに対して相対的になるはずです。

私は確かにこれが私のために働いていたと思っていましたが、明らかにそうではありませんでした:

<html>
<body>
<div id="outerwrapper" style="border : 1px solid red ; height : 100%">
<div id="header" style="border : 1px solid blue ; height : 60px"></div>
<div id="wrapper"  style="border : 1px solid green ; height : 100% ; overflow : scroll ;">
  <div id="left" style="height : 100% ; width : 50% ; overflow : scroll; float : left ; clear : left ;">Some text 

on the left</div>
  <div id="right" style="height : 100% ; width 50% ; overflow : scroll; float : left ;">Some Text on the 

right</div>
</div>
</div>
</body>
</html>
于 2009-07-28T09:55:41.927 に答える
-2

絶対配置とそのすべてのジャズを使用したくない場合は、次の修正を使用したいと思います。

あなたのhtml:

<body>    
   <div id="header"></div>
   <div id="wrapper"></div>
</body>

あなたのCSS:

body {
     height:100%;
     padding-top:60px;
}
#header {
     margin-top:60px;
     height:60px;
}
#wrapper {
     height:100%;
}
于 2011-08-24T18:53:05.950 に答える