レイアウト

レイアウトの話をそろそろ始めましょう。

レイアウトといっても「構図」「配置」「色の使い方」というデザイン的な話ではありません。 (それらが決まった後に)「どうやって画像やテキストを配置するのか」という部分の話です。

ブロックとインライン

HTMLにはブロック要素とインライン要素という概念があります。

2つを超シンプルに説明すると、次のようになります。

インライン

インライン要素は、普通のテキストのことです。 HTML要素のない普通のテキスト自由記入欄に記載すれば、左→右に表示されます。 HTML要素で特別な指定をしない限り、縦書き表示されることはありません。

文字1つ1つはインライン要素であり、それが左→右に並べられているのです。

左→右になるのは、HTMLの基本設定がそうなっているからです。 CSSで縦書きにすることもできますが、その方法は紹介しません。

興味ある場合は、検索してみてください。

ブロック

ブロックについては、「ブロックとは?」でも説明しているので、そちらも参照して下さい。

ブロックはインライン要素や別のブロック要素が「ひとかたまり」となったものです。

次の入力例は、3つのブロックを入力していることになります。

            <div>1つ目のブロックの中</div><div>2つ目のブロックの中</div><div>3つ目のブロックの中はちょっと長くしてみましょう。</div>
        

そしてブロックは「上から下」に並べられる要素なので、縦方向に並びます。 その結果、上の例は次のように表示されます。

1つ目のブロックの中
2つ目のブロックの中
3つ目のブロックの中はちょっと長くしてみましょう。

「文字の装飾時の改行を止める」で、"display: inline;"を使えば改行しなくなるという説明をしました。

この設定は、ブロックのレイアウトを「インラインと同じにしなさい」という指定であり、 そのため横方向に並ぶようになって、改行しなくなります。

ブロックと通常テキスト

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

        ブロックの前<div>ブロック</div>ブロックの後
    

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

ブロックの前
ブロック
ブロックの後

ブロックを3つ入力した時と同じように3行に表示されました。 つまり、ブロックが3つあります。

ブロックがあることによって、「インラインの連続」が分断されます。 その結果、前後の通常テキストはそれぞれが1つのかたまり=ブロックになるので、ブロックが3つです。

改行もインラインの1つ

次のように入力すると、1つ前の例と同じように表示されます。

        ブロックの前
        ブロック
        ブロックの後
    
ブロックの前
ブロック
ブロックの後

しかしこれは「ブロックが3つ」ではなく、1つしかありません。

自由記入欄では、改行もインライン要素です。 (並び方が普通ではない)特殊な文字の1つと思ってください。

上の例は、たくさんのインライン要素があつまって1つのブロックを作っていることになります。

2つのブロックの間の改行

下の例は、一見するとブロックが2つのように思うかもしれませんが、違います。

        <div>ブロック1</div>
        <div>ブロック2</div>
    

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

ブロック1

ブロック2

改行も1つのインラインなので、上の例は3つのブロックになっています。

改行を■という記号に置き換えてみればわかりやすいかもしれません。

        <div>ブロック1</div>■<div>ブロック2</div>
    
ブロック1
ブロック2

ブロックが3つあって、2つ目は「■=「改行」が1つだけあるブロック」なのです。

改行によるレイアウト崩れ

英雄クロニクルの自由記入欄特有の問題として「改行によるレイアウト崩れ」があります。

すでに説明したように次のように入力すると「改行だけ」のブロックができます。

        <div>ブロック1</div>
        <div>ブロック2</div>
    
ブロック1

ブロック2

このため、改行に注意していないと、次のようなことが度々発生します。

これを、「改行によるレイアウト崩れ」と呼ぶことにします。

改行によるレイアウト崩れが発生するため、ネット検索で見つけたレイアウト例をそのまま入力しても、きれいに表示されないことが多いです。

逆にいえば、レイアウトが変になるときは改行を疑うと良いです。

この現象は英雄クロニクルの自由記入欄特有の現象です。

一般的なHTMLでは改行は「無いもの」として扱うのですが、英雄クロニクルの自由記入欄では「文字の1つ」として扱われるので、こういったことが発生します

基本は段組み

レイアウトの基本は段組みです。

ブロックは基本的に縦に並びますが、それを横に並べると段組みになります。

段組みなしの例(長くなるので、入力例は省略します。)

プロフィール
姓名:パープル=レンド
種族:バーサーカー
性別:なし(見た目は女性型)
年齢:30年目(見た目は16才ぐらい)
身長:154cm
体重:52.6kg
簡単な自己紹介
攻撃の宝珠&剣を装備した物魔アタッカーです。
アタッカーというよりはどちらかといえば支援役です。威力不足なので、純粋に堅い人を攻撃する役には向いていません。

