testimonial
と同様にネーミングを削除することを検討する必要がありfooter
ます。
次の例を検討してください。
.primary-box { }
.primary-box--reduced { }
.primary-box--standout { }
この例では、クラスはページ コンテキストから完全に独立しています。その結果、クラスは完全に再利用可能になります。ページ上の任意のボックスは、上記のクラスを取得でき、定義どおりにスタイルが設定されることが期待されます。
たとえば、次のようにすることができます。
<header>
<div class='primary-box primary-box--reduced'></div>
</header>
<div class='content-box'>
<p class='primary-box primary-box--standout'></p>
</div>
<footer>
<div class='primary-box primary-box--reduced'></div>
</footer>
デザイナーが戻ってきて目立つボックスのパディングを微調整すると、それらのスタイルに直接移動して微調整できます。影響を受けるのは、HTML 内のこれらのクラスを持つ領域だけであると確信できます。
また、.primary-box--reduced
からその<header>
上にあるメニュー バーまたはフッターに移動する場合、スタイルが完全に適用されると確信できます。
どこかに別の要素が必要な場合、おそらく、またはヘッダーprimary-box--standout
のデフォルトだけが必要な場合は、それを作成してクラスを追加するだけで、スタイルは完全に従います。primary-box
予期しないスタイルを継承することもありません。
これは非常に現実的な例です。私が最近構築したサイトはほとんどすべてこのように構築されていました。ほとんどすべてと言うのは、まだ学習中だからですが、動きの速いプロジェクトで最も問題が少なかったビットを保証できます。非常に流動的なデザインを持つものは、非特定のコンテキストを持つものでした.
重要なのは文脈の欠如です。最初の例で.testimonial--footer
は、非常にコンテキストに依存しているため、実際にはフッターのみの証言に使用する必要があります.
そしてまるで魔法のようにCSS Wizardry がまさにこのトピックをカバーしているかのように
編集:この例を追加して、回答に対するコメントを支援しました。これは BEM や OOCSS ではありませんが、SMACSS アプローチに少し近いものです。これは私が css で問題に取り組む方法であり、ハイブリッド BEM / SMACSS アプローチです。
順番にロード:
- などのモジュールファイル
.primary-box
.header
またはなどのページ セクション ファイル.call-to-action
.about-us
またはなどのページファイル.contact
各ファイルはより具体的になり、同時により複雑なモジュールを構築します。上記の例に基づいて構築し、うまくいけば OP を支援すると、次のようなスタイルが表示されます。
.header {
.primary-box {
color: #000;
}
}
これは、より具体的なネストされたクラス表記を使用してモジュール スタイルをオーバーライドします。私はまだ次のようなクラス名を使用しないことに注意してください.header
-.banner-standout
混乱することなくどこでも再利用できるため、より良いでしょう
次に、次のことも確認できます。
.about-us {
.header {
.primary-box {
color: #f00;
}
}
}
これは、BEM のコンテキストフリーの力を維持しながら、実際のプロジェクトでコンテキストに対して非常にうまく機能することがわかりましたが、このチェーンをモジュールにプッシュすることもできる限り強くお勧めします。新しい一般的なページ セクションまたはモジュールを認識し、名前とファイルを適切に再編成すると、作業が楽になります。コードが慎重にリファクタリングされたプロジェクトでは、ページ ファイルに何もありません。