コンテンツにスキップ

標準の名称と定義

StrataCSSが標準として定める分類と、定義している内容をまとめます。

各種定義は、既存のCSS設計手法や、業界の一般用語を再編したものです。
以下、それぞれの名称と説明、参考情報として由来と類似の名称も併記します。

スコープの名称

この項ではスコープ(Global / Pages)を扱います。
ただし Pages はスコープ名であると同時に分類(レイヤー)名でもあるため、定義は「CSS分類の名称」の項にまとめます。スコープと分類は別の軸で、Pages だけが両方に同名で登場します。

※ ここでの「スコープ」は影響範囲の分類のことであり、CSSの @scope(セレクタの適用範囲を絞るアットルール)とは別です。

Global

Global(グローバル)は、サイト全域を表す名称です。
GlobalはCSS分類には登場せず、スコープの可視化のみに寄与します。

具体的には、同名のディレクトリ global/ を作成し、該当するCSSはすべてその中で管理することで、一目で影響範囲を把握できるようにします。

  • 名称の由来: 一般用語
  • 類似の名称: Site , Shared , Common (いずれも一般用語)

CSS分類の名称

Base

Base(ベース)は、プロジェクトの基底となるCSSです。

全域に影響する基礎や設定系のCSSであり、以下の Generic 〜 Elements までを包括する概念として定義します。

  • 名称の由来: SMACSS
  • 類似の名称: Foundation(MCSS , FLOCSS)

Generic

Generic(ジェネリック)は、異なるブラウザの初期スタイルを揃えるためのCSSです。
リセットCSS、ノーマライズ、サニタイズと呼ばれるようなCSSが該当します。

CSS|コード例
* {...}
html {...}
body {...}
  • 名称の由来: ITCSS
  • 類似の名称: General(一般用語) , Common(一般用語)

Library

Library(ライブラリ)は、外部で作成された基底系や共通機能のCSSです。
例えばBootstrapや、BulmaなどのCSSフレームワークや、全域で利用する視差効果やアニメーションなどのCSSが該当します。

CSS|コード例
@import "bootstrap.css";
SCSS|コード例
@use "swiper/swiper-bundle";

Libraryで読み込んだCSSに Generic に該当するコードが含まれている場合(上記ではBootstrapが該当)、プロジェクトによってはGenericそのものが不要になるか、スタイル指定が少量になる想定です。

  • 名称の由来: 一般用語
  • 類似の名称: lib(短縮形) , vendor(Sass 7-1 pattern)

Resources

Resources(リソース) は、フォントやアニメーションなどの共通アットルールの定義です。
@font-face@keyframes のように、@layer のどのブロックに書いても全レイヤーから名前で参照できるアットルールのうち、定義を一箇所に集約したいものを扱います。

対象アットルールの完全な一覧は 実質グローバルになるアットルールを参照してください。

なお @property は Tokens で管理しても構いません。

CSS|コード例
@font-face {...}
@keyframes fade {...}
  • 名称の由来: 一般用語
  • 類似の名称: Definitions(定義 の意味として)

Tokens

Tokens(トークン)は、デザイントークンとして用いるCSSカスタムプロパティです。
広範で利用する :root {...} による一般的なCSSカスタムプロパティが該当します。

@property の設定も含みますが、Resources で管理するかどうかは適宜決定してください。

CSS|コード例
:root {
  --color-primary: ...;
  --space-md: ...;
}
  • 名称の由来: 一般用語
  • 類似の名称: Variables(一般用語)

Themes

Themes(テーマ)は、ライト、ダークなどのテーマ切り替えに利用するスタイルです。
想定しているのは、Tokens層で定義したCSSカスタムプロパティの上書きです。

もし、class 属性への直接的なスタイリングを許可する場合は、@layer の宣言順を Pages の後に移動させるなどの工夫が必要です。

CSS|コード例
[data-theme="dark"] {
  --color-bg: ...;
}
  • 名称の由来: SMACSS
  • 類似の名称: Skin(一般用語)

Elements

Elements(エレメント)は、プレーンHTML用のスタイルです。
Generic とは役割が異なり、プロジェクト専用のスタイルを適用するためのものです。

正確には「HTML Elements」であり、管理の都合上「HTML」を省略しています。

CSS|コード例
h1 {...}
a {...}
p {...}

Layout

Layout(レイアウト)は、ヘッダー、フッターなどのページレイアウト要素です。
どのページでも必ず表示されるブランディングやナビゲーションなどの「Webサイトの枠組み部分」が該当します。

CSS|コード例
/* クラス名やプレフィックスは任意 */
.header {...}
.footer {...}
  • 名称の由来: SMACSS , FLOCSS , Sass 7-1 pattern , その他
  • 類似の名称: Frame(一般用語)

Components

Components(コンポーネント)は、ボタンやカードなどの共通部品です。
粒度の概念は無く、そのままの定義で共通利用する目的のものを指します。

CSS|コード例
/* クラス名やプレフィックスは任意 */
.button {...}
.card {...}
  • 名称の由来: ITCSS , Sass 7-1 pattern , FLOCSS
  • 類似の名称: Module(SMACSS), Parts(一般用語)

Pages

Pages(ページ)は、ページコンテンツ用のCSSです。
対象は、ページの主たる情報(主に、main タグの中に記述されるもの)です。

例えば、トップページではメインビジュアルや概要説明エリア、サービス紹介ページではサービスの特徴や比較表のコンテンツブロックが該当します。

