残りの画面スペースの高さをdivで埋めるようにします

2075
Vincent McNabb 2008-09-18 19:06.

コンテンツを画面全体の高さいっぱいに表示したいWebアプリケーションに取り組んでいます。

このページには、ロゴとアカウント情報を含むヘッダーがあります。これは任意の高さにすることができます。contentdivでページの残りの部分を一番下まで埋めてほしい。

ヘッダーdivとコンテンツがありdivます。現時点では、次のようなレイアウトにテーブルを使用しています。

CSSとHTML

#page {
    height: 100%; width: 100%
}

#tdcontent {
    height: 100%;
}

#content {
    overflow: auto; /* or overflow: hidden; */
}
<table id="page">
    <tr>
        <td id="tdheader">
            <div id="header">...</div>
        </td>
    </tr>
    <tr>
        <td id="tdcontent">
            <div id="content">...</div>
        </td>
    </tr>
</table>

ページの高さ全体が埋められ、スクロールする必要はありません。

content div内のすべての場合、設定top: 0;するとヘッダーのすぐ下に配置されます。コンテンツは、高さが100%に設定された実際のテーブルになる場合があります。置くheader内部はcontent仕事にこれを許可しません。

を使用せずに同じ効果を達成する方法はありtableますか?

更新:

コンテンツ内の要素のdiv高さもパーセンテージに設定されます。したがって、100%内側の何かdivがそれを底まで満たします。50%の2つの要素もそうです。

アップデート2:

たとえば、ヘッダーが画面の高さの20%を占める場合、内部の50%で指定されたテーブル#contentは、画面スペースの40%を占めます。これまでのところ、機能するのはテーブル全体をラップすることだけです。

30 answers

1257
Pebbl 2014-07-27 22:14.

2015年の更新:フレックスボックスアプローチ

フレックスボックスについて簡単に言及している他の2つの答えがあります。ただし、それは2年以上前のことであり、例は示されていません。フレックスボックスの仕様は確実に決着しました。

注:CSSフレキシブルボックスレイアウト仕様は候補推奨段階にありますが、すべてのブラウザーがそれを実装しているわけではありません。WebKitの実装には接頭辞-webkit-を付ける必要があります。Internet Explorerは、接頭辞-ms-が付いた古いバージョンの仕様を実装しています。Opera 12.10は、プレフィックスなしの最新バージョンの仕様を実装しています。最新の互換性ステータスについては、各プロパティの互換性テーブルを参照してください。

(から取得 https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Flexible_boxes)

すべての主要なブラウザとIE11 +はFlexboxをサポートしています。IE 10以前の場合、FlexieJSシムを使用できます。

現在のサポートを確認するには、こちらもご覧ください。 http://caniuse.com/#feat=flexbox

実例

flexboxを使用すると、固定サイズ、コンテンツサイズのサイズ、または残りのスペースのサイズのいずれかを持つ行または列を簡単に切り替えることができます。私の例では、ヘッダーをそのコンテンツにスナップするように設定し(OPの質問に従って)、固定高さの領域を追加する方法を示すフッターを追加してから、残りのスペースを埋めるようにコンテンツ領域を設定しました。

html,
body {
  height: 100%;
  margin: 0;
}

.box {
  display: flex;
  flex-flow: column;
  height: 100%;
}

.box .row {
  border: 1px dotted grey;
}

.box .row.header {
  flex: 0 1 auto;
  /* The above is shorthand for:
  flex-grow: 0,
  flex-shrink: 1,
  flex-basis: auto
  */
}

.box .row.content {
  flex: 1 1 auto;
}

.box .row.footer {
  flex: 0 1 40px;
}
<!-- Obviously, you could use HTML5 tags like `header`, `footer` and `section` -->

<div class="box">
  <div class="row header">
    <p><b>header</b>
      <br />
      <br />(sized to content)</p>
  </div>
  <div class="row content">
    <p>
      <b>content</b>
      (fills remaining space)
    </p>
  </div>
  <div class="row footer">
    <p><b>footer</b> (fixed height)</p>
  </div>
</div>

上記のCSSでは、flexプロパティは、flex-grow、flex-shrink、およびflex-basisプロパティを省略して、flexアイテムの柔軟性を確立します。Mozillaには、フレキシブルボックスモデルの優れた入門書があります。

237
NICCAI 2008-09-18 22:16.

