rscss2e
大規模開発に耐える CSS 構成案
基本原則
FLOCSS を基本とし子要素以下を RSCSS で記述する
独自規則
- フォルダ・ファイル・class は ローワーキャメルケース で記述する
- アンダースコアは使わない
- 親要素・バリアント 以外ではハイフンを使わない
- 親要素はアルファベット小文字1文字 + ハイフンの prefix をつける
- Object フォルダ下のフォルダは上階層に移動し Object フォルダは使用しない
- 深いネスト は極力避けるも許容する
- Utility・Helpers は使わずバリアントで対応
- NuxtJS などのフレームワークではページ・コンポーネント内に scoped で記述するのを優先させ Layout・Project は使わない
- プラグイン・モジュールなどの CSS を上書きする時などは例外を認める
- 例外を使用する際は scoped や wrap して影響範囲を極力狭める
ファイル・ディレクトリ構成
CSS (scss の例)
備考 | prefix | |||
---|---|---|---|---|
style/ | component/ | component | c- | |
foundation/ | _base.scss | reset css の補完など | ||
_destyle.scss | reset css お好みのものを | |||
_mixin.scss | mixin | |||
_variable.scss | 変数 | |||
layout/ | NuxtJS などでは使わない | l- | ||
plugin/ | plugin の css を上書き | |||
project/ | NuxtJS などでは使わない | p- | ||
_styleResources.scss | NuxtJS などのページ・コンポーネントで使用する css をまとめたもの | |||
common.scss | css を import |
ページ・コンポーネント(NuxtJS + アトミックデザイン の例)
prefix | |||
---|---|---|---|
app/ | componets/ | atoms/ | a- |
molecules/ | m- | ||
organismas/ | o- | ||
layouts/ | l- | ||
pages/ | p- |
比較例
FLOCSS
.c-list {
margin-top: 20px;
margin-left: 1.5em;
&__item:not(:first-child) {
margin-top: 10px;
}
&---disc {
list-style-type: disc;
}
&--decimal {
list-style-type: decimal;
}
&--lowerAlpha,
&--lowerRoman,
&--parentheses {
list-style-type: none;
counter-increment: cnt;
margin-left: 0;
padding-left: 1.5em;
text-indent: -1.5em;
&::before {
display: marker;
}
}
&--lowerAlpha {
> .c-list__item {
&::before {
content: '(' counter(cnt, lower-alpha) ') ';
}
}
}
&--lowerRoman {
> .c-list__item {
&::before {
content: '(' counter(cnt, lower-roman) ') ';
}
}
}
&--parentheses {
> .c-list__item {
&::before {
content: '(' counter(cnt) ') ';
}
}
}
}
<h1>list-style-type 切り替え</h1>
<ul class="c-list">
<li class="c-list__item">なし - reset css</li>
</ul>
<ol class="c-list">
<li class="c-list__item">なし - reset css</li>
</ol>
<ul class="c-list--disc">
<li class="c-list__item">・</li>
</ul>
<ol class="c-list--decimal">
<li class="c-list__item">1.</li>
</ol>
<ol class="c-list--lowerAlpha">
<li class="c-list__item">a.</li>
</ol>
<ol class="c-list--lowerRoman">
<li class="c-list__item">i.</li>
</ol>
<ol class="c-list--parentheses">
<li class="c-list__item">(1)</li>
</ol>
rscss2e
.c-list {
margin-top: 20px;
margin-left: 1.5em;
> .item:not(:first-child) {
margin-top: 10px;
}
&.-disc {
list-style-type: disc;
}
&.-decimal {
list-style-type: decimal;
}
&.-lowerAlpha,
&.-lowerRoman,
&.-parentheses {
list-style-type: none;
counter-increment: cnt;
margin-left: 0;
padding-left: 1.5em;
text-indent: -1.5em;
&::before {
display: marker;
}
}
&.-lowerAlpha {
> .item {
&::before {
content: '(' counter(cnt, lower-alpha) ') ';
}
}
}
&.-lowerRoman {
> .item {
&::before {
content: '(' counter(cnt, lower-roman) ') ';
}
}
}
&.-parentheses {
> .item {
&::before {
content: '(' counter(cnt) ') ';
}
}
}
}
<h1>list-style-type 切り替え</h1>
<ul class="c-list">
<li class="item">なし - reset css</li>
</ul>
<ol class="c-list">
<li class="item">なし - reset css</li>
</ol>
<ul class="c-list.-disc">
<li class="item">・</li>
</ul>
<ol class="c-list.-decimal">
<li class="item">1.</li>
</ol>
<ol class="c-list.-lowerAlpha">
<li class="item">a.</li>
</ol>
<ol class="c-list.-lowerRoman">
<li class="item">i.</li>
</ol>
<ol class="c-list.-parentheses">
<li class="item">(1)</li>
</ol>
テンプレート
https://github.com/echi2enya/rscss2e
こちらまだ README.md だけですがテンプレートみたいなものをコミット予定です
rscss2e とは
echizenya & egawa の二人の e で考えたので rscss2e と仮称しています