段組みありの例

プロフィール
姓名:パープル=レンド
種族:バーサーカー
性別:なし(見た目は女性型)
年齢:30年目(見た目は16才ぐらい)
身長:154cm
体重:52.6kg
簡単な自己紹介
攻撃の宝珠&剣を装備した物魔アタッカーです。
アタッカーというよりはどちらかといえば支援役です。威力不足なので、純粋に堅い人を攻撃する役には向いていません。

複雑なレイアウトに見えても、

という感じで、複数の段組みがたくさん集まっているだけです。

もう少し複雑になったレイアウトの例


プロフィール
姓名
種族
性別
年齢
身長
体重
パープル=レンド
バーサーカー
なし(見た目は女性型)
30年目(見た目は16才ぐらい)
154cm
52.6kg


簡単な自己紹介
攻撃の宝珠&剣を装備した物魔アタッカーです。
アタッカーというよりはどちらかといえば支援役です。威力不足なので、純粋に堅い人を攻撃する役には向いていません。

これは3段組みになっていて、中央にアイコン、左がプロフィール、右が自己紹介になっています。

左のプロフィ―ルの部分はさらに2段組みになっています。

上の例では、段組みが分かりやすくなるように、薄い灰色の点線をつけています。

レイアウト方式

段組みを行うには、ブロックが横方向(左→右)にレイアウト(配置)するように制御する必要があります。

そうするためのHTMLの書き方は1通りではなく、いくつかの種類(レイアウト方式)があります。

自由記入欄で使う事のできるレイアウト方式には次のようなものがあります。

フロートレイアウト

フロートレイアウトの簡単な入力例を下に記載します。

        <div style="background-color: #DDD; padding: .25em;"> <div style="float: right; margin: 0 1em;">リレミト=ロクトフェイト</div><div style="float: left; margin: 0 1em;">名前</div><div style="clear: both;"></div></div>    
    
リレミト=ロクトフェイト
名前

入力例では「リレミト=ロクトフェイト」が「名前」の前に書いてあるのに、表示では「名前」の前になっていて少し変に見えるかもしれません。 実はフロートレイアウトを強調をするために、わざとそのような入力例にしています。

"float: left;""float: right;"を使って、左右にパーツを振り分けていく感じでレイアウトするのが、フロートレイアウトの特徴です。

これは個人的な感想になるのですが、フロートレイアウトはとても難解なレイアウトです。

慣れないと意図した位置に配置できず、ハマりやすいです。

説明するのも難しいので、フロートレイアウトの紹介はここまでにします。

「CSS float」などで検索すればたくさんの解説ページが見つかるので、詳しく知りたい方はそちらを参照してください。

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

簡単に説明するなら「ブロックの並ぶ方向を(通常の)縦方向から横方向に変更する」のがフレックボックスレイアウトです。

簡単な入力例を下に記載します。

        <div style="display: flex;">
        <div style="width: 33%;">この例では3段組みを作っています。</div>
        <div style="width: 34%;">左と右の横幅は33%、中央は34%を指定しています。
        これで全ての段の横幅がほぼ同じになります。</div>
        <div style="width: 33%;">右の段です。</div>
        </div>
    

この例では3段組みを作っています。

左と右の横幅は33%、中央は34%を指定しています。
これで全ての段の横幅がほぼ同じになります。

右の段です。

左 中央 右の3列(3段組み)になっていて、それぞれの横幅がほぼ同じになっているでしょう?

このレイアウトについては「フレックスボックスレイアウト」で、もう少し掘り下げて説明しています。

グリッドレイアウト

グリッドレイアウトはその名前の通り、画面をマス目(グリッド)に区切ってレイアウトします。

簡単な例を下に書いてみます。

        <div style="display: grid; grid-template-columns: 33% 33%;"><div>ブロック1</div><div>2</div><div>3</div><div>4</div></div>
    
ブロック1

1つ目のブロックが左上、2つ目が右上、3つ目が左下、4つ目が右下に、2×2の表のように表示されています。

フレックスボックスレイアウトの最後に書いた3段組みをグリッドレイアウトで書くと次のようになります。

        <div style="display:grid; grid-template-columns: 33% 34% 33%;"><div>この例では3段組みを作っています。</div><div>左と右の横幅は33%、中央は34%を指定しています。
        これで全ての段の横幅がほぼ同じになります。</div><div>右の段です。</div></div>
    
この例では3段組みを作っています。
左と右の横幅は33%、中央は34%を指定しています。
これで全ての段の横幅がほぼ同じになります。
右の段です。

このレイアウトについては「グリッドレイアウト」で、もう少し掘り下げて説明しています。