CSSでこれを行うための健全なクロスブラウザの方法は実際にはありません。レイアウトが複雑であると仮定すると、JavaScriptを使用して要素の高さを設定する必要があります。あなたがする必要があることの本質は次のとおりです:

Element Height = Viewport height - element.offset.top - desired bottom margin

この値を取得して要素の高さを設定できたら、サイズ変更関数を起動できるように、イベントハンドラーをウィンドウのonloadとonresizeの両方にアタッチする必要があります。

また、コンテンツがビューポートよりも大きくなる可能性がある場合は、overflow-yを設定してスクロールする必要があります。

175
h--n 2011-10-22 05:02.

元の投稿は3年以上前です。私のようにこの投稿に来る多くの人は、アプリのようなレイアウトソリューションを探していると思います。たとえば、ヘッダー、フッター、フルハイトのコンテンツが残りの画面を占めるように固定されています。もしそうなら、この投稿は役立つかもしれません、それはIE7 +などで動作します。

http://blog.stevensanderson.com/2011/10/05/full-height-app-layouts-a-css-trick-to-make-it-easier/

そして、ここにその投稿からのいくつかの抜粋があります:

@media screen { 
  
  /* start of screen rules. */ 
  
  /* Generic pane rules */
  body { margin: 0 }
  .row, .col { overflow: hidden; position: absolute; }
  .row { left: 0; right: 0; }
  .col { top: 0; bottom: 0; }
  .scroll-x { overflow-x: auto; }
  .scroll-y { overflow-y: auto; }

  .header.row { height: 75px; top: 0; }
  .body.row { top: 75px; bottom: 50px; }
  .footer.row { height: 50px; bottom: 0; }
  
  /* end of screen rules. */ 
}
<div class="header row" style="background:yellow;">
    <h2>My header</h2>
</div> 
<div class="body row scroll-y" style="background:lightblue;">
    <p>The body</p>
</div> 
<div class="footer row" style="background:#e9e9e9;">
    My footer
</div>

148
Danield 2013-06-07 01:20.

マークアップでテーブルを使用する代わりに、CSSテーブルを使用できます。

マークアップ

<body>    
    <div>hello </div>
    <div>there</div>
</body>

(関連)CSS

body
{
    display:table;
    width:100%;
}
div
{
    display:table-row;
}
div+ div
{
    height:100%;  
}

FIDDLE1およびFIDDLE2

この方法のいくつかの利点は次のとおりです。

1)マークアップが少ない

2)マークアップは表形式のデータではないため、テーブルよりもセマンティックです。

3)ブラウザのサポートは非常に優れています:IE8 +、すべての最新のブラウザとモバイルデバイス(caniuse)


完全を期すために、CSSテーブルモデルのcssプロパティと同等のHtml要素を 次に示します。

table    { display: table }
tr       { display: table-row }
thead    { display: table-header-group }
tbody    { display: table-row-group }
tfoot    { display: table-footer-group }
col      { display: table-column }
colgroup { display: table-column-group }
td, th   { display: table-cell }
caption  { display: table-caption } 
107
Mr. Alien 2014-04-28 02:05.

CSSのみのアプローチ(高さがわかっている/固定されている場合)

中央の要素をページ全体に垂直にまたがらせたい場合calc()は、CSS3で導入されたものを使用できます。

高さ headerfooter要素が固定されていて、sectionタグが使用可能な垂直方向の高さ全体を占めるようにする必要があると仮定します...

デモ

想定されるマークアップとCSSは

html,
body {
  height: 100%;
}

header {
  height: 100px;
  background: grey;
}

section {
  height: calc(100% - (100px + 150px));
  /* Adding 100px of header and 150px of footer */
  background: tomato;
}

footer {
  height: 150px;
  background-color: blue;
}
<header>100px</header>
<section>Expand me for remaining space</section>
<footer>150px</footer>

つまり、ここで行っているのは、要素の高さを合計し、関数の100%使用から差し引くcalc()ことです。

height: 100%;親要素には必ずを使用してください。

61
nguyên 2016-05-22 17:20.

中古: height: calc(100vh - 110px);

コード:

  
.header { height: 60px; top: 0; background-color: green}
.body {
    height: calc(100vh - 110px); /*50+60*/
    background-color: gray;
}
.footer { height: 50px; bottom: 0; }
  
<div class="header">
    <h2>My header</h2>
