コンテンツにスキップ

CSS レイヤー

プロジェクト全体の CSS を以下の 3 層に分けます。

レイヤー役割
グローバル層サイト全体の設定値・関数・Mixin・ユーティリティ
ページ層ページごとのエントリ CSS(コンポーネントの配置)
コンポーネント層Block / Element + Variant / State による部品設計

グローバル層

サイト全体で共有する設定値・関数・Mixin・リセット・ユーティリティを担当します。

役割別ファイル構成

カテゴリファイル役割
設定値variables.scss, global/config.scssカラー・タイポグラフィ・スペーシング・ブレークポイント
関数・Mixinglobal/function.scss, global/mixin.scss数値変換・メディアクエリ生成など
基本スタイルreset.scss, base.scss, print.scssリセット・要素スタイル・印刷用
ユーティリティutilities.scss.u-hidden, .u-sr-only など単機能クラス
共有アニメーションkeyframes.scss複数コンポーネントで使う @keyframeskf- prefix)

ユーティリティクラス

構造やスキンに依存しない単機能クラスを限定的に定義します。

  • u- プレフィックス必須(例: .u-hidden, .u-sr-only
  • Block / Element の構造ルール(2 語 / 1 語)とは別カテゴリ
  • サイト全体で再利用される最小限にとどめる

共有アニメーション

複数コンポーネントで使う @keyframeskeyframes.scss に集約します。

  • kf- などの prefix を付けて命名
  • ルート直下に配置(@media / @layer 内は不可)

ページ層

各ページのエントリ SCSS です(例: home.scss, about.scss)。

役割

  • コンポーネントの読み込み(@use
  • ページのルートクラス(.main-container など)で子 Block を配置
  • ページ固有の余白・背景など

担当範囲

担当する担当しない
コンポーネントの読み込み・配置コンポーネント内部のスタイル
Block 間の余白調整Block 内部のレイアウト

コード例

@use "@styles/partials/global" as *;
@use "@components/hero/hero-container";
.main-container {
> .hero-container {
// @components/hero/hero-container.scss
margin-top: 0;
}
}

コンポーネント層

Block / Element による構造設計、Variant / State による見た目と状態の分離、SCSS のセクション構成、ファイル管理を一貫したルールで整理します。

  • Block(2 語): 部品そのもの(例: .hero-container
  • Element(1 語): Block 内の要素(例: .title
  • Variant / State: data 属性(デフォルト)または class モードで表現
  • 1 Block = 1 ファイル: 各 Block は 1 つの SCSS ファイルと対応
  • @keyframes: Block 固有のものは各コンポーネント SCSS のルート直下・末尾に配置する

詳細は コンポーネント を参照してください。

ディレクトリ構成例

src/
├── styles/ # グローバル層
│ └── partials/
│ ├── global/
│ │ ├── config.scss
│ │ ├── function.scss
│ │ ├── index.scss
│ │ └── mixin.scss
│ ├── base.scss
│ ├── keyframes.scss
│ ├── print.scss
│ ├── reset.scss
│ ├── utilities.scss
│ └── variables.scss
├── components/ # コンポーネント層
│ ├── common/ # サイト全体で共通
│ │ └── site-header/
│ │ └── site-header.scss
│ ├── parts/ # 複数ページで共有
│ │ └── hero-banner/
│ │ └── hero-banner.scss
│ └── pages/ # ページ固有
│ ├── home/
│ │ └── home-hero/
│ │ └── home-hero.scss
│ └── about/
│ └── about-intro/
│ └── about-intro.scss
└── assets/
└── css/ # ページ層
├── home.scss
└── about.scss

SCSS 構造サンプル(簡易版)

spiracss-scss-structure