フレックスボックス
フレックスボックスが登場する前は、ボックスを縦方向の中央に置くのにくふうが必要でした。display: flex を使えば、justify-content と align-items の二つの宣言ですみます。
一つの行か一つの列
フレックスボックス(CSS Flexible Box Layout モジュール)は、ボックスの集まりを一本の線にそって並べます。入れ物に display: flex を指定すると、その直接の子(フレックスアイテム)は縦に積み重ならず、横に並びます。メニューバー、ボタンの列、フッターを下にくっつけたいカードなどは、この宣言一つで作れます。フレックスボックスは一度に一つの次元、つまり行か列のどちらかだけを扱います。行と列をいっしょに扱いたいときは、ふつうは次の単元のグリッドのほうが向いています。
二つの軸
フレックスボックスでは、すべてを二つの軸で考えます。主軸はアイテムが並ぶ向きで、flex-direction で決まります。row(既定)か column です。交差軸は主軸と直角に交わります。justify-content は主軸にそってアイテムを配置します。flex-start、center、flex-end、space-between(最初と最後のアイテムを両端に置き、あいだを等しくあける)、space-around があります。align-items は交差軸の上の位置を決めます。stretch(既定。すべてのアイテムがいちばん高いものと同じ高さになる)、flex-start、center、flex-end です。つまり、justify-content: center と align-items: center で、ボックスを縦横どちらにも中央に置けます。
.bar {
display: flex;
justify-content: space-between; /* logo left, menu right */
align-items: center; /* vertically centred */
gap: 16px; /* space between items */
}
.cards { display: flex; flex-wrap: wrap; gap: 12px; }
.card { flex: 1 1 200px; } /* grow, shrink, start at 200px */すき間と折り返し
gap はアイテムのあいだにだけ余白を入れ、外側の端には入れません。ふつうはこれが望みどおりで、マージンでは難しいところです。既定では、フレックスアイテムは一つの行にとどまり、つぶれてでも縮んでおさまろうとします。flex-wrap: wrap にすると、場所が足りないときに新しい行へ移ります。ノートパソコンでは四枚並ぶカードが、タブレットでは二枚ずつ二行、スマートフォンでは一列になります。メディアクエリはいりません。
アイテムがのびる・縮むしくみ
アイテムにつける flex 一括指定は三つの値をとります。flex-grow は、あまった場所をきょうだいと比べてどれだけとるか、flex-shrink は、場所が足りないときにどれだけ縮むか、flex-basis は、のび縮みする前のはじめの大きさです。flex: 1 1 200px は、200 ピクセルから始めて、grow が同じく 1 のほかのアイテムとあまった場所を等しく分けるという意味です。flex: 1 だけなら 1 1 0% の省略で、すべてのアイテムが同じ幅になります。一つのアイテムを flex-grow: 2、ほかを 1 にすると、そのアイテムはあまった場所をほかの 2 倍とります。
見た目の順番と本当の順番
フレックスボックスでは、flex-direction: row-reverse や order プロパティで、HTML にふれずにアイテムの表示順を変えられます。これは注意して使いましょう。キーボードのフォーカスやスクリーンリーダーは HTML の順番に従います。画面では Contact が Home より前にあるのに Tab キーで Home に先に移ると、キーボードを使う人は迷ってしまいます。順番が意味にかかわるときは、HTML で順番を変えましょう。
| フレックスコンテナー | display: flex をもつ親 |
| フレックスアイテム | フレックスコンテナーの直接の子 |
| 主軸 | 並ぶ向き。flex-direction で決まる |
| justify-content | 主軸にそってアイテムを配置する |
| align-items | 交差軸の上のアイテムの位置を決める |
| gap | アイテムのあいだの余白。端には入らない |
| flex: 1 1 200px | grow 1、shrink 1、basis 200px |
- 要素をフレックスコンテナーにする宣言はどれですか?
- display: flex
- flex: 1
- position: flex
- 行の中で、アイテムを横に広げて配置するプロパティはどれですか?
- justify-content
- align-items
- flex-wrap
- flex-direction: column のとき、justify-content は何を制御しますか?
- 縦方向の配置
- 横方向の配置
- フォントサイズ
- 最初と最後のアイテムを両端に置き、あいだを等しくあける値はどれですか?
- space-between
- space-around
- center
- align-items の既定値はどれですか?
- stretch
- center
- flex-start
- すき間のない 400px の入れ物に、flex: 1 のアイテムが四つあります。それぞれの幅はいくつですか?
- flex-basis が 0 のアイテム三つが 400px を分け合います。一つは flex-grow 2、ほかは 1 です。大きいアイテムの幅はいくつですか?
- flex-wrap: wrap で何ができるようになりますか?
- 場所がないとき、アイテムが新しい行へ移る
- アイテムの中で文字が折り返す
- アイテムが重なる
- order プロパティで Contact を画面の先頭にしましたが、HTML では最後です。今でも最後に Contact に移るのは何ですか?
- キーボードのフォーカスとスクリーンリーダー
- マウスポインター
- 何も足りない
- フレックスボックスは一度にいくつの次元でレイアウトしますか?
- display: flex で、直接の子が主軸にそって並ぶ。
- 主軸は justify-content、交差軸は align-items、あいだは gap。
- flex は grow shrink basis。行を折り返すなら flex-wrap: wrap。見た目の順番は HTML の順番と同じに。
このコースの出典 (6)
- W3C CSS Working Group specifications: CSS Snapshot 2025, Selectors Level 4, CSS Cascading and Inheritance Level 5, CSS Color Level 4, CSS Values and Units Level 4, CSS Box Model Level 3, CSS Box Sizing Level 3, CSS Fonts Level 4, CSS Flexible Box Layout Level 1, CSS Grid Layout Level 2, Media Queries Level 4 and Level 5 (w3.org/TR/, checked 2026-10-17)
- MDN Web Docs, Learn web development: CSS styling basics and CSS layout, and the CSS reference (developer.mozilla.org/en-US/docs/Learn_web_development/Core/Styling_basics, .../Core/CSS_layout, developer.mozilla.org/en-US/docs/Web/CSS, checked 2026-10-17)
- W3C, CSS history and CSS1 Recommendation of 17 December 1996 (w3.org/Style/CSS20/history.html, w3.org/press-releases/1996/css1-rec, checked 2026-10-17)
- W3C WCAG 2.2, success criteria 1.4.3 Contrast (Minimum)
- 1.4.8 Visual Presentation, 1.4.10 Reflow, 1.4.12 Text Spacing (w3.org/TR/WCAG22/, checked 2026-10-17)
- every code exercise checked with a Playwright probe against a reference solution.
確認日: 2026-10-17