</div> 
<div class="body">
    <p>The body</p>
</div> 
<div class="footer">
    My footer
</div>

53
zok 2015-02-28 08:21.

フレックスボックスを使用した簡単なソリューション:

html,
body {
  height: 100%;
}

body {
  display: flex;
  flex-direction: column;
}

.content {
  flex-grow: 1;
}
<body>
  <div>header</div>
  <div class="content"></div>
</body>

Codepenサンプル

コンテンツdiv内にdivを中央に配置した代替ソリューション

42
Alireza 2017-06-18 08:19.

どのように単に使用についてvhの略view heightCSS ...

以下で作成したコードスニペットを見て、実行します。

body {
  padding: 0;
  margin: 0;
}

.full-height {
  width: 100px;
  height: 100vh;
  background: red;
}
<div class="full-height">
</div>

また、私があなたのために作成した下の画像を見てください:

36
dev.meghraj 2015-08-25 02:57.

CSS3の簡単な方法

height: calc(100% - 10px); // 10px is height of your first div...

最近のすべての主要なブラウザはそれをサポートしているので、ビンテージブラウザをサポートする必要がない場合は先に進んでください。

31
Ormoz 2014-09-15 11:09.

それは純粋に以下をCSS使用して行うことができますvh

#page {
    display:block; 
    width:100%; 
    height:95vh !important; 
    overflow:hidden;
}

#tdcontent {
    float:left; 
    width:100%; 
    display:block;
}

#content {      
    float:left; 
    width:100%; 
    height:100%; 
    display:block; 
    overflow:scroll;
}

そしてその HTML

<div id="page">

   <div id="tdcontent"></div>
   <div id="content"></div>

</div>

:私は、それはすべての主要なブラウザで動作し、それを確認しChromeIEし、FireFox

29
John Kurlak 2015-02-21 07:12.

コンテンツが高すぎるときに下のdivをスクロールする必要がある場合、投稿されたソリューションはどれも機能しません。その場合に機能するソリューションは次のとおりです。

.table {
  display: table;
}

.table-row {
  display: table-row;
}

.table-cell {
  display: table-cell;
}

.container {
  width: 400px;
  height: 300px;
}

.header {
  background: cyan;
}

.body {
  background: yellow;
  height: 100%;
}

.body-content-outer-wrapper {
  height: 100%;
}

.body-content-inner-wrapper {
  height: 100%;
  position: relative;
  overflow: auto;
}

.body-content {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
}
<div class="table container">
  <div class="table-row header">
    <div>This is the header whose height is unknown</div>
    <div>This is the header whose height is unknown</div>
    <div>This is the header whose height is unknown</div>
  </div>
  <div class="table-row body">
    <div class="table-cell body-content-outer-wrapper">
      <div class="body-content-inner-wrapper">
        <div class="body-content">
          <div>This is the scrollable content whose height is unknown</div>
          <div>This is the scrollable content whose height is unknown</div>
          <div>This is the scrollable content whose height is unknown</div>
          <div>This is the scrollable content whose height is unknown</div>
          <div>This is the scrollable content whose height is unknown</div>
          <div>This is the scrollable content whose height is unknown</div>
          <div>This is the scrollable content whose height is unknown</div>
          <div>This is the scrollable content whose height is unknown</div>
          <div>This is the scrollable content whose height is unknown</div>
          <div>This is the scrollable content whose height is unknown</div>
          <div>This is the scrollable content whose height is unknown</div>
          <div>This is the scrollable content whose height is unknown</div>
          <div>This is the scrollable content whose height is unknown</div>
          <div>This is the scrollable content whose height is unknown</div>
          <div>This is the scrollable content whose height is unknown</div>
          <div>This is the scrollable content whose height is unknown</div>
          <div>This is the scrollable content whose height is unknown</div>
          <div>This is the scrollable content whose height is unknown</div>
        </div>
      </div>
    </div>
  </div>
</div>

元のソース:CSSでオーバーフローを処理しながらコンテナの残りの高さを埋める

JSFiddleライブプレビュー

26
Chris 2011-04-12 05:48.

私もこれに対する答えを探していました。幸運にもIE8以降をターゲットにできる場合はdisplay:table、および関連する値を使用して、divを含むブロックレベルの要素を持つテーブルのレンダリングルールを取得できます。