CSS|コード例
/* クラス名は任意 */
.home-hero {...}

Pages はスコープ名でもあり分類(レイヤー)名でもあります。(説明を参照

  • 名称の由来: AtomicDesign(定義は異なる)
  • 類似の名称: Contents(一般用語) , Project(MCSS / FLOCSS)

Parts

Parts(パーツ)は、複数ページ間で共通利用する部品です。
Pagesスコープで利用するために Components の名前違いとして標準化した命名です。
少量のページで何度か再利用するメールフォームや比較表など、必要に応じて利用します。

CSS|コード例
/* クラス名は任意 */
.contact-form {...}
  • 名称の由来: 一般用語
  • 類似の名称: Components(ITCSS , Sass 7-1 pattern , FLOCSS), Module(SMACSS)

Utilities

Utilities(ユーティリティ)は、単機能のCSSです。

ヘルパークラスやユーティリティクラスと呼ばれるもので、クラス名と効果が1:1になったようなCSSが該当します。 意図的な上書きのために、HTMLの class 属性にマルチクラスで記述するようなスタイルを扱います。

CSS|コード例
.mt-0 {...}
.text-center {...}

Tailwind CSS はユーティリティの集合体ですが、根本的な用途が異なります。もしTailwind CSS を利用することがあるなら、Library 層で扱います。

  • 名称の由来: FLOCSS , ITCSS(2021年版
  • 類似の名称: Cosmetic(MCSS), Helper(PRECSS)

Print

Print(プリント)は、印刷用のCSSです。
@media print の利用を前提とするCSSで、ヘッダーやフッターの除去やフォントサイズの調整など、印刷に関わる上書き用のスタイルを扱います。

@page の設定も含みます。

CSS|コード例
@media print {...}
@page {...}
  • 名称の由来: 一般用語

補助分類の名称

Abstracts

Abstracts(アブストラクト)は、プロジェクト全体で共通利用する関数、Mixin、Sassの変数です。
以下の Settings と Tools を包括する概念として定義します。

Sassを利用しない場合は、後述の Settings は不要となり、abstracts/ 以下にディレクトリを置くことは無い(置くと冗長になる)可能性があります。

  • 名称の由来: Sass 7-1 pattern

Settings

Settings(セッティング)は、内部機構に寄与するメタ言語の変数です。
現在Sass変数のみが該当します。

CSSのネイティブなCSSカスタムプロパティは含みません(これはTokens層で扱います)。

SCSS|コード例(カラー設定)
@use "sass:color";
$main-color: #4139a6;
$color-100: color.mix(#fff, $main-color, 40%);
SCSS|コード例(余白設定)
$space-base: 16px;
$space-md: calc($space-base * 1.25);

Settings では色や余白などを関数や四則演算などで算出し、Tokens層でそれをCSSカスタムプロパティにセットして、個々のスタイリングに利用する(棲み分けする)想定の設計です。

  • 名称の由来: ITCSS

Tools

Tools(ツール)は、スタイル出力用のMixinと、制作を効率化するための関数です。
ネイティブなCSSで利用するシーンは、CSSカスタム関数とミックスイン が実用レベルになった時です。

SCSS|コード例(Mixin)
@mixin mq($breakpoint) {...}
SCSS|コード例(関数)
@function rem($px) {...}
  • 名称の由来: ITCSS

単数形と複数形の使い分け

名称の単数形と複数形は、次のルールで使い分けています。

複数の同種を束ねられるもの(複数形)
Resources / Tokens / Themes / Elements / Components / Pages / Parts / Utilities / Abstracts / Settings / Tools
単一の関心事・慣例優先(単数)
Base / Layout / Library / Print(※不可算名詞)
形容詞ラベル(不変 / 単複なし)
Generic / Global(※スコープ名)

型として一覧化すると次のようになります。

分類名 単複
集合 Resources / Tokens / Themes / Elements / Components / Pages / Parts / Utilities / Abstracts / Settings / Tools 複数
関心事・慣例 Base / Layout / Library / Print(※不可算名詞) 単数
形容詞ラベル Generic / Global(※スコープ名) 不変

総括

ここまで、導入方法とスケーリングの方法、StrataCSSの標準の定義について説明してきました。

行っていることは、「想定するプロジェクトを絞り」、「その範囲で最大規模の概念を定め」、「プロジェクトに応じて縮小もしくは必要なものを追加する」ことです。

これらは業務の標準化に近いものであり、取り扱うプロジェクトの特性や経験などが異なれば、当然感じ方も異なります。(例えば、LP1枚の制作ではスコープ分離すら不要と感じるでしょう)

「枠を準備してから設計する」型を、StrataCSSは一つの標準として提示します。
規則ではなく原則ベースを採るのは、型を土台にしつつ、最適な定義や構造は設計者が決められるようにするためです。
それぞれの名称は「体を表すラベル」 であり、プロジェクトに合わせて設計してください。

原則を中心とし、標準の型をそのまま使うも、必要な部分だけ取り込むも自由です。

次のステップ

ここまでで導入についての説明は終了です。

個別設計と実装にあたり、 @layer の仕様把握が必要です。
参考資料を「実装編」に用意していますので、必要に応じてご確認ください。

@layer導入時の注意点

もしくは、先に独自設計の流れに移る場合は「応用ガイド」からご覧ください。