【CSS → ブロックテーマ】レスポンシブレイアウトの「翻訳ガイド」

─ あのCSSはtheme.jsonのここで書く ─

「サイドバーのレイアウト、CSSのflexboxで書いてたけどブロックテーマだとどうするの?」

「max-widthやclampはtheme.jsonのどこに書けばいいの?」

CSSでレスポンシブレイアウトを作ってきた人ほど、ブロックテーマに移行したときに
「あのCSSはどこへ行った?」と
迷子になりがちです。

この記事では
・CSSで書いていたレイアウトの書き方
・ブロックテーマでの対応する書き方

を「翻訳」する形で一つずつ解説します。
「CSSは知ってるけどブロックテーマは初めて」
という方に特に読んでほしい内容です!

CSSとブロックテーマ、何が変わった?

AD – 読み進める前のひとやすみ

ブロックテーマに移行して最初に戸惑うのが
「レイアウトをどこで制御するのか」がわからなくなることです。
まずここを整理しましょう。

レイアウトの責任者が変わった

CSS時代はstyle.cssやCSSファイルがレイアウトの司令塔でした。
ブロックテーマではtheme.jsonとブロック設定に変わります。

📄 CSS時代

  • style.cssに全部書く
  • max-widthで幅を制御
  • flexboxでサイドバー
  • メディアクエリで切り替え
  • clampでフォント可変

🧩 ブロックテーマ時代

  • theme.jsonに設定を書く
  • contentSizeで幅を制御
  • columnsブロックでサイドバー
  • ブロックが自動で切り替え
  • fluidでフォント可変

でも考え方は同じ

書く場所と書き方は変わりますが、やりたいことは全く同じです。

max-width

コンテナの最大幅

contentSize

theme.jsonで設定

padding: 0 5vw

左右の余白

useRootPaddingAwareAlignments

theme.jsonで設定

display: flex

サイドバーレイアウト

columnsブロック

エディターで設定

@media query

スマホ切り替え

ブロックが自動で対応

書かなくてOK!

clamp()

フォントサイズ可変

fluid: true

theme.jsonで設定

まとめ
「CSSで書いていたこと」が「theme.jsonとブロック設定」に移っただけ。
やりたいことは同じなので、対応関係を覚えれば迷子になりません!
次のセクションから1つずつ翻訳していきます😊

コンテナの幅(max-width → contentSize)

AD – 読み進める前のひとやすみ

CSSで一番よく書いていたレイアウトのひとつがコンテナの最大幅を決める設定です。
ブロックテーマではtheme.jsonに書くだけで完結します。

CSSで書いてたこと

こんなふうに書いていましたよね👇

/* コンテナの最大幅を決める */
.container {
  margin: 0 auto;
  max-width: 1000px;
  width: 95%;
}

/* min()でまとめると */
.container {
  margin: 0 auto;
  width: min(95%, 1000px);
}

theme.jsonではこう書く

同じことをtheme.jsonで書くとこうなります👇

"settings": {
  "layout": {
    "contentSize": "780px",
    "wideSize": "1000px"
  }
}

CSS

width: min(95%, 1000px)

最大幅1000px・画面の95%

theme.json

"contentSize": "780px"

本文の最大幅を設定

📝 CSSとの細かい違い

CSSではwidth: 95%のように画面に対する割合も指定できましたが、
theme.jsonのcontentSize固定値のみ指定できます。
左右の余白は次のセクションのuseRootPaddingAwareAlignmentsで制御します。

wideSize(align-wide)との関係

theme.jsonにはcontentSizeの他にwideSizeという設定もあります。
これはブロックに「幅広」を指定したときの最大幅です👇

ページの幅のイメージ

wideSize(1000px)← 幅広ブロックの最大幅

contentSize(780px)← 通常ブロックの最大幅

📄 contentSize

通常のブロックの最大幅

  • 段落・見出しなど
  • 記事本文の読みやすい幅
  • CSSのmax-widthに相当

🖼️ wideSize

「幅広」ブロックの最大幅

  • 画像・テーブルなど
  • 本文より少し広く見せたい時