さらに運が良ければ、ユーザーが一流のブラウザーを使用している場合(たとえば、これが私の最新のプロジェクトのように、制御するコンピューター上のイントラネットアプリである場合)、CSS3の新しいフレキシブルボックスレイアウトを使用できます。

23
Michael P. Bazos 2016-01-04 07:16.

免責事項:受け入れられた答えは解決策のアイデアを与えますが、私はそれが不必要なラッパーとcssルールで少し肥大化していることに気づいています。以下は、cssルールがほとんどないソリューションです。

HTML 5

<body>
    <header>Header with an arbitrary height</header>
    <main>
        This container will grow so as to take the remaining height
    </main>
</body>

CSS

body {
  display: flex;
  flex-direction: column;
  min-height: 100vh;       /* body takes whole viewport's height */
}

main {
  flex: 1;                 /* this will make the container take the free space */
}

上記のソリューションはビューポートユニットとフレックスボックスを使用しているため、IE10 +であり、IE10の古い構文を使用できます。

遊ぶCodepen:codepenへのリンク

または、これは、コンテンツがオーバーフローした場合にメインコンテナをスクロール可能にする必要がある場合:codepenへのリンク

22

私にとってうまくいったのは(別のdiv内のdivで、他のすべての状況では想定しています)、下部のパディングを100%に設定することです。つまり、これをcss /スタイルシートに追加します。

padding-bottom: 100%;
20
puiu 2015-10-31 05:39.

現在、たくさんの答えがありますが、height: 100vh;使用可能な垂直方向のスペース全体を埋める必要があるdiv要素で作業するために使用していることがわかりました。

このように、私はディスプレイやポジショニングをいじくり回す必要はありません。これは、Bootstrapを使用して、サイドバーとメインがあるダッシュボードを作成するときに便利でした。背景色を適用できるように、メインを縦のスペース全体に伸ばして塗りつぶしたかったのです。

div {
    height: 100vh;
}

IE9以降をサポート:クリックしてリンクを表示

15
Jerph 2008-09-18 20:01.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test</title>
<style type="text/css">
body
,html
{
    height: 100%;
    margin: 0;
    padding: 0;
    color: #FFF;
}

#header
{
    float: left;
    width: 100%;
    background: red;
}

#content
{
    height: 100%;
    overflow: auto;
    background: blue;
}

</style>
</head>
<body>

    <div id="content">
        <div id="header">
                Header
                <p>Header stuff</p>
        </div>
            Content
            <p>Content stuff</p>
    </div>

</body>
</html>

すべての正常なブラウザでは、コンテンツの前に兄弟として「ヘッダー」divを配置でき、同じCSSが機能します。ただし、フロートが100%の場合、IE7-は高さを正しく解釈しないため、上記のようにヘッダーをコンテンツ内に含める必要があります。オーバーフロー:autoはIEで二重スクロールバーを引き起こします(常にビューポートスクロールバーは表示されますが、無効になっています)が、それがないと、コンテンツはオーバーフローするとクリップします。

13
Mikko Rantalainen 2013-05-04 00:55.

古いブラウザ(つまり、MSIE 9以前)をサポートしていないことに対処できる場合は、すでにW3CCRであるFlexibleBox LayoutModuleを使用してこれを行うことができます。このモジュールでは、コンテンツの並べ替えなど、他の優れたトリックも使用できます。

残念ながら、MSIE 9以下はこれをサポートしておらず、Firefox以外のすべてのブラウザのCSSプロパティにベンダープレフィックスを使用する必要があります。うまくいけば、他のベンダーもすぐにプレフィックスを削除します。

もう1つの選択肢はCSSグリッドレイアウトですが、安定したバージョンのブラウザーからのサポートはさらに少なくなります。実際には、MSIE10のみがこれをサポートしています。

2020年の更新:すべての最新のブラウザはdisplay: flexとの両方をサポートしていdisplay: gridます。不足しているのはsubgrid、Firefoxでのみサポートされているサポートだけです。MSIEは仕様によってもサポートされていませんが、MSIE固有のCSSハックを追加する場合は、動作させることができます。マイクロソフトでさえもう使用すべきではないと言っているので、MSIEを単に無視することをお勧めします。

12
Paulie_D 2017-07-05 04:27.

CSSグリッドソリューション

bodywithdisplay:gridgrid-template-rowsusingautoおよびfrvalueプロパティを定義するだけです。

* {
  margin: 0;
  padding: 0;
}

