CSS 整形とは?
CSS 整形とは、カスケーディングスタイルシートに一貫したインデント、改行、スペースを追加して、コードを人間が読みやすくするプロセスです。ブラウザは CSS 内の空白を完全に無視します。1 行に圧縮されたコードと整然とインデントされたスタイルシートは、まったく同じレンダリング結果を生み出します。違いは可読性のみです。整形された CSS なら、セレクターをひと目で把握し、セミコロンの欠落を見つけ、カスケードの全体像を素早く理解できます。
CSS フォーマッター(CSS ビューティファイアやプリティプリンターとも呼ばれます)は、圧縮されたり書き方が不統一だったりする CSS を、均一なインデント・1 行 1 宣言・一貫した波括弧の配置で書き直します。これはミニファイの逆操作であり、美化(ビューティフィケーション)またはプリティプリントとも呼ばれます。ミニファイが本番環境向けにファイルサイズを削減するために空白を除去するのに対して、整形は開発・コードレビュー・コードベースの保守のために構造を復元します。
CSS 仕様(W3C CSS Syntax Module Level 3)はスタイルシートの文法を定義していますが、空白の規約については何も規定していません。整形ルールはチームの判断によるものです。タブかスペースか、2 スペースか 4 スペースか、波括弧のスタイル、ルールセット間の空行。フォーマッターは選択した規約を、すべてのファイルにわたって一貫して適用します。多くのチームはその選択を .prettierrc や .editorconfig ファイルに記述しています。
この CSS フォーマッターを使う理由
CSS を貼り付けるだけで、ミリ秒単位で適切にインデントされた出力が得られます。エディタープラグインのインストールも、設定ファイルの作成も、アカウント登録も不要です。
CSS フォーマッターの使用例
CSS プロパティ順序リファレンス
ほとんどの CSS フォーマッターはプロパティの並び順を変更しません。ただし、多くのスタイルガイドでは関連するプロパティをグループ化することを推奨しています。以下の表は、Stylelint の order プラグインや CSScomb などのツールで使われる一般的なグループ化規約を示しています。
| グループ | プロパティ例 | 目的 |
|---|---|---|
| Position & Layout | position, display, float, clear | Defines the element's rendering mode |
| Box Model | width, height, margin, padding | Controls dimensions and spacing |
| Typography | font-size, line-height, color | Text styling properties |
| Visual | background, border, box-shadow | Decorative properties |
| Animation | transition, animation, transform | Motion and transform effects |
| Misc | cursor, overflow, z-index | Behavioral and stacking properties |
このグループ化は規約であり、CSS の要件ではありません。ブラウザはルールブロック内のプロパティの位置に関係なく、詳細度とソース順に基づいて宣言を適用します。フォーマッターは空白とインデントに注力し、プロパティの並び替えは Stylelint などのツールが担う別のリント上の問題です。
CSS 整形 vs. CSS ミニファイ
整形とミニファイは逆の操作で、開発の異なる段階で使われます。
コード例
さまざまな言語と環境で CSS をプログラム的に整形する方法を示します。
import * as prettier from 'prettier'
const ugly = 'body{margin:0;padding:0}h1{font-size:2rem;color:#333}'
const formatted = await prettier.format(ugly, {
parser: 'css',
tabWidth: 2,
singleQuote: true,
})
// → "body {\n margin: 0;\n padding: 0;\n}\n\nh1 {\n font-size: 2rem;\n color: #333;\n}\n"import cssbeautifier
ugly = 'body{margin:0;padding:0}h1{font-size:2rem;color:#333}'
opts = cssbeautifier.default_options()
opts.indent_size = 2
formatted = cssbeautifier.beautify(ugly, opts)
# → "body {\n margin: 0;\n padding: 0;\n}\n\nh1 {\n font-size: 2rem;\n color: #333;\n}"# Format a single file in place
npx prettier --write styles.css
# Format all CSS files in a directory
npx prettier --write "src/**/*.css"
# Check formatting without modifying files
npx prettier --check "src/**/*.css"
# Pipe minified CSS through stdin
echo "body{margin:0;padding:0}" | npx prettier --parser css<?php
// composer require sabberworm/php-css-parser
require 'vendor/autoload.php';
use Sabberworm\CSS\Parser;
use Sabberworm\CSS\OutputFormat;
$input = 'body{margin:0;padding:0}h1{font-size:2rem;color:#333}';
$document = (new Parser($input))->parse();
echo $document->render(OutputFormat::createPretty());
// → body {
// margin: 0;
// padding: 0;
// }
// h1 {
// font-size: 2rem;
// color: #333;
// }