─ あのCSSはtheme.jsonのここで書く ─
「サイドバーのレイアウト、CSSのflexboxで書いてたけどブロックテーマだとどうするの?」
「max-widthやclampはtheme.jsonのどこに書けばいいの?」
CSSでレスポンシブレイアウトを作ってきた人ほど、ブロックテーマに移行したときに
「あのCSSはどこへ行った?」と
迷子になりがちです。
この記事では
・CSSで書いていたレイアウトの書き方
・ブロックテーマでの対応する書き方
を「翻訳」する形で一つずつ解説します。
「CSSは知ってるけどブロックテーマは初めて」
という方に特に読んでほしい内容です!
CSSとブロックテーマ、何が変わった?
ブロックテーマに移行して最初に戸惑うのが
「レイアウトをどこで制御するのか」がわからなくなることです。
まずここを整理しましょう。
レイアウトの責任者が変わった
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)
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という設定もあります。
これはブロックに「幅広」を指定したときの最大幅です👇
📄 contentSize
通常のブロックの最大幅
- 段落・見出しなど
- 記事本文の読みやすい幅
- CSSのmax-widthに相当
🖼️ wideSize
「幅広」ブロックの最大幅
- 画像・テーブルなど
- 本文より少し広く見せたい時
✅ まとめ
CSSのmax-width → theme.jsonのcontentSize
幅広ブロック用にwideSizeも設定できる
2つの幅を設定するだけで、ブロックの幅が自動で制御されます!
左右の余白(padding → useRootPaddingAwareAlignments)
CSSでコンテナの左右に余白をつけるとき、paddingやmax()を使っていましたよね。
ブロックテーマでは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
/* 各ブロックが自分で
幅を守ってくれる! */
✅ まとめ
CSSのpadding: 0 max(10px, 5vw) → useRootPaddingAwareAlignments: true
ラッパーdivで幅を管理する時代は終わり!
theme.jsonに設定するだけで各ブロックが自律して幅を守ってくれます😊
サイドバーのレイアウト(flexbox → columnsブロック)
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はどこへ行った?
CSS時代は各要素にmarginやpaddingを細かく書いていましたよね。
ブロックテーマでは管理の仕方がガラッと変わります。
marginはblockGapで管理する
ブロックテーマでは、ブロックとブロックの間の余白を
blockGapという設定で一括管理します。
CSS時代
p { margin-bottom: 1rem; }
h2 { margin-top: 2rem; }
h3 { margin-top: 1.5rem; }
要素ごとに個別に書いてた
ブロックテーマ
"styles": {
"spacing": {
"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)
CSS時代はclamp()を使って
フォントサイズを画面幅に応じて自動で伸び縮みさせていました。
ブロックテーマではtheme.jsonのfluid設定で同じことができます。
CSSで書いてたこと
/* フォントサイズをclampで可変にする */
h1 {
font-size: clamp(1.75rem, (1rem + 3vw), 2.25rem);
}
/* 最小値:1.75rem
推奨値:1rem + 3vw(画面幅で変動)
最大値:2.25rem */
clampの考え方はこうでしたよね👇
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": "◯"}
推奨値の計算が不要になって、さらにシンプルに書けます!
対応表まとめ(一覧で見る)
ここまでの内容を一覧表で確認しましょう。
「あの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に集約されます。
書く量は減って、管理はラクになります😊
もっと使いこなしたい人へ
ここまで「CSSからブロックテーマへの翻訳」を見てきました。
最後に2つの大事なポイントをお伝えします。
CSSが完全にいらなくなるわけではない
「ブロックテーマにしたらCSSは一切書かなくていい!」
…というわけでは残念ながらありません😅
⚠️ まだCSSが必要な場面
- columnsブロックのブレイクポイントを変えたい(600px固定のため)
- gapをmax()で可変にしたい
- ホバーエフェクトなどの動的なスタイル
- theme.jsonで対応できない細かいスタイル調整
✅ CSSが不要になった場面
- コンテナの最大幅(contentSize)
- ブロック間のmargin(blockGap)
- スマホ対応のメディアクエリ(ブロックが自動対応)
- フォントサイズの可変(fluid)
- 囲みボックス(register_block_style)
つまりこういうイメージです👇
📝 残ったCSSはどこに書く?
どうしても必要なCSSはstyle.cssに書きます。
ただし「theme.jsonで書けないものだけ」というルールを守ることが大切です。
CSSを書きすぎると、カオスになります😅
✅ 今日のまとめ
① CSSの知識はブロックテーマでも活きる!
② 書く場所がCSSファイルからtheme.jsonに変わっただけ
③ メディアクエリはほぼ不要になった
④ どうしても必要なCSSだけstyle.cssに書く
⑤ 「翻訳」さえできれば移行は怖くない😊