html {
  height: 100%;
}

body {
  min-height: 100%;
  display: grid;
  grid-template-rows: auto 1fr auto;
}

header {
  padding: 1em;
  background: pink;
}

main {
  padding: 1em;
  background: lightblue;
}

footer {
  padding: 2em;
  background: lightgreen;
}

main:hover {
  height: 2000px;
  /* demos expansion of center element */
}
<header>HEADER</header>
<main>MAIN</main>
<footer>FOOTER</footer>

グリッドの完全ガイド@ CSS-Tricks.com

11
B_G 2011-06-20 23:36.

私はしばらくこれと格闘し、次のようになりました:

コンテンツDIVを親と同じ高さにするのは簡単ですが、親の高さからヘッダーの高さを引いたものにするのは明らかに難しいので、コンテンツdivを完全な高さにすることにしましたが、絶対に左上隅に配置してからパディングを定義しますヘッダーの高さがある上部の場合。このようにして、コンテンツはヘッダーの下にきれいに表示され、残りのスペース全体を埋めます。

body {
    padding: 0;
    margin: 0;
    height: 100%;
    overflow: hidden;
}

#header {
    position: absolute;
    top: 0;
    left: 0;
    height: 50px;
}

#content {
    position: absolute;
    top: 0;
    left: 0;
    padding-top: 50px;
    height: 100%;
}
9
Thaoms 2012-02-20 23:21.

なぜこのようにしないのですか?

html, body {
    height: 100%;
}

#containerInput {
    background-image: url('../img/edit_bg.jpg');
    height: 40%;
}

#containerControl {
    background-image: url('../img/control_bg.jpg');
    height: 60%;
}

htmlとbody(この順序で)に高さを与えてから、要素に高さを与えますか?

私のために働く

9
Zohab Ali 2018-03-24 00:43.
 style="height:100vh"

私のために問題を解決しました。私の場合、これを必要なdivに適用しました

8
Greg 2013-07-06 11:17.

実際に使用display: tableして、領域を2つの要素(ヘッダーとコンテンツ)に分割できます。ヘッダーの高さはさまざまで、コンテンツが残りのスペースを埋めます。ページ全体でこれは作品だけでなく、面積は単純に位置する他の要素の内容であるpositionにセットrelativeabsoluteまたはfixed。親要素の高さがゼロ以外である限り、機能します。

このフィドルと以下のコードも参照してください。

CSS:

body, html {
    height: 100%;
    margin: 0;
    padding: 0;
}

p {
    margin: 0;
    padding: 0;
}

.additional-padding {
    height: 50px;
    background-color: #DE9;
}

.as-table {
    display: table;
    height: 100%;
    width: 100%;
}

.as-table-row {
    display: table-row;
    height: 100%;
}

#content {
    width: 100%;
    height: 100%;
    background-color: #33DD44;
}

HTML:

<div class="as-table">
    <div id="header">
        <p>This header can vary in height, it also doesn't have to be displayed as table-row. It will simply take the necessary space and the rest below will be taken by the second div which is displayed as table-row. Now adding some copy to artificially expand the header.</p>
        <div class="additional-padding"></div>
    </div>
    <div class="as-table-row">
        <div id="content">
            <p>This is the actual content that takes the rest of the available space.</p>
        </div>
    </div>
</div>
6
Jerph 2008-09-19 07:52.

ヴィンセント、私はあなたの新しい要件を使ってもう一度答えます。コンテンツが長すぎても非表示になることは気にしないので、ヘッダーをフロートする必要はありません。オーバーフローをhtmlタグとbodyタグに隠し、#content高さを100%に設定するだけです。コンテンツは常にヘッダーの高さだけビューポートより長くなりますが、非表示になり、スクロールバーは発生しません。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Test</title>
    <style type="text/css">
    body, html {
      height: 100%;
      margin: 0;
      padding: 0;
      overflow: hidden;
      color: #FFF;
    }
    p {
      margin: 0;
    }

    #header {
      background: red;
    }

    #content {
      position: relative;
      height: 100%;
      background: blue;
    }

    #content #positioned {
      position: absolute;
      top: 0;
      right: 0;
    }
  </style>
</head>

<body>
  <div id="header">
    Header
    <p>Header stuff</p>
  </div>

  <div id="content">
    Content
    <p>Content stuff</p>
    <div id="positioned">Positioned Content</div>
  </div>