まとめ
CSSのmax-width → theme.jsonのcontentSize
幅広ブロック用にwideSizeも設定できる
2つの幅を設定するだけで、ブロックの幅が自動で制御されます!

左右の余白(padding → useRootPaddingAwareAlignments)

AD – 読み進める前のひとやすみ

CSSでコンテナの左右に余白をつけるとき、
paddingmax()を使っていましたよね。
ブロックテーマではtheme.jsonの1行で制御できます。

CSSで書いてたこと

/* 左右の余白を可変にする */
.container {
  padding: 0 max(10px, 5vw);
}

/* 画面が広いほど余白が広がり
   最小でも10pxは確保される */

theme.jsonではこう書く

theme.jsonに1行追加するだけです👇

"settings": {
  "appearanceTools": true,
  "useRootPaddingAwareAlignments": true,
  "layout": {
    "contentSize": "780px",
    "wideSize": "1000px"
  }
}

📝 useRootPaddingAwareAlignmentsって何をしてくれるの?

サイトエディターで「コンテンツの左右余白」
視覚的に設定できるようになります。
さらに全幅ブロック(alignfull)を使うときに
余白の計算を自動でやってくれます。

サイドバーありのレイアウトでは特に重要な設定です。

ラッパーdivが不要になった

CSS時代は「ラッパーdiv」で幅と余白を管理していました。
ブロックテーマではその考え方がガラッと変わります。

😓 CSS時代

<div class="wrapper">
  <div class="container">
    <main>本文</main>
    <aside>サイドバー</aside>
  </div>
</div>

/* 親が子の幅を管理 */
.wrapper { max-width: 1000px; }
.container { padding: 0 5vw; }

😊 ブロックテーマ

/* theme.jsonに書くだけ */
"layout": {
  "contentSize": "780px"
}
"useRootPaddingAwareAlignments":
  true

/* 各ブロックが自分で
   幅を守ってくれる! */

ブロックテーマのイメージ

ヘッダー(全幅)

本文ブロック(contentSize幅)

各ブロックが自動で幅を守る

フッター(全幅)

まとめ
CSSのpadding: 0 max(10px, 5vw) → useRootPaddingAwareAlignments: true
ラッパーdivで幅を管理する時代は終わり!
theme.jsonに設定するだけで各ブロックが自律して幅を守ってくれます😊

サイドバーのレイアウト(flexbox → columnsブロック)

AD – 読み進める前のひとやすみ

CSSで一番手間がかかっていたのがサイドバーのレイアウトではないでしょうか。
flexboxで組んで、メディアクエリでスマホ対応して…という作業が
ブロックテーマではエディターの操作だけで完結します。

CSSで書いてたこと

/* サイドバーレイアウト */
.content {
  display: flex;
  gap: max(3%, 16px);
}

main {
  flex-grow: 1;
}

aside {
  width: max(30%, 200px);
  flex-shrink: 0;
}

/* スマホはサイドバーを下に */
@media (max-width: 768px) {
  .content {
    flex-direction: column;
  }
  aside {
    width: 100%;
  }
}

ブロックテーマではこう作る

テンプレートのHTMLファイルにcolumnsブロックを使うだけです👇

<!-- wp:columns -->
<div class="wp-block-columns">

  <!-- wp:column {"width":"70%"} -->
  <div class="wp-block-column" style="flex-basis:70%">
    <!-- メインコンテンツ -->
  </div>
  <!-- /wp:column -->

  <!-- wp:column {"width":"30%"} -->
  <div class="wp-block-column" style="flex-basis:30%">
    <!-- サイドバー -->
  </div>
  <!-- /wp:column -->

</div>
<!-- /wp:columns -->

display: flex

横並びにする

wp:columns

カラムブロック

flex-grow: 1

残りの幅を埋める

{“width”:”70%”}

カラムの幅を指定

gap: max(3%, 16px)

カラム間の余白

エディターのブロック間隔

サイドパネルで設定

メディアクエリはどこへ行った?

CSS時代はスマホ対応のために@mediaを書く必要がありました。
ブロックテーマではcolumnsブロックが自動でスマホ対応してくれます。

🖥️ PC表示(600px以上)

