Ich versuche, die Gründe hinter CSS-Namenskonventionen wie BEM oder SUITCss zu verstehen und zu verstehen. Es fällt mir schwer, den Wert der Namen von Nachkommenklassen in Gegenwart von SCSS zu verstehen.Worauf kommt es bei der expliziten Benennung der Nachkommenklasse in Anwesenheit von SCSS an?
Zum Beispiel:
<ul class="menu">
<li class="menu__item"></li>
<li class="menu__item"></li>
<li class="menu__item">
<a href="#" class="menu__item_link">link</a>
</li>
</ul>
.menu {
.menu__item {
//styles
.menu__item__link { //styles }
}
//or alternatively this syntax..
&__item { //styles }
}
Mit der Fähigkeit zur Nest Regeln in SCSS, ich sehe die zwingenden Gründe nicht für mich, die Vorfahren Klassennamen in meinem Code enthält. Oben habe ich Stile definiert, die nur für ein "Element" innerhalb eines "Menüs" verwendet werden sollten, indem man Klassennamen von Nachkommen verwendet. Die verschachtelte Struktur teilt dies jedoch bereits mit! Die Regeln für menu__item würden ohnehin nur für ein Element in einem Menü gelten. Warum muss ich das also in den Klassennamen aufnehmen?
Warum nicht:
<ul class="menu">
<li class="item"></li>
</ul>
.menu {
.item {//styles}
}
Ich verstehe, dass der Nachkomme Namenskonvention deutlicher und vielleicht mehr Zukunft freundlich. Ich argumentiere jedoch, dass es im HTML nur expliziter ist. Wenn ich mich fragen wollte, wie man dieses "Menü" -Modul erstellt, könnte ich einfach das CSS konsultieren und sehe genauso klar, wie ein Menü Elemente darin verschachtelt hat.
Ich denke, ein möglicher Vorteil ist, dass ich meine CSS un-verschachtelt schreiben könnte, etwa so:
.menu { //styles }
.menu__item { //styles }
.menu__item__link { //styles }
und verwenden Sie dann ein „menu__item“ überall und es wäre immer noch in den Klassennamen, dass diese explizit war das Styling eines Gegenstandes unter einem Menü..aber warum definieren Sie es dann als Nachkomme eines Menüs? (Ein anderer Vorteil, nehme ich an, ist kürzere CSS-Bezeichner-Zeichenfolgen, wenn Dinge nicht verschachtelt sind)
Es scheint mir, dass, wenn ein Klassenname als ein Nachfolger unter einem anderen verwendet werden soll, dies in SCSS erreicht und präsentiert diese Logik klar. Warum sollte diese BEM-Syntax dann notwendig sein?
Ich möchte jemanden hören, der die Argumentation dieser Art von Konvention erklärt. Ich möchte mich an so genannte Best Practices halten, aber es ist schwer für mich, dies blind zu tun, ohne eine Konvention zu verstehen.
Die Namenskonvention keinen Einfluss auf die Leistung, wenn ich die Nachkommen außerhalb seiner Vorfahren, wie in meinem letzten Beispiel definieren. Ich denke, ich verstehe das Argument, dass etwas wie BEM es erlaubt, "auf den ersten Blick zu sehen, was eine Klasse macht/ihren Kontext". Ich denke, mein Argument ist, dass das SCSS bei der Verschachtelung in SCSS genauso klar und deutlich ist. – Jeloi
Wie ich sagte, folgende Benennungskonvention wird dazu beitragen, Nachkommen zu verringern, yep, wie in Ihrem letzten Beispiel über Verschachtelung mit SCSS, nicht sicher Syntax wird gleich sein, aber in Sass können Sie & für den Aufbau von BEM oder SMACSS wie Selektoren - http verwenden : //stackoverflow.com/questions/24383308/sass-change-nested-elements-class-naming-style – Evgeniy
Ich mag diese Antwort von Evgeniy. Ich würde nur hinzufügen, dass die BEM-Benennungskonvention Namenskollisionen verhindert, wo zum Beispiel zwei Blöcke das Element '.item' haben. Sicher, Sie können direkte Nachkommenselektoren verwenden, um dies zu verhindern, aber dann ist es schwieriger, Ihr Markup zu refaktorieren, da jede kleine Änderung CSS-Änderungen erfordern wird. –