(157) display: gridで簡単に表を作る。

投稿者: | 2024年9月8日

45 views

【1】やりたいこと

Webページ上に 表を表示する 手段はいくつもあるが、
flex: grid を使うと非常に楽
なのだとか。

ぜひこれを使って楽をしてみたい。

参考:
MDN グリッドレイアウトの基本概念

【2】やってみる

(1) 基本実装

display: grid を使って、以下の条件で表を作ってみた。
・2列
・表の要素間の隙間は 10px

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>Sample#157</title>
    <style>
        *{
            box-sizing: border-box;
        }
        .grid-container {
            display: grid;
            grid-template-columns: 1fr 1fr;    /* 2列 */
            gap: 10px;                         /* 各セル間の縦横スペース */
            width: 100%;
            border: 3px #000 solid;
            background-color: #80d080;
        }
        .grid-item {
            background-color: #f08080;
            padding: 20px;
            text-align: center;
            border: 1px solid #888;
        }
    </style>
</head>
<body>
    <div class="grid-container">
        <div class="grid-item">1行1列目</div>
        <div class="grid-item">1行2列目</div>
        <div class="grid-item">2行1列目</div>
        <div class="grid-item">2行2列目</div>
        <div class="grid-item">3行1列目</div>
        <div class="grid-item">3行2列目</div>
    </div>
</body>
</html>

grid-template-columns: 1fr 1fr; について少しばかり解説を…
・グリッド上の列を定義する。
・単位 fr は、グリッドコンテナー内の利用可能な空間の比 を表す。
・上記の 1fr 1fr は、1:1 で 2列に並べる ことを意味する。
 仮に 2fr 1fr とすれば、 2:1で 2列に並べる ことを意味する。

サンプルコードを以下にアップした。
https://www.dogrow.net/hp/sample/00157

(2) レスポンシブ対応(スマホ時は 1列に変更)

スマホ時は、以下を変更するだけでよい。
PC時: grid-template-columns: 1fr 1fr; /* 2列 */
 ↓
スマホ時: grid-template-columns: 1fr; /* 1列 */

.grid-container {
    display: grid;
    grid-template-columns: 1fr;        /* 1列 */
    gap: 10px;                         /* 各セル間の縦横スペース */
    width: 100%;
    border: 3px #000 solid;
    background-color: #80d080;
}

サンプルコードを以下にアップした。
https://www.dogrow.net/hp/sample/00157/index2.html

(3) 固定長列 + 可変長列

以下の条件で 2列を表示する。
・1列目 : 表示幅が 200px固定
・2列目 : 残りの表示領域すべて

.grid-container {
    display: grid;
    grid-template-columns: 2oopx 1fr;  /* 2列 */
    gap: 10px;                         /* 各セル間の縦横スペース */
    width: 100%;
    border: 3px #000 solid;
    background-color: #80d080;
}

サンプルコードを以下にアップした。
https://www.dogrow.net/hp/sample/00157/index3.html

(4) 複雑な表

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>Sample#157</title>
    <style>
        *{
            box-sizing: border-box;
        }
        .grid-container {
            display: grid;
            grid-template-columns: 1fr 1fr;  /* 2列 */
            grid-template-rows:    1fr 1fr;  /* 2行 */
            grid-template-areas: 
                "item1 item2"
                "item1 item3";     /* 1列目の要素が2行にまたがるように指定 */
            gap: 10px;                       /* 各セル間の縦横スペース */
            width: 100%;
            border: 3px #000 solid;
            background-color: #80d080;
        }
        .grid-item {
            background-color: #f08080;
            padding: 20px;
            text-align: center;
            border: 1px solid #888;
            &.item1 { grid-area: item1; } /* 1列目の要素 */
            &.item2 { grid-area: item2; } /* 2列1行目の要素 */
            &.item3 { grid-area: item3; } /* 2列2行目の要素 */
        }
    </style>
</head>
<body>
    <div class="grid-container">
        <div class="grid-item item1">1,2行1列目</div>
        <div class="grid-item item2">1行2列目</div>
        <div class="grid-item item3">2行2列目</div>
    </div>
</body>
</html>

サンプルコードを以下にアップした。
https://www.dogrow.net/hp/sample/00157/index4.html

https://www.dogrow.net/hp/sample/00157/index5.html

【3】所感

・display: grid を知る前は、inline-block要素を margin指定付きで並べて表示していた。
 → 表の上端、下端、左端、右端の隙間の扱いに苦労した。
  → display: grid ではこれを気にしなくてよいのが楽だ。


カテゴリー: CSS

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)