CSS設計ネーミング仕様BEM
3105 ワード
1.グローバルネーミングスペース
設計システムに関連するすべてのclassesは、一般的に会社名(company name)であるグローバルネーミングスペースを追加します.
2.class接頭辞
グローバルネーミングスペースを追加する以外に、クラスに接頭辞を追加して、このクラスの主な職責が何であるかを示すために使用します.次の一般的な接頭辞があります. を表す. を表す. を表す. . のみを担当する.
3.BEM構文
BEMはBlock-Emement-MOdifierを表します. Block: のような基本的なコンポーネントブロックである. Element: のような基本ブロックの下のサブエレメントである. Modifier:コンポーネントスタイルの変種、例えば である.
この比喩方式は流行しており、ネーミング空間、クラス接頭辞を組み合わせて、より表示され、パッケージ性の良いclass namesを作成することができる.
4.すべてを結合する:classの解剖
グローバルネーミングスペース、クラス接頭辞、BEM構文を組み合わせると、明示的な(間違いなく、冗長な)クラス文字列が生成され、UIの役割が何であるかを推定できます.
次の例1を参照してください.
例2:
例3:
5.その他のテクニック
1.SASS親セレクタ
指定したCSSルールをどこに配置するかが問題です.primary navigationコンポーネントに位置合わせを調整したい場合は、sass親セレクタを使用します.
これは、primary navigationのスタイルがprimary navigation Sass partialに配置されることを意味し、各ファイルに分割するのではなく、primary navigation Sass partialに配置されることを意味します.
2.SASSネスト明示規則
SASSのネストは非常に便利ですが、特に長いセレクタを招く可能性があります.ネストは3層を超えないで、CSSの設計を平らに保つという原則があります.私たちは次の4つの方法でネストを減らすことができます. blockにModifiers(Modifiers of a style block) を追加メディアクエリ 親セレクタ 状態(states) コンポーネントブロック修飾子
修飾子の場合、ルールが数行しかない場合、修飾子は子要素にネストできます.
メディアクエリ
コンポーネント固有のメディアクエリは、コンポーネントブロックにネストできます.
≪ステータス|Status|emdw≫
ステータスにはhover,focus,active,ツールクラスis-,has-が含まれます.
まとめ原文リンクCSS設計アーキテクチャ SASSネスト選択のルール 詳しい指導:CSSガイドBEM CSSアーキテクチャ検討及びBEM CSS軽設計指導(書) BEM命名規範検討 メンテナンス設計システム
設計システムに関連するすべてのclassesは、一般的に会社名(company name)であるグローバルネーミングスペースを追加します.
.cn-
2.class接頭辞
グローバルネーミングスペースを追加する以外に、クラスに接頭辞を追加して、このクラスの主な職責が何であるかを示すために使用します.次の一般的な接頭辞があります.
c
:UI components、例えば.cn-c-card
または.cn-c-header
l
:layout関連の様式、例えばcn-l-grid__item
or cn-l--two-column
u
:utilities、ツール、例えば.cn-u-margin-bottom-double
or .cn-u-padding-right
is- , has-
:特定の状態を表す、例えば.cn-is-active
or .cn-is-disabled
js-
:js固有の機能、例えば.js-modal-trigger
を表す.このクラスはスタイルをバインドすることができず、動作面3.BEM構文
BEMはBlock-Emement-MOdifierを表します.
.cn-c-card
or .cn-c-btn
.cn-c-card__title
.cn-c-alert--error
この比喩方式は流行しており、ネーミング空間、クラス接頭辞を組み合わせて、より表示され、パッケージ性の良いclass namesを作成することができる.
4.すべてを結合する:classの解剖
グローバルネーミングスペース、クラス接頭辞、BEM構文を組み合わせると、明示的な(間違いなく、冗長な)クラス文字列が生成され、UIの役割が何であるかを推定できます.
次の例1を参照してください.
.cn-c-btn--secondary
//
cn-:
c-: class , 'c-'
btn: block name(Block)
--secondary: , (Modifier)
例2:
.cn-l-grid__item
//
cn-:
l-: class , 'l-'
grid: block name(Block)
__item: (Element)
例3:
.cn-c-primary-nav__submenu
//
cn-:
c-: class ,
primary-nav: block name
__submenu:
5.その他のテクニック
1.SASS親セレクタ
指定したCSSルールをどこに配置するかが問題です.primary navigationコンポーネントに位置合わせを調整したい場合は、sass親セレクタを使用します.
.cn-c-primary-nav {
/*
* Nav Header,
*/
.cn-c-header & {
margin-left: auto
}
}
これは、primary navigationのスタイルがprimary navigation Sass partialに配置されることを意味し、各ファイルに分割するのではなく、primary navigation Sass partialに配置されることを意味します.
2.SASSネスト明示規則
SASSのネストは非常に便利ですが、特に長いセレクタを招く可能性があります.ネストは3層を超えないで、CSSの設計を平らに保つという原則があります.私たちは次の4つの方法でネストを減らすことができます.
修飾子の場合、ルールが数行しかない場合、修飾子は子要素にネストできます.
.cn-c-alert {
border: 1px solid #ccc;
color: gray;
//
&--error {
border-color: red;
color: red
}
}
メディアクエリ
コンポーネント固有のメディアクエリは、コンポーネントブロックにネストできます.
.cn-c-primary-nav {
//
@meida all and (min-width: 40em) {
display: flex;
}
}
≪ステータス|Status|emdw≫
ステータスにはhover,focus,active,ツールクラスis-,has-が含まれます.
.cn-c-accordion__panel {
overflow: hidden;
max-height: 0;
&.cn-is-active {
max-height: 40em;
}
}
まとめ