本文
70%

サイド
30%

横並びで表示

📱 スマホ表示(600px未満)

本文 100%

サイドバー 100%

自動で縦積みに!

⚠️ ブレイクポイントは変更できない

columnsブロックのスマホ切り替えポイントは600px固定です。
CSS時代のように自由にブレイクポイントを変えることはできません。
「768pxで切り替えたい」などの細かい要望がある場合は
style.cssに追加CSSを書く必要があります。

まとめ
CSSのdisplay: flex → wp:columnsブロック
CSSの@media query → columnsブロックが自動対応
メディアクエリを書かなくてもスマホ対応が完了します!
ブレイクポイントは600px固定なので、細かく変えたい場合だけCSSで追加します。

margin・paddingはどこへ行った?

AD – 読み進める前のひとやすみ

CSS時代は各要素にmarginpaddingを細かく書いていましたよね。
ブロックテーマでは管理の仕方がガラッと変わります。

marginはblockGapで管理する

ブロックテーマでは、ブロックとブロックの間の余白を
blockGapという設定で一括管理します。

CSS時代

p { margin-bottom: 1rem; }
h2 { margin-top: 2rem; }
h3 { margin-top: 1.5rem; }

要素ごとに個別に書いてた

ブロックテーマ

"styles": {
  "spacing": {
    "blockGap": "1.5rem"
  }
}

これだけで全ブロックに適用!

blockGapのイメージ

見出しブロック

↕ blockGap(1.5rem)

段落ブロック

↕ blockGap(1.5rem)

画像ブロック

paddingはどうなってる?

ブロックのpaddingはデフォルトで0です。
つけたい場合は3つの方法があります👇

① エディターのスタイルパネルで個別設定

ブロックを選択 → 右パネル「スタイル」→「余白」から設定。
そのブロックだけに適用されます。

② theme.jsonのblocksで一括設定

"blocks": {
  "core/group": {
    "spacing": {
      "padding": {
        "top": "1.5rem",
        "bottom": "1.5rem"
      }
    }
  }
}

③ register_block_styleでスタイルとして登録

まとめボックスやポイントボックスのように
「使いたいときだけ選んで使う」スタイルとして登録します。
→ これが一番柔軟で使いやすい方法です😊

⚠️ ハマりポイント

columnsブロックの子要素(カラム)には
blockGapではなくカラム間の余白が適用されます。
縦方向と横方向で別々に設定が必要な場合は👇

"styles": {
  "spacing": {
    "blockGap": {
      "top": "1.5rem",     ← 縦方向
      "left": "2rem"       ← 横方向(カラム間)
    }
  }
}

まとめ
CSSのmargin → blockGapで一括管理
CSSのpadding → デフォルト0・必要な時だけ追加
細かく書いていたCSS時代よりシンプルに管理できます!

フォントサイズの可変(clamp → fluid)

AD – 読み進める前のひとやすみ

CSS時代はclamp()を使って
フォントサイズを画面幅に応じて自動で伸び縮みさせていました。
ブロックテーマではtheme.jsonのfluid設定で同じことができます。

CSSで書いてたこと

/* フォントサイズをclampで可変にする */
h1 {
  font-size: clamp(1.75rem, (1rem + 3vw), 2.25rem);
}

/* 最小値:1.75rem
   推奨値:1rem + 3vw(画面幅で変動)
   最大値:2.25rem */

clampの考え方はこうでしたよね👇

clamp(最小値・推奨値・最大値)のイメージ

スマホ(小)

1.75rem

最小値で固定

タブレット(中)

〜可変〜

画面幅で自動調整

PC(大)

2.25rem

最大値で固定

theme.jsonのfluidではこう書く

theme.jsonに"fluid": trueを追加するだけで
fontSizesに登録したサイズが自動的にclampに変換されます👇

"settings": {
  "typography": {
    "fluid": true,
    "fontSizes": [
      {
        "slug": "large",
        "size": "1.375rem",
        "fluid": {
          "min": "1.1rem",
          "max": "1.375rem"
        }
      },
      {
        "slug": "x-large",
        "size": "1.75rem",
        "fluid": {
          "min": "1.375rem",
          "max": "1.75rem"
        }
      }
    ]
  }
}

