フレックスボックスレイアウト

まず、考え方や説明が簡単なフレックスボックスを説明します。

最初に基本的な書き方・特徴を説明し、段組みの作り方などの応用編を説明します。

基本形

<div style="display: flex;">~</div>で囲むと、その内部のレイアウト方式がフレックスボックスになります。

フレックスボックスには次のような効果があります。

編集が少し楽

副次的な効果として改行の影響を受けにくくなります。 次の例をそのまま入力してみてください。

        <div style="display: flex;"><div>左の段</div><div>右の段</div></div>
    
        <div style="display: flex;">
        <div>左の段</div>
        <div>右の段</div>
        </div>
    
左の段
右の段


左の段

右の段

2つの入力例は同じように表示されます。

この例では文字数が少ないですが、実際に自由記入欄に記載するときは、キャラプロフィールやエピソードなどの長文があると想定すると、下の方が編集しやすいはずです。

技術的な説明

1つ目の入力例は、フレックスボックス内に2つのブロックが存在しています。

2つ目の入力例も一見すると2つのブロックのように見えますが、改行の問題があるので、実際は5つのブロックが存在しています。

フレックボックスの中で改行している位置に(1)(2)(3)と番号を追加してみると、わかりやすくなるでしょう。

        <div style="display: flex;">(1)
        <div>左の段</div>(2)
        <div>右の段</div>(3)
        </div>
    
(1)
左の段
(2)
右の段
(3)

そのため2つ目の入力は、実は2段組ではなく5段組になっています。

ただし、5つのうち3つは「改行」なので、実質何も表示されません。(上の表示例から(1)(2)(3)を取り除いた状態になります。)

そのためテキストが入っている2つの段だけが目立ち、2段組みのように見えているのです。

フレックボックス以外のレイアウト(通常のレイアウトを含む)では、改行によって空白行ができたり、レイアウト崩れが発生します。

それを避けるため、改行が入らない書き方が必要になり、1行の文字数が長い書き方が多くなってしまいます。

フレックスボックスは(上の(1)(2)(3)のような位置なら)改行を入れても大丈夫なので、1行の文字数が減って読みやすくなり、編集が楽になります。

2段組み

まず、2段組みレイアウトを作ってみましょう。 2段組みができれば、それを組み合せていけばいろいろなレイアウトができます。

そもそも、自由記入欄で4段組み以上になることはめったにありません。 (横幅が640ピクセルと限られているので、4段組を作る広さがありません。)

2段組みの基本形は、すでに上に例が出ていますが、次のようにします。

        <div style="display: flex;">
        <div>左の段</div>
        <div>右の段</div>
        </div>
    

そして、「左の段」と「右の段」のところに、長めのテキストを追加してみましょう。 (わかりやすくするために、右段だけ背景色も追加しています。)

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


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

左の段
適当に長い文章を書いてみる。
◆英雄キャッシュ還元キャンペーン!!
■キャンペーン内容
・30人に1人購入額をその場で還元!!
キャンペーン期間中30人に1人に英雄キャッシュを購入していただいたその場で、購入額と同額のボーナス英雄キャッシュをプレゼントいたします。

右の段

◆キャンペーン期間


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

左右がアンバランスなので見た目の調整は必要ですが、一応これで2段組みができました。

3段以上の段組みを作る場合も、最初に簡単な1行だけの段を組み、そこから文章を増やしていくとよいです。

横幅を指定する

2段組を作ることができましたが、左右の段で横幅が異なりアンバランスです。 そこで横幅を設定しましょう。

次のように入力してください。1つ前と違うところを色をつけています。

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


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

左の段
適当に長い文章を書いてみる。
◆英雄キャッシュ還元キャンペーン!!
■キャンペーン内容
・30人に1人購入額をその場で還元!!
キャンペーン期間中30人に1人に英雄キャッシュを購入していただいたその場で、購入額と同額のボーナス英雄キャッシュをプレゼントいたします。

右の段

◆キャンペーン期間


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

左右の横幅を300ピクセルに指定しました そのため、左:右の比率が1:1になっています。

2つあわせて600ピクセルなので、自由記入欄の横幅(640)より小さいです。 そのため右側に40ピクセル分の空きがあり、そこは白い背景になっています。

内側の横幅に注意

左右の横幅を2倍にした場合どうなるでしょうか?

左右あわせて600ピクセルだったものが2倍になれば1200ピクセルになり、自由記入欄の横幅を超えることになります。 そうなれば、右の段の部分ははみ出してしまい、表示されなくなるように思いませんか?

しかし、そうはなりません。実際に入力して、表示を確認してみましょう。

次のように入力してください。1つ前と違うところを色をつけています。

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


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

左の段
適当に長い文章を書いてみる。
◆英雄キャッシュ還元キャンペーン!!
■キャンペーン内容
・30人に1人購入額をその場で還元!!
キャンペーン期間中30人に1人に英雄キャッシュを購入していただいたその場で、購入額と同額のボーナス英雄キャッシュをプレゼントいたします。

右の段

◆キャンペーン期間


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

横幅は少し増え、右側にあった白い背景は消えていますが、右の段が消える程ではありません。 自由記入欄のちょうど真ん中で左右にわかれています。

フレックスボックスレイアウトでは、

内側の横幅の合計 > 外側("display:flex;"のあるブロック)の横幅

のときに、内側が外側にはみ出さないように横幅を調整します。

逆にいえば、widthで指定した横幅と異なるピクセル数になっているので、意図したレイアウトになっていません。(widthの指定は600ピクセル、実際の表示は320ピクセル。)

