グリッドレイアウト

このページでは、グリッドレイアウトを説明します。

個人的には、このグリッドレイアウト方式はオススメなのですが、 使いこなすには知っておくべき情報が多いのが短所です。

そのかわりに、使い方に慣れるとすごく便利です。

伝えたいことが多いので、まずは使うために必要な最低限の情報だけをこのページにまとめました。 (それでも分量が多くなってしまいました。)

複雑な使い方は上級編に記載します。

基本形

最初にグリッドレイアウトの基本形を下に記載します。

        <div style="display: grid; grid-template-columns: 200px 100px 300px;"><div style="background-color: #FFC;">1つ目の文章です。</div><div style="background-color: #FCF;">2つ目の文章です。</div><div style="background-color: #CFF;">3つ目の文章です。</div></div>
    

比較のためにフレックスボックスレイアウトで同じように表示する例を下に記載します。

        <div style="display: flex;">
        <div style="background-color: #FFC; width:200px;">1つ目の文章です。</div>
        <div style="background-color: #FCF; width:100px;">2つ目の文章です。</div>
        <div style="background-color: #CFF; width:300px;">3つ目の文章です。</div>
        </div>
    

上の例は下のように表示されます。

1つ目の文章です。
2つ目の文章です。
3つ目の文章です。


1つ目の文章です。

2つ目の文章です。

3つ目の文章です。

<div style="display: grid;">~</div>で囲むとその内部のレイアウト方式がグリッドになります。

"grid-template-columns: 200px 100px 300px 0;"は内部のブロックをどのように配置するのかを設定しています。この例では、

を設定しています。

このため、最初("display: grid;"があるところ)を見ただけで、段数や横幅情報が分かりますし、レイアウトの調整も行ないやすいです。

説明は割愛しますが、横幅の指定にはpx指定だけでなくem単位や%、autoなども指定できます。 ネット検索で調べてください。あるいは、トライエラーでいろいろ指定して良さそうな数値にすればよいです。

改行型グリッド

もう1つの基本形を下に記載します。

        <div style="display: grid; grid-template-columns: 0 200px 0 100px 0 300px 0;">
        <div style="background-color: #FFC;">1つ目の文章です。</div>
        <div style="background-color: #FCF;">2つ目の文章です。</div>
        <div style="background-color: #CFF;">3つ目の文章です。</div>
        </div>
    

上の例は下のように表示されます。


1つ目の文章です。

2つ目の文章です。

3つ目の文章です。

最初の基本形との違いは、2つあります。

違いの1つ目は、"grid-template-columns: 0 200px 0 100px 0 300px 0;"と指定されているところです。

2つ目は、グリッドレイアウトの内側が、改行されていることです。

これまでなんども「改行だけの部分もブロック1つ」になる話をしてきましたが、これもそれと同じです。上の例では実は内部のブロック数は7個あり、そのうち4つが「改行ブロック」になっています。

grid-template-columnsのパラメーターが0になっているところは、「改行ブロック」の横幅を0ピクセルにするように設定しています。そのため中身のあるブロック(改行ではないブロック)だけ横幅が設定されます。

最初の基本形はすべて1行に記載しているので読みにくく、編集しにくいという問題がありますが、この基本形はそれが少し解消されます。

自由記入欄では改行が「改行だけの部分もブロック1つ」になることを利用した、「基本形(改行ブロック利用版)」という感じです。以降、「改行型グリッド」と書いた場合は、こちらの書き方をしていると思ってください。

注意:これは英雄クロニクルの自由記入欄に書くときにだけ使う事のできる特殊な書き方なので、一般的なHTMLやCSSの説明サイトなどには全く出てきません。

このページだけで使用している特殊な名称であることに注意してください。

横幅を等分にする

ピクセル数を指定するのではなく、grid-template-columnsに次のような指定を行うと、横幅を2等分したり、3等分したりすることができます。

        <div style="display: grid; grid-template-columns: 0 1fr 0 1fr 0 1fr 0;">
        <div style="background-color: #FFC;">1つ目の文章です。</div>
        <div style="background-color: #FCF;">2つ目の文章です。</div>
        <div style="background-color: #CFF;">3つ目の文章です。</div>
        </div>        
    

