Ich habe diesen Artikel durchgearbeitet , um meinen Front-End-Code zu organisieren. Es verweist auf Artikel zu BEM / SMACSS, die wiederum auf andere Artikel verweisen.
Ich versuche wirklich zu verstehen, was die besten Praktiken sind ... Ich habe ein paar Tage Zeit, um diesen "Standard" festzulegen, und muss dann ein Projekt mit hoher Priorität / hoher Sichtbarkeit / begrenzter Zeitachse durchbrennen. Daher möchte ich sicherstellen, dass ich mit einer Grundlage beginne, die sich wie meine App skalieren lässt.
Bei einer Komponente mit dem Namen segment
... erstelle ich Seiten mit ~ 10 segments
pro Seite. Jeder segment
teilt die gleiche Basisklasse. Bestimmte segments
haben jedoch Modifikatoren (verschiedene Hintergrundfarben). Ferner haben Elemente in jedem Block (im BEM-Ansatz) auch Modifikatoren. Um dies zu demonstrieren, ist hier eine einfache Implementierung (mit nur einem einzigen Element arrow
, während meine vollständige Site jeweils 4-5 Elemente enthält segment
):
.segment__arrow {
position: absolute;
bottom: -24px;
left: 50%;
margin-left: -11px;
background-position: center no-repeat;
height: 21px;
width: 21px;
z-index: 2;
}
.segment__arrow--orange {
@extend .segment__arrow;
background-image: url('/images/arrow_orange.png');
}
.segment__arrow--white {
@extend .segment__arrow;
background-image: url('/images/arrow_white.png');
}
Das ist also der Einzelklassenansatz:
<div class="segment__arrow--white"> ... </div>
Alternativ könnte ich mich für den Mehrklassenansatz entscheiden:
.segment__arrow {
position: absolute;
bottom: -24px;
left: 50%;
margin-left: -11px;
background-position: center no-repeat;
height: 21px;
width: 21px;
z-index: 2;
}
.segment__arrow--orange {
background-image: url('/images/arrow_orange.png');
}
.segment__arrow--white {
background-image: url('/images/arrow_white.png');
}
Wo mein Markup wäre:
<div class="segment__arrow segment__arrow--white"> ... </div>
Drittens könnte ich tun:
.segment__arrow {
position: absolute;
bottom: -24px;
left: 50%;
margin-left: -11px;
background-position: center no-repeat;
height: 21px;
width: 21px;
z-index: 2;
}
.segment__arrow.orange {
background-image: url('/images/arrow_orange.png');
}
.segment__arrow.white {
background-image: url('/images/arrow_white.png');
}
Und dann wäre meine Klasse def
<div class="segment__arrow orange"> ... </div>
Vielleicht sogar orangefarbener Namespace mit so etwas wie sa_orange
losen Selektoren.
Das Endergebnis, das ich suche, ist weniger Code / einfacher zu warten (was wahrscheinlich den Einzelklassenansatz (Option 1) ausschließt, wie in diesem großartigen Artikel über skalierbare Architektur beschrieben. Der Mehrklassenansatz (Option 2) führt zu viel Ausführlichkeit (besonders in meinem HTML), ist aber extrem explizit. Der dritte Ansatz verwendet einen Mehrklassenansatz, verwendet jedoch keine Modifikatoren mit Namespace (wie .segment__arrow), ist also etwas weniger ausführlich (aber auch weniger explizit und höher) Kollisionsgefahr).
Hat jemand mit realer Erfahrung mit diesem Zeug Feedback darüber, wie man das am besten angeht?
.orange
hat allein als Modifikator keine Bedeutung. Ich sehe kein großes Problem darin,.segment__arrow--orange
zusammen mit Ihrem Multiklassen-Ansatz zu verwenden. Natürlich kann Ihr HTML-Code in größeren Projekten etwas außer Kontrolle geraten (viele Klassen).