フレックスボックスレイアウトを使って段組みするときは、各段の横幅の合計が外側を超えないように、注意してください。

間隔

左右の段の横幅を300ピクセルにした例では、左右の段が近すぎます。 背景色を塗っていなかったら、

「英雄キャッシュを1月25日(木)」

と読めてしまいそうなぐらい近いです。 これは見やすいデザインではないので左右の段の間を拡げた方が良いです。

ついでに、自由記入欄の段組みの間も拡げた方が良いでしょう。

未使用の横幅が40ピクセルあるので、「左右に10ピクセル、中央に20ピクセル」の間隔を設ければちょうど良さそうです。

次のように入力してください。 間が拡がっていることがわかりやすいように、今回は左の段の背景色も塗っています。

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


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

左の段
適当に長い文章を書いてみる。
◆英雄キャッシュ還元キャンペーン!!
■キャンペーン内容
・30人に1人購入額をその場で還元!!
キャンペーン期間中30人に1人に英雄キャッシュを購入していただいたその場で、購入額と同額のボーナス英雄キャッシュをプレゼントいたします。

右の段

◆キャンペーン期間


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

左の段のブロックに「左が10px、右が20px」となるmarginを追加することで左側と中央の白い部分ができています。 そして使っていない部分のピクセルが10になるので、右側の白い部分ができています。

今回は背景色を塗る都合でmarginを使っていますが、背景色を塗らないならmarginのかわりにpaddingでもよいです。ともかく、どちらかの方法で適切な横幅の余白をつければ、きれいに間隔を拡げることができます。

余白サイズに注意

「余白や枠の横幅が、全体的な横幅の値に影響を与える」ことを忘れずに! (詳細説明は「横幅と余白・枠との関係」を参照してください。)

もし、上の例で"margin 0 50px 0 10px;"を指定すると内側のピクセル数は640を超え、「内側の横幅合計>外側の横幅」になってしまいます。 左右の段の横幅は300ピクセルではなくなってしまうでしょう。

二重構造にする

余白や枠の幅も含めて横幅を計算することが面倒な場合は、二重構造にしてしまうのも良いでしょう。

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


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

左の段
適当に長い文章を書いてみる。
◆英雄キャッシュ還元キャンペーン!!
■キャンペーン内容
・30人に1人購入額をその場で還元!!
キャンペーン期間中30人に1人に英雄キャッシュを購入していただいたその場で、購入額と同額のボーナス英雄キャッシュをプレゼントいたします。

右の段

◆キャンペーン期間


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

二重構造にして、外側のブロックでは<div style="width:320px;">のように、横幅のみを設定します。

そして、枠や背景色は内側のブロックで設定します。

背景色に違いが出てしまいますが、背景色を無視してテキストの位置だけ見れば同じように表示されます。 上の例のような場合は、右段の文章の最後に改行を2つ追加して高さをそろえれば、背景色も同じになります。

横幅を合わせる作業はこちらの方が楽なのですが、二重のdivになってしまうので、編集が少し面倒になるかもしれません。

また、改行にも注意が必要です。フレックスボックスと二重構造の外側(width指定しているとこと)の間は改行しても大丈夫ですが、二重構造の1つ目と2つ目の間に改行を入れて次のようにしてしまうと改行によるレイアウト崩れが発生し始めます。

        <div style="display: flex;">
        <div style="width: 320px;">
        <div style="background-color: pink; margin: 0 10px;">左の段
        (以降省略)
    

上の例の表示例



左の段
適当に長い文章を書いてみる。
◆英雄キャッシュ還元キャンペーン!!
■キャンペーン内容
・30人に1人購入額をその場で還元!!
キャンペーン期間中30人に1人に英雄キャッシュを購入していただいたその場で、購入額と同額のボーナス英雄キャッシュをプレゼントいたします。

右の段

◆キャンペーン期間


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

画像と段組み

公式ギャラリーの自由記入欄用画像(キャラの全身画像)は、縦長で横幅が300ピクセルぐらいのものが多いです。 例えば、「画像の加工」で使用している画像のサイズは280x440です。

そういった画像を挿入しただけだと、自由記入欄の右半分は何もない白い背景のままになってしまいます。

これはちょっとモッタイナイというか見栄えが良くありません。 その真っ白な場所にキャラ紹介やエピソードなどを書きたくなる人も多いと思います。

そんなときこそ段組みの出番です。 段組みをすれば、右側に文章を書くことができます。

それどころか、「左側に文章、右側に画像」の様にすることもできます。

簡単な例を下に示します。

        <div style="display: flex; background-color: #FC3;">
        <div style="width: 360px;">
        名前:リレミト=ロクトフェイト
        種族:人間
        年齢:19歳
        性別:女性
        メインクラス:クレリック/旅人の神
        サブクラス:ダンジョン探検家</div>
        <div style="width: 280px;"><画像mpKUFT1jY6ehBaLdeApRxg==></div>
        </div>
    


名前:リレミト=ロクトフェイト
種族:人間
年齢:19歳
性別:女性
メインクラス:クレリック/旅人の神
サブクラス:ダンジョン探検家


作り方を説明します。

挿入している画像のサイズが280x440なので、右の段の横幅に280ピクセルを指定します。 そして、左の段は640-280=360ピクセルを指定します。

        <div style="display: flex;">
        <div style="width: 360px;">左の段</div>
        <div style="width: 280px;">右の段</div>
        </div>
    

これに次の変更を加えると、1つ前の入力例になります。