Web初めてのHTML/CSS

Day 2CSSの考え方 — 見た目を整える

並べる — Flexboxの考え方

箱をきれいに横一列や縦に並べる仕組みがFlexbox。棚に物を並べるイメージで意図を読む。

箱をどう並べるか、という問題

前回、すべての要素は箱だと学びました。次の課題は「その箱たちをどう並べるか」です。何もしないと、多くの箱は上から下へ縦にひとつずつ積まれます。でも実際のサイトでは、メニューが横一列に並んだり、カードが横に3つ並んだりします。これを担当するのがです。

たとえるなら

Flexboxは「棚」です。棚(親の箱)に指示を出すと、中に入れた物(子の箱たち)を、横一列に並べたり、均等に間隔をあけたり、中央に寄せたりできます。並べ方を決めるのは、物ではなく棚のほうです。

まず親に「棚になれ」と伝える

Flexboxは、並べたい箱そのものではなく、それらを囲む親の箱に対して指示します。親に display: flex を書いた瞬間、その親は「棚」になり、中の子要素たちが横一列に並びます。

HTML
<nav class="menu">
  <a href="/">ホーム</a>
  <a href="/about">会社概要</a>
  <a href="/contact">お問い合わせ</a>
</nav>
3つのリンクを持つメニュー。このままだと縦に並ぶ
CSS
.menu {
  display: flex;
  gap: 16px;
}
親のmenuを棚にすると、中のリンクが横一列になり、gapで間隔を16pxあける

display: flex が「この親を棚にする」という合図です。gap は棚に並んだ物どうしの間隔。この2行を見つけたら、「あ、中身を横に並べているんだな」と読めます。

並び方をそろえる二つの向き

棚には「並ぶ方向」と「それに直交する方向」があります。よく出てくる二つのプロパティを、意味とセットで覚えましょう。

  • justify-content … 並んでいる方向のそろえ方。横並びなら「左寄せ/中央/右寄せ/均等」など
  • align-items … 並びと直交する方向のそろえ方。横並びなら「上寄せ/中央/下寄せ」など

なぜ縦横で名前が違うの?

Flexboxは並ぶ向き(主軸)を基準に考えるからです。justify-contentは主軸方向、align-itemsはそれと垂直方向のそろえ、と役割を分けることで、横並びでも縦並びでも同じ考え方が使えます。

縦に積まれたまま

指示がないので、リンクが縦にひとつずつ並んで間延びして見える

CSS
.menu {
  /* display: flex がない */
}

横一列で中央ぞろえ

棚にして横並びにし、全体を中央に寄せてメニューらしく整えた

CSS
.menu {
  display: flex;
  justify-content: center;
  gap: 16px;
}

AIにはこう頼む

並びを直したいときは「このメニューを横並びにして、間隔を広げて」「カードを中央にそろえて」と、並べる向きと寄せ方を言葉で伝えます。AIはそれをdisplay: flexやjustify-contentに翻訳してくれます。

読んでも腑に落ちない所は、AIに噛み砕いてもらいましょう。

理解度チェック

答えられれば、面接で説明できる状態に一歩近づきます。

Q1

縦に並んでいるメニューを横一列にしたいとき、まず何を書きますか?

Q2

Flexboxで、並んだ子要素の「間隔」をあけるのに使うプロパティは?

Q3

Flexboxとは何をする仕組みか、たとえを使って説明してください。

記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。