Grid Layout で表示領域幅にレスポンシブなグリッドを作成する - px と fr の混在グリッドの作成 - CSS

Grid Layout で表示領域幅にレスポンシブなグリッドを作成するコードを紹介します。

概要

こちらの記事ではGrid Layoutによるグリッドのコードを紹介しました。記事では固定幅のグリッドを作成するコードを紹介しましたが、レスポンシブなページを作成する場合はグリッドの幅をページや表示領域の残り幅に合わせたい場合があります。この記事では、ページ幅や表示幅がレスポンシブな場合に、表示幅に応じてグリッドセルの幅が追従するセルを表示するコードを紹介します。

記述方法

レスポンシブなグリッドセルを作成する場合は fr 単位を利用します。

実装例

コード

下記のコードを記述します。
SimpleGridPxFr.css
.Container {
    display: grid;
    grid-template-columns: 160px 160px 160px 1fr;
    grid-template-rows: 120px 120px;

    border:solid #ff6a00 1px;
}

.GridItem1 {
    grid-column: 1 / 2;
    grid-row: 1 / 2;
    background-color: #ff9c9c;
}

.GridItem2 {
    grid-column: 2 / 3;
    grid-row: 1 / 2;
    background-color: #ffcb70;
}

.GridItem3 {
    grid-column: 3 / 4;
    grid-row: 1 / 2;
    background-color: #fffd70;
}

.GridItem4 {
    grid-column: 4 / 5;
    grid-row: 1 / 2;
    background-color: #b0ff70;
}

.GridItem5 {
    grid-column: 1 / 2;
    grid-row: 2 / 3;
    background-color: #7ee68d;
}

.GridItem6 {
    grid-column: 2 / 3;
    grid-row: 2 / 3;
    background-color: #7ee6e2;
}

.GridItem7 {
    grid-column: 3 / 4;
    grid-row: 2 / 3;
    background-color:#95a7f5
}

.GridItem8 {
    grid-column: 4 / 5;
    grid-row: 2 / 3;
    background-color: #d095f5;
}
SimpleGridPxFr.html
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <title></title>
  <link rel="stylesheet" href="SimpleGridPxFr.css" />
</head>
<body>
  <div class="Container">
    <div class="GridItem1">項目1</div>
    <div class="GridItem2">項目2</div>
    <div class="GridItem3">項目3</div>
    <div class="GridItem4">項目4</div>
    <div class="GridItem5">項目5</div>
    <div class="GridItem6">項目6</div>
    <div class="GridItem7">項目7</div>
    <div class="GridItem8">項目8</div>
  </div>
</body>
</html>

解説

Grid Layoutの基本的な書式についてはこちらの記事を参照してください。

Containerクラスの記述は下記になります。グリッドのレイアウトは4列2行になります。1列目から3列目までのグリッドは160ピクセルの固定幅のセルになります。4列目の一番右のセルは1frが指定されているため、残りの表示幅すべての幅となります。
.Container {
    display: grid;
    grid-template-columns: 160px 160px 160px 1fr;
    grid-template-rows: 120px 120px;

    border:solid #ff6a00 1px;
}

実行結果

上記のHTMLファイルをWebブラウザで表示します。下図のページが表示されます。グリッドの左から3列は160ピクセルの幅で表示され、4列目のセルがページ幅の残りの幅で表示されます。


Webブラウザのウィンドウ幅を縮めます。左側の3列は160ピクセルの幅で固定された状態のままです。一番右の4列目のセルの幅がウィンドウ幅に合わせて縮みます。




4列目のセルの幅はウィンドウ幅に合わせて狭くなりますが、最小幅よりは狭くなりません。最小幅よりウィンドウ幅を縮めると横方向のスクロールバーが表示されます。


同様に固定幅で設定したグリッドもウィンドウ幅より狭くなった場合は横方向のスクロールバーが表示されます。

実装例 (frのセルが複数ある場合)

幅をfr単位で指定したセルが複数ある場合の動作を紹介します。

コード

下記のHTML, CSSコードを記述します。
SimpleGridPxEmFr.css
.Container {
    display: grid;
    grid-template-columns: 160px 2fr 16em 1fr;
    grid-template-rows: 120px 120px;

    border:solid #ff6a00 1px;
}

.GridItem1 {
    grid-column: 1 / 2;
    grid-row: 1 / 2;
    background-color: #ff9c9c;
}

.GridItem2 {
    grid-column: 2 / 3;
    grid-row: 1 / 2;
    background-color: #ffcb70;
}

.GridItem3 {
    grid-column: 3 / 4;
    grid-row: 1 / 2;
    background-color: #fffd70;
}

.GridItem4 {
    grid-column: 4 / 5;
    grid-row: 1 / 2;
    background-color: #b0ff70;
}

.GridItem5 {
    grid-column: 1 / 2;
    grid-row: 2 / 3;
    background-color: #7ee68d;
}

.GridItem6 {
    grid-column: 2 / 3;
    grid-row: 2 / 3;
    background-color: #7ee6e2;
}

.GridItem7 {
    grid-column: 3 / 4;
    grid-row: 2 / 3;
    background-color:#95a7f5
}

.GridItem8 {
    grid-column: 4 / 5;
    grid-row: 2 / 3;
    background-color: #d095f5;
}
SimpleGridPxEmFr.html
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <title></title>
  <link rel="stylesheet" href="SimpleGridPxEmFr.css" />
</head>
<body>
  <div class="Container">
    <div class="GridItem1">項目1</div>
    <div class="GridItem2">項目2</div>
    <div class="GridItem3">項目3</div>
    <div class="GridItem4">項目4</div>
    <div class="GridItem5">項目5</div>
    <div class="GridItem6">項目6</div>
    <div class="GridItem7">項目7</div>
    <div class="GridItem8">項目8</div>
  </div>
</body>
</html>

解説

グリッドレイアウトの枠のセルの幅を、160pixel, 2fr, 16em, 1fr と設定しています。160pixel と 16emが固定の幅となるため、1列目と3列目が固定のセルとなり、2列目と4列目のセルがレスポンシブになります。2frと1frの幅は2:1となります。fr単位の動作の詳細についてはこちらの記事も参照してください。
.Container {
    display: grid;
    grid-template-columns: 160px 2fr 16em 1fr;
    grid-template-rows: 120px 120px;

    border:solid #ff6a00 1px;
}

実行結果

上記のHTMLファイルをWebブラウザで表示します。下図のページが表示されます。


ウィンドウ幅を狭めると、frで指定したセルの幅が狭くなります。


1frと2frのセルでは、幅が1:2となる比率で幅が縮まります。


著者
iPentecのメインデザイナー
Webページ、Webクリエイティブのデザインを担当。PhotoshopやIllustratorの作業もする。
掲載日: 2018-10-12
iPentec all rights reserverd.