基礎編

2025 年版displayマルチキーワード構文超入門ガイド

WEB先案内

本記事は備忘録として記録した内容です(2025年7月時点)。
可能な限り正確を期していますが、仕様やブラウザの更新により結果が異なることがあります。実装の最終判断は公式仕様・MDN などの一次情報と実機検証に基づいて行ってください。

まずは結論

この記事でわかること

  • display: block grid; など “2 語” 指定の読み解き方
  • 3 語になる特別ケース ‑ list-item の正体
  • flow‑rootcontents など、今どき必須の特殊値
  • 2025 年7月現在のブラウザ対応状況と安全なフォールバック
そもそも何が変わったの?

何が変わったの?

旧式(外側と内側を別々に書く)

.card { display: block; }      /* 要素じたいはブロック */
.card__items { display: grid; }/* 子どもはグリッドで並べる */
CSS

新式(外側+内側を 1 行で)

.card {
  display: block grid;         /* ← 1 行で完結! */
}
CSS

要点は「2 語セット」

  • 1 語目=外側 (outer)
    その要素じたいが文書内でどう並ぶ?(block / inline など)
  • 2 語目=内側 (inner)
    要素の中で子どもをどう並べる?(flex / grid / flow など)
覚え方

「外側 → 内側」の順で 2 語を並べるだけ。

外側(outer)と内側(inner)の組み合わせ早見表

外側(outer)内側(inner)具体例ひとこと
blockflowdisplay:block flow;従来の「ブロック要素」
blockflexdisplay:block flex;フレックスコンテナ
blockgriddisplay:block grid;グリッドコンテナ
inlineflexdisplay:inline flex;テキスト行の中でも崩れにくい
inlinegriddisplay:inline grid;インライングリッド

覚え方
  • display: grid display: block grid
  • display: block display: block flow

なぜ2値構文が必要になったの?

  • CSS1の時代は、レイアウトモデルが少なく「外側だけ」分かれば十分でした(block / inline など)。
  • CSS2の時代table が登場し、内側のモデルという考え方が広がります。
  • Flexbox / Grid の普及で「外側」と「内側」を明示しないと表現できない場面が増え、2 値構文が主流に。

つまり、設計の意図を 1 行でハッキリ書けるようになった、が最大のメリットです。

シングル値 → 2 値への対応(フル表)

フロー系

従来(シングル)新しい 2 値生成ボックス
blockblock flowブロック
inlineinline flowインライン
inline-blockinline flow-rootインラインブロック
flow-rootblock flow-rootブロック(ルート)
run-inrun-in flowランイン
list-itemblock flow list-itemマーカー付きブロック

※ run-in は仕様上の値ですが主要ブラウザでは未実装です。

フロー以外

従来(シングル)新しい 2 値生成ボックス
flexblock flexフレックスコンテナ
gridblock gridグリッドコンテナ
tableblock tableテーブルラッパー
rubyinline rubyルビコンテナ
inline-flexinline flexインラインフレックス
inline-gridinline gridインライングリッド
inline-tableinline tableテーブル(インライン)
none非表示
(単独キーワード)
contents子階層に置き換え
(単独キーワード)
コードで理解

短く書けて、意図が伝わる

インラインフレックスで “価格+バッジ”

<span class="price">¥9,800 <span class="tax">税込</span></span>
HTML

.price{
  display: inline flex;      /* outer: inline / inner: flex */
  gap: .25em;
  align-items: baseline;
}
CSS

clearfix をやめて flow-root

.div{
  display: block flow-root;  /* margin のはみ出しを防止 */
}
CSS

ラッパーを消してネスト削減(contents

/* PC 幅では .card__body のボックスを作らず、子だけ並べる */
@media (min-width: 800px){
  .card__body{ display: contents; }
}
CSS

⚠️注意

contents は要素じたいの 背景や枠線・margin/padding が無効 になります。必要な装飾は子要素へ移動しましょう。

3つ目の語が付いて

3 値になるのは list-item のときだけ

3つ目の語が付いて3値になるのは、list-item を使うときだけです。
flow-root は内側(inner)で使う2値構文、contents は単独キーワード(外側・内側を持たない)です。

/* 自動で ::marker(番号・黒丸など)が付く */
h2.section-title{
  display: block flow list-item;  /* 3 語 */
}

/* 省略形(内部的には上と同義)*/
h2.section-title{
  display: list-item;             /* = block flow list-item */
}
CSS

⚠️注意

flow-rootcontents を「3 値」と呼ぶのは誤りです。
flow-root2 値の内側contents単独キーワード

フォーム要素(label / fieldset など)の親や、位置計算に依存する場面では display: contents を避けるのが安全です。

2025年7月時点

ブラウザ対応と安全な書き順

  • Chrome / Edge / Firefox / Safari(デスクトップ・モバイル)
    … 2 値構文・list-itemflow-rootcontents は概ね対応済み
  • IE11 など旧環境
    … 非対応。フォールバックが必要
/* 1) まず旧式(シングル値)を書く */
.list{ display: grid; }

/* 2) すぐ下で 2 値を上書き(モダン環境が勝つ) */
.list{ display: block grid; }
CSS
CSS / レイアウト設計

まとめ

display2つの言葉を並べて「外側のふるまい」と「内側のレイアウト」を同時に指定できます。

例)display: block grid; は「要素はブロックとして並び、子どもはグリッドで並べる」の意味。

3つ目の言葉が必要になるのは list-item を付けるときだけ。

flow-rootcontents を使えば、昔の clearfix や余計なラッパーもぐっと減らせます。

主要ブラウザはすでに対応済み。まずは小さな UI から 1行だけ 新しい書き方に置き換えて、効果を確認してみましょう。

この記事のハイライト
  • display: <外側> <内側> が基本。
    gridblock gridblockblock flow と理解しておくと迷わない
  • 3値構文は list-item のときだけ(=block flow list-item 相当)
  • flow-root で clearfix 不要に、contents で余計な div を削減
  • 主要ブラウザは対応済み。古い環境が混在する場合は
    旧式 → 新式の順に 重ね書き すれば安全

「どこから直せばいい?」と迷ったら、まずは ボタン+アイコンinline flex に。

つまずいたところや、うまくいった事例があれば、ぜひコメントで教えてください。

一緒に、読みやすく壊れにくい CSS にしていきましょう。

ココナラよりも安い!

あなたのお悩みをズバッと解決!

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

ABOUT ME
WEBさん
WEBさん
WordPressの不具合をなおす人
あなたのお仕事をする時間を使ってITに関することを調べたり、トライしてみたりして、それでもうまくいかない。そんなことはありませんか? WEB先案内をご利用いただくと、困ったときにITの顧問としてあなたのITに関するお悩みにお答えし、サポートを行うことができます。
記事URLをコピーしました