上の例は下のように表示されます。


1つ目の文章です。

2つ目の文章です。

3つ目の文章です。

詳しい説明は割愛します。「1fr を並べると、その数だけ等分される」と憶えてください。

また、上の例の1か所だけ 2fr に変えると、そこだけ2倍の横幅になります。

他にも、%で指定することもできますが、詳しいことは検索して調べてみてください。

マス目配置

グリッドレイアウトでは、grid-template-columnsで段数を設定します。

設定された段数以上のブロックが内部にあると、少し変わった配置をします。

実際の例を見てみましょう。

        <div style="display: grid; grid-template-columns: 120px 120px; text-align: center;"><div>1</div><div>2</div><div>3</div><div>4</div><div>5</div><div>6</div></div>
    
        <div style="display: grid; grid-template-columns: 90px 90px 90px; text-align: center;"><div>1</div><div>2</div><div>3</div><div>4</div><div>5</div><div>6</div></div>
    

2つの入力例がありますが、grid-template-columnsのパラメーター以外はすべて同じです。

1つ目の入力例では、"grid-template-columns: 120px 120px;"で、2段組みを設定しています。

それに対し内部のブロックは6個あります。 1~2個目は普通に(左→右に)2段組みでレイアウトされます。

そして3個目は2個目の右ではなく、1個目の下にレイアウトされます。 4個目は2個目の下、5個目は3個の下、6個目は4個目の下です。

このように、grid-template-columnsで設定した段数を超えるブロックがあると、(改行したように)次の行をつくって、そこからまた段組みを行っていくのがグリッドレイアウトの特徴です。

2つ目の入力例では、grid-template-columnsのパラメーターで3段組みを設定しているので、1~3個目が1行目、4~6個目が2行目にレイアウトされます。

テーブル形状のレイアウト

これをうまく利用すると、テーブル(表)のような形状のレイアウトを作るのが楽になります。 例えば、レイアウトの複雑な例のプロフィールの部分は、次のような入力例で作ることができます。改行型グリッドで作っています。

        <div style="display: grid; grid-template-columns: 0 auto 0 1fr; text-align: right; width: 250px;">
            <div>姓名</div>
            <div>パープル=レンド</div>
            <div>種族</div>
            <div>バーサーカー</div>
            <div>性別</div>
            <div>なし(見た目は女性型)</div>
            <div>年齢</div>
            <div>30年目(見た目は16才ぐらい)</div>
            <div>身長</div>
            <div>154cm</div>
            <div>体重</div>
            <div>52.6kg</div></div>
    

姓名

パープル=レンド

種族

バーサーカー

性別

なし(見た目は女性型)

年齢

30年目(見た目は16才ぐらい)

身長

154cm

体重

52.6kg

間隔

各ブロックの間隔を拡げることもできます。

次のように入力してください。

        <div style="display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 20px;"><div style="background-color: cyan;">1つ目の文章</div><div style="background-color: yellow;">2つの目の文章</div><div style="background-color: green;">3つ目の文章はちょっと長くしてみましょう。</div><div style="background-color: orange;">うっかり4つ目の文章を書いてしまった。</div><div>さらに5つ目</div></div>
    
1つ目の文章
2つの目の文章
3つ目の文章はちょっと長くしてみましょう。
うっかり4つ目の文章を書いてしまった。
さらに5つ目

"gap: 20px;"で、各要素の間に(縦横)に20ピクセルの間隔(ギャップ)が追加されます。

"gap: 10px 40px;"と指定すると、縦の間隔が10ピクセル、横の間隔が40ピクセルになります。

1つ目の文章
2つの目の文章
3つ目の文章はちょっと長くしてみましょう。
うっかり4つ目の文章を書いてしまった。
さらに5つ目

改行型グリッドの間隔

gapを改行型グリッドで使うときは改行ブロックの前後もgapが入る事に注意してください。

"gap: 20px 0;"のように縦方向の間隔だけを設定し、横方向の間隔は改行ブロックに対する横幅として設定したほうがよいでしょう。

