CSSのgrid layoutを使って画面を縦に分割する

自分は基本的にはバックエンドエンジニアなんですが、GWだし時間あるしフロントエンドも触ってみようかなと思って触ってみました。

CSSとかほぼ初めて触ったので、初心者が躓くところすべてに躓いてる感あるので、もう躓かないように備忘録がてら記事にしておきます。(なので、初心者丸出しの記事になります)

やりたいこと

こんな感じで、画面の領域を上下に分割したいのです。

実現方法

基本方針

表題の通りgrid layoutを使用します。grid layoutは2次元のレイアウトをするための機能で、\(n\)行\(m\)列に画面を分割できます。

なので、この機能を使って画面を2行1列に分割してやります。

まずは、下記のようなhtmlファイルを用意します。

<!DOCTYPE html>
<html lang="ja"> 
  <head>
    <meta charset="utf8">
    <link rel="stylesheet" type="text/css" href="sample.css"> 
    <title>sample html</title>
  </head> 
  <body>
    <div class="grid-area">
      <div class="top-area">
        Top
      </div>
      <div class="bottom-area">
        Bottom
      </div>
    </div>
  </body>
</html>

そして、このようなCSSを用意してやると、上側と下側が8:2の割合で分割されると思います。

.grid-area {
  display: grid;
  height: 100vh;                /* grid全体の高さを設定 */
  grid-template-rows: 80% 20%;  /* gridの割合が8:2になるよう2行用意 */
  grid-template-columns: 100%;  /* 横幅いっぱいに1列用意 */
}

.top-area {
  grid-row: 1;
  grid-column: 1;
}

.bottom-area {
  grid-row: 2;
  grid-column: 1;
}

こんな感じで8:2で領域が分割されます。

上側部分だけスクロールさせたい場合

さて、上記が基本となるのですが、このままですと上側部分に表示すべきコンテンツが増えてきた場合、このように下側部分まではみ出してきてしまいます。

これを解決するために、コンテンツがはみ出した場合、上側部分のみスクロールするようにしてみます。先ほどのCSSにoverflow-y: scrollを追加してやるだけです。

.grid-area {
  display: grid;
  height: 100vh;
  grid-template-rows: 80% 20%;
  grid-template-columns: 100%;
}

.top-area {
  grid-row: 1;
  grid-column: 1;
  overflow-y: scroll; /* これを追加。縦方向にコンテンツがあふれた場合スクロール可能として処理する */
}

.bottom-area {
  grid-row: 2;
  grid-column: 1;
}

すると、下記のように下側にはみ出した場合は自動で上側部分のみスクロールするようになります。

参考:

CSS Grid Layout を極める!(基礎編) - Qiita
0. はじめにCSS Grid Layout(グリッドレイアウト)は、2次元レイアウト を、HTML/CSS を使って簡単・自由に操作できる、CSSの新しい機能です。格子状のマス目のグリッドに好…

コメント