</body>
</html>
5
Arun 2013-04-28 01:45.

これを試して

var sizeFooter = function(){
    $(".webfooter") .css("padding-bottom", "0px") .css("padding-bottom", $(window).height() - $("body").height()) } $(window).resize(sizeFooter);
5
grinmax 2017-02-02 05:59.

モバイルアプリの場合、VHとVWのみを使用します

<div class="container">
  <div class="title">Title</div>
  <div class="content">Content</div>
  <div class="footer">Footer</div>
</div>

.container {
  width: 100vw;
  height: 100vh;
  font-size: 5vh;
}

.title {
  height: 20vh;
  background-color: red;
}

.content {
  height: 60vh;
  background: blue;
}

.footer {
  height: 20vh;
  background: green;
}

デモ - https://jsfiddle.net/u763ck92/

5
Michael Schade 2020-04-15 11:12.

これは、Pebblのソリューションの私自身の最小バージョンです。IE11で動作させるための秘訣を見つけるために永遠にかかりました。(Chrome、Firefox、Edge、Safariでもテスト済みです。)

<!DOCTYPE html>
<html>
<head>
<style>
html {
    height: 100%;
    }
body {
    height: 100%;
    margin: 0;
    }
section {
    display: flex;
    flex-direction: column;
    height: 100%;
    }
div:first-child {
    background: gold;
    }
div:last-child {
    background: plum;
    flex-grow: 1;
    }
</style>
</head>
<body>
    <section>
      <div>FIT</div>
      <div>GROW</div>
    </section>
</body>
</html>
4
htho 2012-09-14 22:02.

私にとってそれは単なる設計上の問題だったので、私は非常に単純な解決策を見つけました。ページの残りの部分が赤いフッターの下で白くならないようにしたかったのです。だから私はページの背景色を赤に設定しました。そして中身の背景色を白に。内容物の高さを例えばに設定します。20emまたは50%のほぼ空のページでは、ページ全体が赤くなりません。

4
Anthony Brenelière 2016-08-26 06:13.

私は同じ問題を抱えていましたが、上記のフレックスボックスで解決策を実行することができませんでした。そこで、次のような独自のテンプレートを作成しました。

  • 固定サイズの要素を持つヘッダー
  • フッター
  • 残りの高さを占めるスクロールバー付きのサイドバー
  • コンテンツ

私はフレックスボックスを使用しましたが、より簡単な方法で、プロパティdisplay:flexflex-direction:row | column:のみを使用しました。

私はAngularを使用していますが、コンポーネントのサイズを親要素の100%にしたいです。

重要なのは、サイズを制限するために、すべての親のサイズ(パーセント単位)を設定することです。次の例では、myappの高さはビューポートの100%です。

ヘッダーとフッターが5%であるため、メインコンポーネントにはビューポートの90%があります。

ここにテンプレートを投稿しました: https://jsfiddle.net/abreneliere/mrjh6y2e/3

       body{
        margin: 0;
        color: white;
        height: 100%;
    }
    div#myapp
    {
        display: flex;
        flex-direction: column;
        background-color: red; /* <-- painful color for your eyes ! */
        height: 100%; /* <-- if you remove this line, myapp has no limited height */
    }
    div#main /* parent div for sidebar and content */
    {
        display: flex;
        width: 100%;
        height: 90%; 
    }
    div#header {
        background-color: #333;
        height: 5%;
    }
    div#footer {
        background-color: #222;
        height: 5%;
    }
    div#sidebar {
        background-color: #666;
        width: 20%;
        overflow-y: auto;
     }
    div#content {
        background-color: #888;
        width: 80%;
        overflow-y: auto;
    }
    div.fized_size_element {
        background-color: #AAA;
        display: block;
        width: 100px;
        height: 50px;
        margin: 5px;
    }

HTML:

<body>
<div id="myapp">
    <div id="header">
        HEADER
        <div class="fized_size_element"></div>

    </div>
    <div id="main">
        <div id="sidebar">
            SIDEBAR
            <div class="fized_size_element"></div>
            <div class="fized_size_element"></div>
            <div class="fized_size_element"></div>
            <div class="fized_size_element"></div>
            <div class="fized_size_element"></div>
            <div class="fized_size_element"></div>
            <div class="fized_size_element"></div>
            <div class="fized_size_element"></div>
        </div>
        <div id="content">
            CONTENT
        </div>
    </div>
    <div id="footer">
        FOOTER
    </div>
