各ユーティリティクラスの意味と動作を視覚的に理解しよう
💡 ポイント: --spacing は 0.25rem (4px) がデフォルト。
数値を掛け算して実際のサイズが決まるので、mt-1 = 4px、mt-2 = 8px、mt-4 = 16px ... というように 4px刻み で増えていく!
| クラス | 計算 | 結果 | ビジュアル |
|---|---|---|---|
| mt-0 | 0.25rem × 0 | 0px | |
| mt-1 | 0.25rem × 1 | 4px | |
| mt-2 | 0.25rem × 2 | 8px | |
| mt-4 | 0.25rem × 4 | 16px | |
| mt-8 | 0.25rem × 8 | 32px | |
| mt-16 | 0.25rem × 16 | 64px |
⚠️ 負のマージンの使いどころ: 要素を重ねたり、親要素からはみ出させたいときに使う。 カード画像をヘッダーに重ねたり、コンテンツを少し上にずらすデザインパターンでよく使われる。
ml-auto で右寄せ:
mx-auto で中央寄せ:
--spacing の計算を介さず、直接 1px が設定される。
カスタムプロパティ方式:
任意値方式:
💡 使い分け:
• mt-(--my-space) → デザインシステムのCSS変数を使いたいとき
• mt-[20px] → 規定スケール外のピンポイントな値が必要なとき
⚡ 重要ポイント: space-x-* / space-y-* は親要素に付けるクラス。
各子要素に個別にマージンを付けるのではなく、最後の子以外(:not(:last-child))にマージンが自動適用される!
🔍 CSSの仕組みを分解して理解:
📝 つまりこういうこと:
① :not(:last-child) → 最後の子以外に適用
② --tw-space-x-reverse: 0 の時 → 右側(end)だけにマージン
③ --tw-space-x-reverse: 1 の時 → 左側(start)だけにマージン
なぜ margin-inline-start/end ? → RTL(右から左)言語に自動対応するため!
flex-row + space-x-4(通常):
✅ margin-inline-end で右側にマージン
flex-row-reverse + space-x-reverse + space-x-4:
🔄 reverse=1 → margin-inline-start で左側にマージン
💡 なぜ必要?: flex-row-reverse はDOM上の順序は変えずに見た目の順序だけ反転する。
でも :not(:last-child) はDOM順序で判定されるので、マージンの付く方向もreverseに合わせて反転させる必要がある!
space-x-4:
gap-4 (推奨):
✅ 結論: 基本的には gap を使おう! space-x/y は、flex-row-reverse との組み合わせや、
既存コードとの互換性が必要な場合に使う。Tailwind v4 でも space-* はサポートされているが、
新しいプロジェクトでは gap がベタープラクティス。
| パターン | 意味 | 例 |
|---|---|---|
| mt-<n> | 上マージン = n × 4px | mt-4 → 16px |
| -mt-<n> | 負の上マージン(上に引く) | -mt-4 → -16px |
| mt-auto | 自動マージン(寄せ/中央揃え) | Flexで下に押す |
| mt-px | 1px固定マージン | ボーダー微調整 |
| mt-(--var) | CSS変数を参照 | デザイントークン |
| mt-[20px] | 任意の値を直接指定 | ピンポイント調整 |
| space-x-<n> | 子要素の横方向の間隔 | 親に付ける |
| space-y-<n> | 子要素の縦方向の間隔 | 親に付ける |
| space-x-reverse | 逆順時のマージン方向反転 | flex-row-reverse時 |