私はしばらくの間、私のプロジェクトで "BEMのような"構文を使用してきました。私はこれを見たときに最近、私はいくつかのCSSの記事を再読み込みしたhttps://en.bem.info/methodology/css/#single-responsibility-principle隔離されたコンポーネントを作成するときに複数のcssクラスを組み合わせることをお勧めしますか?
を基本的には、代わりにそのクラス内header__button
のすべてのスタイルを置くこと、それはまた、button
クラスのスタイルに中継します。この場合、要素のヘッダーとbutton
クラスを結合していませんか?つまり、将来的にbutton
クラスを変更する場合は、このクラスを使用する場所を正確に覚えておく必要があります。
この例では、同じスタイルを使用しようとしているためだと思いますが、レイアウトコンポーネントはどうですか?たとえば、子どもを垂直に配置するMenu
クラスがあるとします。子クラスにも同様のスタイルを適用するSidebar
クラスがあります。そして、私たちは、このようにそれらを使用します。
menu.css
Menu {
}
Menu__item {
}
sidebar.css
Sidebar {
}
Sidebar__item {
}
index.htmlを
<div class="Menu Sidebar">
<div class="Menu__item Sidebar__item">
</div>
<div class="Menu__item Sidebar__item">
</div>
</div>
Sidebar
クラスの項目をどのように配置するかに関するコードをすべて入れていない場合、このコードの一部をMenu
から変更すると、Sidebar
クラスが壊れている可能性があります。他のケースでは、両方のクラスでコードMenu
とSidebar
を繰り返すと、質問の募集で議論されたSRP(単一責任の原則)に違反しています。最近私のプロジェクトではコードの重複を優先していたので、Sidebar
に必要なコードをすべてSidebar
クラスに書きます。
ここでは、ベストプラクティスは何ですか?
あなたはSidebar'は 'Menu'の位置決めのための責任を負わなければならないが、それはMenu__items''については何も知らないはず '」と言う修飾子を使用して
"しかし、あなたのコードは' .Sidebar .Menu__item {} 'と反対になります。 'サイドバー'は 'Menu'ブロックの中で何も変更すべきではないと思います。 'Menu'だけがその構造を知っています。 – 3rdthemagical
それは本当です。まず、私はそれがすべきだと言った。最後の段落は、「本当に必要な場合は...」から始まります。別の選択肢がなければ、そのような状況を処理する方法です。それでもほとんどの場合、もちろん相互依存関係を避ける方がよいでしょう。 – tadatuta