</div>
</body>
4
Pat M 2016-07-02 10:53.

エイリアン氏のアイデアをスピンオフ...

これは、CSS3対応ブラウザ用の一般的なフレックスボックスよりもクリーンなソリューションのようです。

コンテンツブロックにcalc()を指定して(高さではなく)min-heightを使用するだけです。

calc()は100%で始まり、ヘッダーとフッターの高さを減算します(パディング値を含める必要があります)

「height」の代わりに「min-height」を使用すると、JavaScriptでレンダリングされたコンテンツやAngular2などのJSフレームワークで機能するため、特に便利です。それ以外の場合、JavaScriptでレンダリングされたコンテンツが表示されると、計算によってフッターがページの下部にプッシュされません。

これは、両方に50pxの高さと20pxのパディングを使用したヘッダーとフッターの簡単な例です。

HTML:

<body>
    <header></header>
    <div class="content"></div>
    <footer></footer>
</body>

Css:

.content {
    min-height: calc(100% - (50px + 20px + 20px + 50px + 20px + 20px));
}

もちろん、数学は単純化することができますが、あなたは考えを理解します...

4
gadolf 2020-02-26 11:16.

ブートストラップの場合:

CSSスタイル:

html, body {
    height: 100%;
}

1)残りの画面スペースの高さを埋めるだけです。

<body class="d-flex flex-column">
  <div class="d-flex flex-column flex-grow-1>

    <header>Header</header>
    <div>Content</div>
    <footer class="mt-auto">Footer</footer>

  </div>
</body>


2)残りの画面スペースの高さを埋め、コンテンツを親要素の中央に揃えます。

<body class="d-flex flex-column">
  <div class="d-flex flex-column flex-grow-1">

    <header>Header</header>
    <div class="d-flex flex-column flex-grow-1 justify-content-center">Content</div>
    <footer class="mt-auto">Footer</footer>

  </div>
</body>

Related questions

MORE COOL STUFF

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは、夫に会ったとき、典型的な交際のアドバイスに逆らいました。

マイケルシーンが非営利の俳優である理由

マイケルシーンが非営利の俳優である理由

マイケルシーンは非営利の俳優ですが、それは正確にはどういう意味ですか?

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

特徴的なスターのコリン・エッグレスフィールドは、RomaDrama Liveでのスリル満点のファンとの出会いについて料理しました!加えて、大会での彼のINSPIREプログラム。

「たどりつけば」をオンラインでストリーミングできない理由

「たどりつけば」をオンラインでストリーミングできない理由

ノーザンエクスポージャーが90年代の最も人気のある番組の1つになった理由を確認するには、Blu-rayまたはDVDプレーヤーをほこりで払う必要があります。

バイオニック読書はあなたをより速く読むことができますか?

バイオニック読書はあなたをより速く読むことができますか?

BionicReadingアプリの人気が爆発的に高まっています。しかし、それは本当にあなたを速読術にすることができますか?

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖は、世界で2番目に大きいボイリング湖です。そこにたどり着くまでのトレッキングは大変で長いですが、努力する価値は十分にあります。

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

サロンからのヘアトリミングや個人的な寄付は、油流出を吸収して環境を保護するのに役立つマットとして再利用できます。

ホワイトハウスの最も記憶に残る結婚式を見てください

ホワイトハウスの最も記憶に残る結婚式を見てください

過去200年以上の間にホワイトハウスで結婚したのはほんの数人です。彼らは誰でしたか、そしてそこで結婚式を獲得するために何が必要ですか?

ねえNFL、ジョーバロウとカイラーマレーは女性の権利をサポートするために少しの助けを使うことができます

ねえNFL、ジョーバロウとカイラーマレーは女性の権利をサポートするために少しの助けを使うことができます

ジョー・バロウロー対ウェイド事件の転覆に対応するNFLは、言葉を言わないことで、腹立たしいが予測可能なPRの結果でした。

別の日、別のヒンジのないLIV記者会見

別の日、別のヒンジのないLIV記者会見

(lから)パット・ペレス、ブルックス・ケプカ、パトリック・リードサウジアラビアのLIVゴルフリーグのさらに別の信じられないほどの記者会見で、スポーツのファンはブルックス・ケプカからでたらめな吐き気と質問回避の驚異的なマスタークラスを受けました。パトリックリード、ブライソンデシャンボー、パットペレス、最近のPGAツアーの脱北者。

