CSS Grid・Flexbox・position: absoluteの比較!body要素の高さを100%に設定する方法

2024-04-02

HTML、CSS、height を使ってブラウザの高さ100%のbodyを作る方法

この解説では、HTMLとCSSを使って、body要素の高さをブラウザの高さ100%に設定する方法を紹介します。

方法

大きく2つの方法があります。

height: 100% を使う

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>100% Height Body</title>
  <style>
    body {
      height: 100%;
    }
  </style>
</head>
<body>
  <h1>ブラウザの高さ100%のbody</h1>
  <p>このページは、body要素の高さを100%に設定することで、ブラウザの高さに合わせて表示されます。</p>
</body>
</html>

この方法では、body要素にheight: 100%を指定することで、body要素の高さをブラウザの高さに設定します。

注意点

この方法は、すべてのブラウザで正しく動作するわけではありません。古いブラウザでは、height: 100%が正しく解釈されない場合があります。

vh単位を使う

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>100% Height Body with vh</title>
  <style>
    body {
      height: 100vh;
    }
  </style>
</head>
<body>
  <h1>ブラウザの高さ100%のbody (vh)</h1>
  <p>このページは、body要素の高さを100vhに設定することで、ブラウザの高さに合わせて表示されます。</p>
</body>
</html>

vhは、viewport heightの略で、ブラウザの高さの1%を表します。

メリット

vh単位を使う方法は、すべてのブラウザで正しく動作します。

vh単位は、ブラウザの高さのみを基準にしているので、スクロールバーの分だけ高さが小さくなります。

height: 100%vh単位のどちらを使うかは、ブラウザの互換性とスクロールバーの有無を考慮して選択する必要があります。

  • height: 100%vh単位以外にも、JavaScriptを使ってbody要素の高さを設定する方法もあります。
  • height: 100%vh単位を組み合わせて使うこともできます。



<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>100% Height Body</title>
  <style>
    body {
      height: 100%;
    }
  </style>
</head>
<body>
  <h1>ブラウザの高さ100%のbody</h1>
  <p>このページは、body要素の高さを100%に設定することで、ブラウザの高さに合わせて表示されます。</p>
</body>
</html>
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>100% Height Body with vh</title>
  <style>
    body {
      height: 100vh;
    }
  </style>
</head>
<body>
  <h1>ブラウザの高さ100%のbody (vh)</h1>
  <p>このページは、body要素の高さを100vhに設定することで、ブラウザの高さに合わせて表示されます。</p>
</body>
</html>
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>100% Height Body with vh and 100%</title>
  <style>
    html,
    body {
      height: 100%;
    }
    body {
      height: 100vh;
    }
  </style>
</head>
<body>
  <h1>ブラウザの高さ100%のbody (vh and 100%)</h1>
  <p>このページは、html要素とbody要素にそれぞれ`height: 100%`と`height: 100vh`を指定することで、ブラウザの高さに合わせて表示されます。</p>
</body>
</html>

JavaScript を使う

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>100% Height Body with JavaScript</title>
</head>
<body>
  <h1>ブラウザの高さ100%のbody (JavaScript)</h1>
  <p>このページは、JavaScriptを使ってbody要素の高さをブラウザの高さに設定しています。</p>
  <script>
    (function () {
      var body = document.body;
      var height = window.innerHeight;
      body.style.height = height + 'px';
    })();
  </script>
</body>
</html>

このサンプルコードでは、html要素とbody要素にそれぞれheight: 100%height: 100vhを指定することで、ブラウザの高さに合わせて表示されます。




CSS Grid を使う

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>100% Height Body with CSS Grid</title>
  <style>
    body {
      display: grid;
      height: 100vh;
    }
  </style>
</head>
<body>
  <h1>ブラウザの高さ100%のbody (CSS Grid)</h1>
  <p>このページは、CSS Gridを使ってbody要素の高さをブラウザの高さに設定しています。</p>
</body>
</html>

Flexbox を使う

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>100% Height Body with Flexbox</title>
  <style>
    body {
      display: flex;
      height: 100vh;
    }
  </style>
</head>
<body>
  <h1>ブラウザの高さ100%のbody (Flexbox)</h1>
  <p>このページは、Flexboxを使ってbody要素の高さをブラウザの高さに設定しています。</p>
</body>
</html>

position: absolute を使う

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>100% Height Body with position: absolute</title>
  <style>
    body {
      position: absolute;
      top: 0;
      left: 0;
      right: 0;
      bottom: 0;
    }
  </style>
</head>
<body>
  <h1>ブラウザの高さ100%のbody (position: absolute)</h1>
  <p>このページは、position: absoluteを使ってbody要素の高さをブラウザの高さに設定しています。</p>
</body>
</html>

各方法のメリットとデメリット

  • レスポンシブデザインに使いやすい
  • 古いブラウザでは対応していない
  • すべてのブラウザで対応している
  • コードが複雑になる

どの方法を使うべきかは、ブラウザの互換性、レスポンシブデザインへの対応、コードのシンプルさなどを考慮して選択する必要があります。

  • どの方法を使う場合でも、html要素とbody要素にmargin: 0;

html css height


画像を思い通りに配置:HTML、CSS、そしてMarkdown記法で実現する画像配置の達人

Markdownは、シンプルな記法で文書を作成できる言語です。画像の挿入も簡単ですが、配置となると少し複雑になります。そこで、HTMLとCSSを用いて、画像を中央揃え、左右揃え、上下揃えなど、自由に配置する方法を紹介します。目次画像の挿入画像の配置 2.1. 中央揃え 2.1.1. Markdown記法 2.1.2. HTML 2.1.3. CSS 2.2. 左右揃え 2.2.1. Markdown記法 2.2.2. HTML 2.2.3. CSS 2.3. 上下揃え 2.3.1. Markdown記法 2.3.2. HTML 2.3.3. CSS...


CSSでテキストをn行に制限する3つの方法とその他のテクニック

CSSを使用して、テキストの長さをn行に制限するには、いくつかの方法があります。overflow プロパティ-webkit-line-clamp プロパティ方法overflow プロパティを使用して、テキストの長さをn行に制限するには、以下の手順を行います。...


CSS擬似要素でHTML要素にHTMLを挿入する方法とは? :before & :afterの活用術

CSSの擬似要素 :before と :after は、既存のHTML要素の前後にコンテンツを挿入するための強力なツールです。この機能を活用することで、装飾やレイアウトをより柔軟かつ効率的に行うことができます。本記事では、:before と :after の基本的な仕組みと、HTML要素にHTMLを挿入する方法について、分かりやすく解説します。...


もう迷わない!input type="date" の日付フォーマット変更完全ガイド

HTMLの<input>要素で type="date" を指定すると、日付入力用のフィールドが表示されます。しかし、デフォルトのフォーマットはブラウザによって異なり、使いにくい場合もあります。そこで、CSSを使って日付フォーマットを自由にカスタマイズする方法を紹介します。...


【初心者向け】Sass変数とcalc()関数でコードを簡潔かつ再利用可能に

CSS calc()関数は、計算に基づいて要素のサイズや位置を動的に設定する強力なツールです。Sass変数をcalc()関数と組み合わせることで、より柔軟で再利用可能なコードを作成できます。Sass変数の使い方Sass変数は、SCSSファイル内で$記号を使って定義できます。例えば、以下のコードは、要素の幅を10pxに設定する変数を定義しています。...