Contents
はじめに
Gutenberg(ブロックエディタ)対応のテーマを作成するために、CSSを設計しようと思ったのですが、
- 読み込まれるCSSの数が多い
- どのように読み込む/読み込まれるのか
- フロント側、エディタ側どちらで読み込まれるのか
などこんがらがるポイントが多かったので、まとめてみました。
style.min.css
{wp_dir}/wp-includes/css/dist/block-library/style.min.css
- Github:WordPress/wp-includes/css/dist/block-library/style.css
フロント側で自動的に読み込まれる最初のCSS。
各ブロックの基本的なレイアウトを定義しており、特にブロックエディタ用のCSSを用意していなくても、ある程度いい感じに表示してくれるのはこのCSSのおかげ。
以下のように、wp_dequeue_style
で無効化する事も出来ます。
function mytheme_enqueue() {
wp_dequeue_style( 'wp-block-library' );
}
add_action( 'wp_enqueue_scripts', 'mytheme_enqueue' );
ただし、例えばテキストの中央寄せ( .has-text-align-center
)などの基本的なスタイルすら適用されなくなるので、全ブロックをフルカスタマイズしてやろうという本気の方以外は、有効にしたままの方が良いです。
theme.min.css
{wp_dir}/wp-includes/css/dist/block-library/theme.min.css
- Github:WordPress/wp-includes/css/dist/block-library/theme.css
フロント側で読み込まれる二つ目のCSS。
style.min.css
に加え、もう少し見栄え良くスタイルを整えてくれます。
こちらは style.min.css
と異なり、add_theme_support( 'wp-block-styles' );
で手動で読み込む必要があります。
コードもそれほど多くないので、読み込まずに自前でスタイルを用意してもよいと思います。
load-styles.php
{wp_dir}/wp-admin/load-styles.php
- Github:WordPress/wp-admin/load-styles.php
エディタ側で自動的に読み込まれる最初のCSS。
ブロックエディタ含め、管理画面全体のCSSが定義されています。
style-both.css
※ファイル名は任意
アクションフック enqueue_block_assets
を使うと、フロント側・エディタ側両方で読み込まれます。
function mytheme_enqueue_both() {
wp_enqueue_style( 'style-both', get_template_directory_uri() . '/style-both.css' );
}
add_action( 'enqueue_block_assets', 'mytheme_enqueue_both' );
フロント側・エディタ側を同時にスタイリング出来るので便利そうですが、前述した通り、
- フロント側で読み込まれるCSSは
style.min.css
(+theme.min.css
) - エディタ側で読み込まれるCSSは
load-styles.php
と、標準で読み込まれるCSSが違います。
スタイリングのされ方も若干異なるので、一つのCSSプロパティ・値で見え方を完全に統一させることは難しいです。
また、エディタ側のエディタ部はeditor-styles-wrapper
というクラス名でラップされており、フロント側のコンテンツ部は独自のセレクタ( .post-content
とか)でラップするはずなので、共通のセレクタを使う事が出来ません。
とはいえ、セレクタに要素名( h1
とか)を使うと、エディタ側・フロント側とも想定外のパーツにスタイルが当たってしまう懸念があります。
一つの用途として、ブロックにスタイルを適用した時に「is-style-XXX
」といったクラス名がエディタ・フロントともに自動付与されるので、双方のブロックスタイルの見え方を共通のCSSで管理したい、といったケースに使えるのではないかと思います。
style.css
※ファイル名は任意
フロント側で読み込まれるCSS。
アクションフック wp_enqueue_scripts
を使って読み込みます。
function mytheme_enqueue() {
wp_enqueue_style( 'mytheme-style', get_template_directory_uri() . '/style.css' );
}
add_action( 'wp_enqueue_scripts', 'mytheme_enqueue');
フロント側で、 style.min.css
(+ theme.min.css
)の次に読み込まれるCSSです。
一般的に、ヘッダー・フッター・サイドバー等のコンテンツ部以外をスタイリングするためのサイトのベースとなるCSSや、リセットCSS、各種ライブラリのCSSなどを読み込みます。
block-editor-style.css
※ファイル名は任意
アクションフック enqueue_block_editor_assets
を使うと、エディタ側で読み込まれます。
function mytheme_enqueue_block_editor() {
wp_enqueue_style( 'mytheme-block-editor-style', get_template_directory_uri() . '/block-editor-style.css' );
}
add_action( 'enqueue_block_editor_assets', 'mytheme_enqueue_block_editor' );
読み込み順は、
load-styles.php
の後enqueue_block_assets
で読み込んだCSS(style-both.css
等)の前
となります。
また、enqueue_block_assets
と名前が似ているので紛らわしいですが、
enqueue_block_assets
で読み込み → フロント側・エディタ側両方で読み込まれるenqueue_block_editor_assets
で読み込み → エディタ側で読み込まれる
という違いがあります。
エディタ側のブロックをスタイリングするためのCSSとして使われます。
editor-style.css
※ファイル名は任意
クラシックエディタでも使われるエディタ側のCSSで、以下のコードで読み込みます。
add_theme_support( 'editor-styles' );
add_editor_style( 'editor-style.css' );
読み込み順は、
load-styles.php
の後enqueue_block_assets
で読み込んだCSS(style-both.css
等)の後enqueue_block_editor_assets
で読み込んだCSS(block-editor-style.css
等)の後
と、一番最後に読み込まれます。
特徴として、各セレクターの直前にブロックエディタ全体を囲っている .editor-styles-wrapper
というクラスが自動的に挿入されます。 ( セレクタがbody
の場合は、 .editor-styles-wrapper
に置き換わる )
このCSSいついては使い所がまだ分かっていませんが、クラシックエディタ向けのスタイルを書いたりしたら良いんじゃないかと思います。
まとめ
フロント側
順番 | ファイル名 | 自動/手動 | 読み込み方・特徴 |
---|---|---|---|
1 | style.min.css | 自動 | wp_dequeue_style( 'wp-block-library' ); で無効化出来る |
2 | theme.min.css | 手動 | add_theme_support( 'wp-block-styles' ); で読み込む |
3 | style-both.css (ファイル名は任意) | 手動 | アクションフック(enqueue_block_assets )内で読み込む |
4 | style.css (ファイル名は任意) | 手動 | アクションフック(wp_enqueue_scripts )内で読み込む |
エディタ側
順番 | ファイル | 自動/手動 | 読み込み方・特徴 |
---|---|---|---|
1 | load-styles.php | 自動 | – |
2 | block-editor-style.css (ファイル名は任意) | 手動 | アクションフック(enqueue_block_editor_assets )内で読み込む |
3 | style-both.css (ファイル名は任意) | 手動 | アクションフック(enqueue_block_assets )内で読み込む |
4 | editor-style.css (ファイル名は任意) | 手動 | add_editor_style( 'editor-style.css' ) で読み込む ※各セレクタの先頭に、editor-styles-wrapper というclassが自動で付与される |