ミズ・マーベルの家族の帰郷は悪役よりも激しく打撃を与える

ミズ・マーベルの家族の帰郷は悪役よりも激しく打撃を与える

レッドダガーとマーベルさんがチームを組んでいます。

6億7500万ドルのビットコインローンのデフォルト後にすべての資産を清算するように命じられたスリーアローズキャピタル

6億7500万ドルのビットコインローンのデフォルト後にすべての資産を清算するように命じられたスリーアローズキャピタル

暗号業界最大の沈没船の1つであるスリーアローズキャピタルは、ついにその悲惨さから解放されています。火曜日に、不良債権ヘッジファンドは、債権者からの返済を要求する訴訟の高まりに応えて、バージンアイランド裁判所によって清算を命じられました彼らが3ACに行ったローン。

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya shared a sweet photo in honor of boyfriend Tom Holland's 26th birthday Wednesday

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

シーレン「Ms.JuicyBaby」ピアソンは、先月脳卒中で入院した後、「もう一度たくさんのことをする方法を学ばなければならない」ため、言語療法を受けていることを明らかにしました。

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

オスカー受賞者の世紀半ばの家には、3つのベッドルーム、2つのバス、オーシャンフロントの景色があります。

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、生後4か月の娘、モナコに母乳育児をしていると語った。

Suffragettes Indicam #3: Junho

Suffragettes Indicam #3: Junho

Mais um mês se findando — e metade do ano de 2022 já passou. Sabe o que isso significa? Não, não é hora de verificar se você está cumprindo com suas resoluções de Ano Novo.

多元宇宙—Junø

多元宇宙—Junø

チェーン間アカウントがJunoに登場します。異なるブロックチェーン間でスマートコントラクトの構成可能性と真の相互運用性を提供します。

#brand【ベター・コール・ソール!アメリカのテレビシリーズ「ブレイキング・バッド」に最高のビジネス例が隠されている】・・・ルールクリエイティブ

#brand【ベター・コール・ソール!アメリカのテレビシリーズ「ブレイキング・バッド」に最高のビジネス例が隠されている】・・・ルールクリエイティブ

1.ドラマを見た後、起業する考えはありますか?あなたのビジネスはボトルネックに遭遇しましたか?方向性がなくてわからない場合は、ドラマを追いかけて行くことを心からお勧めします。(?)ブラフではなく、最も完璧なビジネス例を隠すドラマがあります。2.ブレイキング・バッドとその弁護士ドラマ「ブレイキング・バッド」を見た友人たちは、演劇の中で、穏やかな表情で、弁護士のソウル・グッドマンに深く感銘を受けなければなりません。口を開けて、感覚の弱い傭兵の性格を持っています。道徳の面で、サル・グッドマンは無意識のうちに劇に欠かせない役割を果たし、彼自身のシリーズ「絶望的な弁護士」(ベター・コール・ソール)を生み出しました。ウェントウのテキストとビデオは、劇中のソウル・グッドマンのテレビコマーシャルです。製品(サービス)、競争戦略、市場ポジショニング、ブランド名、ターゲット顧客グループ、コミュニケーション軸から広告まで、サル・グッドマンの役割のビジネス設定は、「最低」と見なすことができる超超超超超超完全です。ブランドコミュニケーションのコスト」「変化」のモデル。なぜ?私の分析をご覧ください。3.ソウル・グッドマンの「事業戦略」1.基本情報ブランド名:Saul Goodman製品:法律相談サービス対象顧客:麻薬中毒、飲酒運転、事故など。法律知識の欠如は、一般的に公立弁護士にしか余裕がなく、真面目な弁護士も「特別な法律を持つ消費者」を避けます。恐れてはいけない「​​ニーズ」。コミュニケーションの主軸:この国のすべての男性、女性、子供は有罪判決を受けるまで無実だと思います。地域:アルバカーキ市スローガン:Thrallに電話したほうがいいです!(ベター・コール・ソール)広告:2つの可能性のある犯罪状況をシミュレートします+サウルの主張+サウルのスローガン2をより適切に呼び出します。

メインネットガイド— Arbitrum Odyssey Week 2

メインネットガイド— Arbitrum Odyssey Week 2

最新のアップデートを受け取るために私たちに従ってください。ニュースレター:https://www。

Language