標準の名称と定義¶
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が該当します。
* {...}
html {...}
body {...}
- 名称の由来: ITCSS
- 類似の名称: General(一般用語) , Common(一般用語)
Library¶
Library(ライブラリ)は、外部で作成された基底系や共通機能のCSSです。
例えばBootstrapや、BulmaなどのCSSフレームワークや、全域で利用する視差効果やアニメーションなどのCSSが該当します。
@import "bootstrap.css";
@use "swiper/swiper-bundle";
Libraryで読み込んだCSSに Generic に該当するコードが含まれている場合(上記ではBootstrapが該当)、プロジェクトによってはGenericそのものが不要になるか、スタイル指定が少量になる想定です。
- 名称の由来: 一般用語
- 類似の名称: lib(短縮形) , vendor(Sass 7-1 pattern)
Resources¶
Resources(リソース) は、フォントやアニメーションなどの共通アットルールの定義です。
@font-face や @keyframes のように、@layer のどのブロックに書いても全レイヤーから名前で参照できるアットルールのうち、定義を一箇所に集約したいものを扱います。
対象アットルールの完全な一覧は 実質グローバルになるアットルールを参照してください。
なお @property は Tokens で管理しても構いません。
@font-face {...}
@keyframes fade {...}
- 名称の由来: 一般用語
- 類似の名称: Definitions(定義 の意味として)
Tokens¶
Tokens(トークン)は、デザイントークンとして用いるCSSカスタムプロパティです。
広範で利用する :root {...} による一般的なCSSカスタムプロパティが該当します。
@property の設定も含みますが、Resources で管理するかどうかは適宜決定してください。
:root {
--color-primary: ...;
--space-md: ...;
}
- 名称の由来: 一般用語
- 類似の名称: Variables(一般用語)
Themes¶
Themes(テーマ)は、ライト、ダークなどのテーマ切り替えに利用するスタイルです。
想定しているのは、Tokens層で定義したCSSカスタムプロパティの上書きです。
もし、class 属性への直接的なスタイリングを許可する場合は、@layer の宣言順を Pages の後に移動させるなどの工夫が必要です。
[data-theme="dark"] {
--color-bg: ...;
}
- 名称の由来: SMACSS
- 類似の名称: Skin(一般用語)
Elements¶
Elements(エレメント)は、プレーンHTML用のスタイルです。
Generic とは役割が異なり、プロジェクト専用のスタイルを適用するためのものです。
正確には「HTML Elements」であり、管理の都合上「HTML」を省略しています。
h1 {...}
a {...}
p {...}
- 名称の由来: ITCSS(2021年版)
Layout¶
Layout(レイアウト)は、ヘッダー、フッターなどのページレイアウト要素です。
どのページでも必ず表示されるブランディングやナビゲーションなどの「Webサイトの枠組み部分」が該当します。
/* クラス名やプレフィックスは任意 */
.header {...}
.footer {...}
- 名称の由来: SMACSS , FLOCSS , Sass 7-1 pattern , その他
- 類似の名称: Frame(一般用語)
Components¶
Components(コンポーネント)は、ボタンやカードなどの共通部品です。
粒度の概念は無く、そのままの定義で共通利用する目的のものを指します。
/* クラス名やプレフィックスは任意 */
.button {...}
.card {...}
- 名称の由来: ITCSS , Sass 7-1 pattern , FLOCSS
- 類似の名称: Module(SMACSS), Parts(一般用語)
Pages¶
Pages(ページ)は、ページコンテンツ用のCSSです。
対象は、ページの主たる情報(主に、main タグの中に記述されるもの)です。
例えば、トップページではメインビジュアルや概要説明エリア、サービス紹介ページではサービスの特徴や比較表のコンテンツブロックが該当します。
/* クラス名は任意 */
.home-hero {...}
Pages はスコープ名でもあり分類(レイヤー)名でもあります。(説明を参照)
- 名称の由来: AtomicDesign(定義は異なる)
- 類似の名称: Contents(一般用語) , Project(MCSS / FLOCSS)
Parts¶
Parts(パーツ)は、複数ページ間で共通利用する部品です。
Pagesスコープで利用するために Components の名前違いとして標準化した命名です。
少量のページで何度か再利用するメールフォームや比較表など、必要に応じて利用します。
/* クラス名は任意 */
.contact-form {...}
- 名称の由来: 一般用語
- 類似の名称: Components(ITCSS , Sass 7-1 pattern , FLOCSS), Module(SMACSS)
Utilities¶
Utilities(ユーティリティ)は、単機能のCSSです。
ヘルパークラスやユーティリティクラスと呼ばれるもので、クラス名と効果が1:1になったようなCSSが該当します。 意図的な上書きのために、HTMLの class 属性にマルチクラスで記述するようなスタイルを扱います。
.mt-0 {...}
.text-center {...}
Tailwind CSS はユーティリティの集合体ですが、根本的な用途が異なります。もしTailwind CSS を利用することがあるなら、Library 層で扱います。
- 名称の由来: FLOCSS , ITCSS(2021年版)
- 類似の名称: Cosmetic(MCSS), Helper(PRECSS)
Print¶
Print(プリント)は、印刷用のCSSです。
@media print の利用を前提とするCSSで、ヘッダーやフッターの除去やフォントサイズの調整など、印刷に関わる上書き用のスタイルを扱います。
@page の設定も含みます。
@media print {...}
@page {...}
- 名称の由来: 一般用語
補助分類の名称¶
Abstracts¶
Abstracts(アブストラクト)は、プロジェクト全体で共通利用する関数、Mixin、Sassの変数です。
以下の Settings と Tools を包括する概念として定義します。
Sassを利用しない場合は、後述の Settings は不要となり、abstracts/ 以下にディレクトリを置くことは無い(置くと冗長になる)可能性があります。
- 名称の由来: Sass 7-1 pattern
Settings¶
Settings(セッティング)は、内部機構に寄与するメタ言語の変数です。
現在Sass変数のみが該当します。
CSSのネイティブなCSSカスタムプロパティは含みません(これはTokens層で扱います)。
@use "sass:color";
$main-color: #4139a6;
$color-100: color.mix(#fff, $main-color, 40%);
$space-base: 16px;
$space-md: calc($space-base * 1.25);
Settings では色や余白などを関数や四則演算などで算出し、Tokens層でそれをCSSカスタムプロパティにセットして、個々のスタイリングに利用する(棲み分けする)想定の設計です。
- 名称の由来: ITCSS
Tools¶
Tools(ツール)は、スタイル出力用のMixinと、制作を効率化するための関数です。
ネイティブなCSSで利用するシーンは、CSSカスタム関数とミックスイン が実用レベルになった時です。
@mixin mq($breakpoint) {...}
@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 の仕様把握が必要です。
参考資料を「実装編」に用意していますので、必要に応じてご確認ください。
もしくは、先に独自設計の流れに移る場合は「応用ガイド」からご覧ください。