Im JS Party Podcast
[Kend C. Dodds]: […] Fragen Sie jeden, der regelmäßig mit altem CSS gearbeitet hat, und er wird Ihnen sagen: „Ich weiß nicht, ob es in Ordnung ist, das zu ändern, also dupliziere ich es.“ Und jetzt hatten wir – bei PayPal (das ist keine Erfindung) hatten wir 90 % ungenutztes CSS bei dem Projekt, an dem ich arbeitete, weil jeder Angst hatte, die alten Sachen anzufassen. Also haben wir einfach etwas Neues dupliziert und es anders genannt. Und man könnte sagen, wir sind schlecht in CSS, aber vielleicht war CSS schlecht zu uns, ich weiß es nicht… [Gelächter]
[Emma Bostain]: Nun, deshalb waren styled-components und CSS-in-JS so wegweisend; es war wie: „Oh, hey, wir können all diese Logik tatsächlich in die Komponente einkapseln, die sie berührt, und müssen uns keine Sorgen mehr um überlaufenden Code machen.“ Es ist viel einfacher, Dinge zu löschen, hinzuzufügen und all diese Dinge.
[Kend C. Dodds]: Ja, Sie haben absolut Recht. Das war das Problem, das diese Dinge lösen sollten.
Audio-Clip
Ich habe diese genaue Geschichte schon mehrmals gehört, meist von großen Unternehmen. Viele Entwickler, typische Entwicklerfluktuation… niemand weiß, was CSS tatsächlich verwendet wird und was nicht, weil das ein sehr schwieriges Problem ist.
Das ist einer der Gründe, warum ich Komponenten-basierte Styling-Lösungen (CSS-in-JS, wenn Sie wagemutig sind) manchmal mag. Nicht, weil ich komplexes Tooling liebe. Nicht, weil ich JavaScript-Syntax besser finde als CSS. Wegen der Co-Location von Stilen und Komponenten. Weil niemand Angst vor den Stilen hat – sie sind eng mit dem verknüpft, was sie stylen. Es ist nicht bei jedem Projekt notwendig, aber wenn Sie ohnehin mit Komponenten bauen (eine ziemlich nette Art, Front-Ends zu architekturieren, die kein JavaScript benötigt), können Sie genauso gut auf diese Weise stylen.
Aus diesem Grund freue ich mich, dass „scoped styles“ in Standarddiskussionen ein kleines Comeback feiern.
Ich erinnere mich an eine alte Idee (die vielleicht sogar kurzzeitig in Browsern ausgeliefert wurde?), bei der man einfach einen <style scoped> Block direkt in den HTML-Code warf und die Stile auf den übergeordneten Teil beschränkt waren, was auch immer der übergeordnete Teil war. Das war so cool, ich wünschte, wir könnten das wieder haben.
Aber es scheint, dass die neueren Dinge (hier ist Miriam's ursprünglicher Vorschlag) einige clevere Sachen haben, die dieses grundlegende Konzept nicht abdeckt – wie die Möglichkeit, eine untere Grenze zusätzlich zu einer oberen Grenze festzulegen, wodurch es möglich wird, „donutförmige“ Stile im DOM zu beschränken (ein Begriff von Nicole Sullivan). Was auch immer passiert, schatten-DOM-freie, eingeschränkte Stile mit Null-Tooling sind riesig.
Hä? Habe ich etwas verpasst? Ich dachte, der einzige Weg, HTML-Komponenten zu realisieren, sei die Verwendung von JS, um sie zu definieren…?
Ich meine, man kann Komponenten in JavaScript erstellen und statische HTML-Ausgabe liefern (wie Astro).
Man kann einfache HTML-Komponenten mit Vorlagensprachen erstellen. Wie Twig oder Handlebars
Beim Lesen des Artikels habe ich mich gefragt, warum es nicht ausreichen würde, Komponenten-Dateien im selben Verzeichnis zu behalten, benannt nach der Komponente. Durch die Verwendung einer Klasse binden und beschränken wir unsere Stile/Skripte effektiv an unsere Komponente, richtig?
Ich weiß, es ist nicht so narrensicher wie ein vollwertiges JS-Komponenten-System, aber wollen wir in unserem Team Entwickler haben, die solche einfachen Verfahren nicht befolgen können?
Ich meine, übersehe ich hier etwas? Könnten wir nicht effektiv unsere Ressourcen wie oben erwähnt „einschränken“, ohne jegliches Tooling?
Das nehme ich an. Aber null Durchsetzung bedeutet… null Durchsetzung. Ich glaube nicht, dass Teams ohne Tooling (oder native Unterstützung) für echte Beschränkungen den Nutzen annähernd sehen werden.
Das ist genau das, was wir tun. Ein Ordner für jede Komponente mit ihrer Vorlage, CSS-Datei und ihrem Controller / Backend-Code. Die Vorlage ist immer in ein einzelnes Element mit einem Klassennamen, der dem Ordnernamen entspricht, eingeschlossen. Da keine zwei Ordner den gleichen Namen haben können, sind die Stile auf diese Weise beschränkt.
Das klingt nach einem sehr häufigen Problem, das mit der weit verbreiteten Einführung von Web Component-Frameworks gelöst werden könnte.
Hoffen wir, dass es dahin geht
Unsere Produktions-React-Anwendung „scopet“ CSS auf eine bestimmte Seite, indem die gesamte Seite mit einem Div mit der ID = pageName umschlossen wird. Dann sind unsere SCSS-Dateien nach der Seite benannt, die sie stylen, und alles ist in einem riesigen #pageName { Block } enthalten. Alle seitenbezogenen Komponenten werden dort gestylt, und alle gemeinsam genutzten Komponenten werden in einer globalen components.scss gestylt.
Vue-Entwickler
¯_(ツ)_¯
Das klingt nach einer guten Aufgabe für einen Praktikanten/Studenten, CSS-Stile zu entfernen und zu sehen, wie sich das auf die Projekte auswirkt, zu versuchen zu sehen, wie es funktioniert, und uns mitzuteilen, welche Teile Ihrer Meinung nach nichts tun.
modulares CSS? Warum sollte ich Zeit mit der Benennung von Dingen wie: main-section, details, etc. verschwenden, wenn ich modulare Klassen verwenden kann, die sie beschreiben?