CSS(clamp)

clamp(
  1.1rem,   ← 最小値
  3vw,      ← 推奨値
  1.375rem  ← 最大値
)

theme.json(fluid)

"fluid": {
  "min": "1.1rem",   ← 最小値
  "max": "1.375rem"  ← 最大値
}
/* 推奨値は自動計算! */

💡 fluidのここが便利!

clampの推奨値(真ん中の値)を自動で計算してくれます。
CSS時代はclamp(1.75rem, (1rem + 3vw), 2.25rem)のように
推奨値を自分で計算する必要がありましたが
fluidでは最小値と最大値を渡すだけでOK!

⚠️ 注意点

fluidは今はまだ使わなくてOKです。
テーマの骨格が整ってから、必要を感じたら追加してください。
最初から入れると「なぜこのサイズになってるの?」と
迷子になりやすいので注意です😅

まとめ
CSSのclamp(最小値, 推奨値, 最大値)
 → theme.jsonの"fluid": {"min": "◯", "max": "◯"}
推奨値の計算が不要になって、さらにシンプルに書けます!

対応表まとめ(一覧で見る)

AD – 読み進める前のひとやすみ

ここまでの内容を一覧表で確認しましょう。
「あのCSSはどこに書けばいいんだっけ?」というときのチートシートとして使ってください😊

やりたいこと CSS時代 ブロックテーマ 書く場所
コンテナの最大幅 max-width: 780px contentSize: "780px" theme.json
幅広ブロックの最大幅 max-width: 1000px wideSize: "1000px" theme.json
左右の余白 padding: 0 max(10px, 5vw) useRootPaddingAwareAlignments theme.json
サイドバーレイアウト display: flex wp:columns ブロック
スマホ切り替え @media query ブロックが自動対応 不要!
ブロック間のmargin margin-bottom: 1rem blockGap: "1.5rem" theme.json
padding padding: 1rem デフォルト0・必要時だけ追加 theme.json
フォントの可変 clamp(最小, 推奨, 最大) fluid: {min, max} theme.json
囲みボックス classを自分で作る register_block_style functions.php

全体を通じてのポイント
CSS時代に「あちこちのファイルに散らばっていた設定」が
ブロックテーマではtheme.jsonに集約されます。
書く量は減って、管理はラクになります😊

もっと使いこなしたい人へ

AD – 読み進める前のひとやすみ

ここまで「CSSからブロックテーマへの翻訳」を見てきました。
最後に2つの大事なポイントをお伝えします。

CSSが完全にいらなくなるわけではない

「ブロックテーマにしたらCSSは一切書かなくていい!」
…というわけでは残念ながらありません😅

⚠️ まだCSSが必要な場面

  • columnsブロックのブレイクポイントを変えたい(600px固定のため)
  • gapをmax()で可変にしたい
  • ホバーエフェクトなどの動的なスタイル
  • theme.jsonで対応できない細かいスタイル調整

✅ CSSが不要になった場面

  • コンテナの最大幅(contentSize)
  • ブロック間のmargin(blockGap)
  • スマホ対応のメディアクエリ(ブロックが自動対応)
  • フォントサイズの可変(fluid)
  • 囲みボックス(register_block_style)

つまりこういうイメージです👇

CSS時代 vs ブロックテーマ

CSS時代

CSS(ほぼ全部)

ブロックテーマ

theme.json + ブロック設定(7割)

CSS(3割)

📝 残ったCSSはどこに書く?

どうしても必要なCSSはstyle.cssに書きます。
ただし「theme.jsonで書けないものだけ」というルールを守ることが大切です。
CSSを書きすぎると、カオスになります😅

今日のまとめ
① CSSの知識はブロックテーマでも活きる!
② 書く場所がCSSファイルからtheme.jsonに変わっただけ
③ メディアクエリはほぼ不要になった
④ どうしても必要なCSSだけstyle.cssに書く
⑤ 「翻訳」さえできれば移行は怖くない😊

最後まで読んでいただき、ありがとうございました。
おつかれさまでした 🍵

スポンサーリンク