具体例を下に記載します。

        <div style="display: grid; grid-template-columns: 0 1fr 20px 1fr 20px 1fr; gap: 20px 0;">
        <div style="background-color: cyan;">1つ目の文章</div>
        <div style="background-color: yellow;">2つの目の文章</div>
        <div style="background-color: green;">3つ目の文章はちょっと長くしてみましょう。
        </div>
        <div style="background-color: orange;">うっかり4つ目の文章を書いてしまった。</div>
        <div>さらに5つ目</div>
        </div>
    

1つ目の文章

2つの目の文章

3つ目の文章はちょっと長くしてみましょう。

うっかり4つ目の文章を書いてしまった。

さらに5つ目

2段組み

グリッドレイアウトで2段組みを0から作ってみましょう。

最終的には、フレックスレイアウトの「間隔」で表示したものを同じものを作ります。

まずは2段組みとして最低限の状態を作ります。

        <div style="display: grid; grid-template-columns: 1fr 1fr;"><div>左の段</div><div>右の段</div></div>
    
左の段
右の段

これが基本形です。

横幅や間隔などの設定は後回しにして、左の段と右の段に文章を追加します。

        <div style="display: grid; grid-template-columns: 1fr 1fr;"><div>左の段
        適当に長い文章を書いてみる。
        ◆英雄キャッシュ還元キャンペーン!!
        ■キャンペーン内容
        ・30人に1人購入額をその場で還元!!
        キャンペーン期間中30人に1人に英雄キャッシュを購入していただいたその場で、購入額と同額のボーナス英雄キャッシュをプレゼントいたします。</div><div>右の段
        
        ◆キャンペーン期間


        1月25日(木)17:00 ~ 2月1日(木)12:00</div></div>
    
左の段
適当に長い文章を書いてみる。
◆英雄キャッシュ還元キャンペーン!!
■キャンペーン内容
・30人に1人購入額をその場で還元!!
キャンペーン期間中30人に1人に英雄キャッシュを購入していただいたその場で、購入額と同額のボーナス英雄キャッシュをプレゼントいたします。
右の段

◆キャンペーン期間


1月25日(木)17:00 ~ 2月1日(木)12:00

最後に、背景色を塗り、左右や中央の間隔(余白)を調整します。

        <div style="display: grid; grid-template-columns: 1fr 1fr;"><div style="background-color: pink; margin: 0 10px;">左の段
        適当に長い文章を書いてみる。
        ◆英雄キャッシュ還元キャンペーン!!
        ■キャンペーン内容
        ・30人に1人購入額をその場で還元!!
        キャンペーン期間中30人に1人に英雄キャッシュを購入していただいたその場で、購入額と同額のボーナス英雄キャッシュをプレゼントいたします。</div><div style="background-color: pink; margin: 0 10px;">右の段
        
        ◆キャンペーン期間


        1月25日(木)17:00 ~ 2月1日(木)12:00</div></div>
    
左の段
適当に長い文章を書いてみる。
◆英雄キャッシュ還元キャンペーン!!
■キャンペーン内容
・30人に1人購入額をその場で還元!!
キャンペーン期間中30人に1人に英雄キャッシュを購入していただいたその場で、購入額と同額のボーナス英雄キャッシュをプレゼントいたします。
右の段

◆キャンペーン期間


1月25日(木)17:00 ~ 2月1日(木)12:00

上の例ではmarginで間隔を設定していますが、もちろんgapを使ってもよいです。

同じものを改行型グリッドを使って作ると下のようになります。

        <div style="display: grid; grid-template-columns: 10px 1fr 20px 1fr 10px;">
        <div style="background-color: pink;">左の段
        適当に長い文章を書いてみる。
        ◆英雄キャッシュ還元キャンペーン!!
        ■キャンペーン内容
        ・30人に1人購入額をその場で還元!!
        キャンペーン期間中30人に1人に英雄キャッシュを購入していただいたその場で、購入額と同額のボーナス英雄キャッシュをプレゼントいたします。</div>
        <div style="background-color: pink;">右の段
        
        ◆キャンペーン期間


        1月25日(木)17:00 ~ 2月1日(木)12:00</div>
        </div>
    

「改行ブロック」の幅を0ではなく10pxや20pxにすることで、marginやgapの代わりにしています。

表示例は省略します。(いっしょなので)