Auf Smashing behandelt Adebiyi Adedotun Lukman all diese Styling-Methoden. Es ist im Kontext von Next.js, was durchaus wichtig ist, da Next.js einige spezifische Arbeitsweisen mit diesen Werkzeugen bietet, React ist und somit eine komponentenbasierten Architektur hat. Aber die besprochenen Styling-Methoden gehen über Next.js hinaus und können breit auf viele Websites angewendet werden.
Hier sind meine heißen Meinungen zur gesamten Inhaltsübersicht der Styling-Möglichkeiten heutzutage.
- Reguläres CSS. Wenn du kannst, tu es. Keine Build-Tooling ist erfrischend. Es wird gut altern. Das Einzige, was ich *wirklich* vermisse, ohne weitere Tools, ist das Verschachteln von Media Queries innerhalb von Selektorblöcken.
- Sass. Sass ist schon lange dabei und immer noch ein äußerst beliebter CSS-Präprozessor. Sass ist in viele andere Tools integriert, daher bedeutet die Wahl von Sass nicht immer dasselbe. Eine einfache Sass-Integration kann so einfach sein wie ein
sass --watch src/style.scss dist/style.cssnpm-Skript. Sobald du dich mit der Tatsache abgefunden hast, dass du einen Build-Prozess hast, kannst du beginnen, Dateien zu verketten, zu minifizieren, Caches zu brechen und all diese Dinge zu tun, die du wahrscheinlich sowieso irgendwie tun wirst. - Less & Stylus. Ich bin überrascht, dass sie nicht populärer sind, da sie schon immer Node-basiert waren und gut mit der Verbreitung von Node-gestützten Build-Prozessen zusammenarbeiten. Ganz zu schweigen davon, dass sie schöne, funktionsreiche Präprozessoren sind. Ich habe nichts gegen beide, aber Sass ist allgegenwärtiger, wird aktiver entwickelt und kanonisches Sass funktioniert jetzt gut in Node.
- PostCSS. Ich bin nicht von PostCSS überzeugt, weil ich es nicht liebe, die gewünschten Verarbeitungsfunktionen mühsam zusammenzusuchen. Das hat auch den negativen Nebeneffekt, dass sich der Prozess des Schreibens von CSS von Projekt zu Projekt unterscheidet. Außerdem mag ich die Idee nicht, moderne Funktionen "weg zu präprozessieren", von denen einige wirklich nicht präprozessiert werden können (z. B. benutzerdefinierte Eigenschaften können nicht präprozessiert werden). Aber ich liebte Autoprefixer, als wir das wirklich brauchten, das auf PostCSS basiert.
- CSS Modules. (Basiert auf PostCSS). Wenn du mit Komponenten in jeder Technologie arbeitest, geben dir CSS-Module die Möglichkeit, CSS auf diese Komponente zu beschränken, was eine unglaublich großartige Idee ist. Ich mag diesen Ansatz, wo immer ich ihn bekommen kann. Dein Modul-CSS kann auch Sass sein, sodass wir dort das Beste aus beiden Welten haben.
- CSS-in-JS. Seien wir ehrlich, das bedeutet "CSS-in-React". Wenn du Vue schreibst, schreibst du Stile so, wie Vue dir hilft. Dasselbe mit Svelte. Dasselbe mit Angular. React ist das unvoreingenommene, das dir die Wahl zwischen Dingen wie styled-components, styled-jsx, Emotion lässt... es gibt *viele* davon. Ich habe Projekte in React und benutze einfach Sass+CSS Modules und finde das gut, aber viele Leute mögen auch CSS-in-JS-Ansätze. Ich verstehe es. Du bekommst die Beschränkung automatisch und kannst coole Dinge tun, wie Props in Styling-Entscheidungen einzubeziehen. Könnte großartig für ein Designsystem sein.
- Alles auf Utility-Styles setzen: Große Vorteile: kleine CSS-Dateien, konsistente, aber flexible Stile. Großer Nachteil: Du hast eine Milliarde Klassen, die alle in deinem Markup vermischt sind, was es umständlich macht, sie zu lesen und zu refaktorieren. Ich bin nicht überzeugt, aber ich verstehe es, diese Vorteile treffen für einige Leute wirklich.
Wenn du einige andere heiße Meinungen zu diesem Spektrum hören möchtest, haben die Syntax FM-Jungs kürzlich dazu geäußert.
CSS Modules ist ein PostCSS-Tool. Es sollte im PostCSS-Abschnitt erwähnt werden.
Oh, das wusste ich nicht! Ich werde das klarer machen.
Ich verstehe nicht, warum CSS-in-JS nicht als Rückschritt angesehen wird. Es hat sich immer so angefühlt, als würde man
<style>-Tags in sein HTML einfügen, aber vielleicht verpasse ich einen wichtigen Vorteil, den man nicht hat, wenn man Component.scss in einem Ordner neben Component.js hat.Ich hatte das Glück, die gesamte Frontend-Oberfläche einer Suite von .NET MVC-Websites neu zu gestalten / neu zu erstellen... von Grund auf.
HTML. CSS. JS. Tooling. Alles.
Da ich der einzige dedizierte Frontend-Entwickler im Team bin, aber mit einem Team von .NET C#-Entwicklern zusammenarbeite, die sich im Frontend-Bereich nicht so wohlfühlen, halte ich die Dinge einfach, um die Entwicklererfahrung zu verbessern.
Für das Styling...
– Umsichtiger Einsatz von globalen Stilen. Damit wir den Kaskadeneffekt nutzen können! ;)
– CSS-Variablen für wichtige Design-Tokens (Farben, Schriftarten, Größen). Möglichkeit, diese Werte über CMS usw. zu überschreiben. Abgebildet auf Sass-Variablen.
– Sass. Minimale Nutzung von Mixins und Design-Token-Variablen (wichtige sind auf CSS-Variablen abgebildet).
– PostCSS. Hauptsächlich zur Handhabung von RTL-Sprachen und zur Unterstützung der IE11 CSS Grid-Syntax.
Alles gebündelt mit Parcel. Null Konfiguration.
Und der Vollständigkeit halber... BEM für HTML-Markup und Stylelint zur Durchsetzung einiger Formatierungsregeln.
Macht das nicht einen perfekten Anwendungsfall für PostCSS aus? Vanilla CSS schreiben und Verschachtelung (Media Queries) hinzufügen, indem man eine winzige
postcss.config.js-Datei hinzufügt.Ich würde niemanden dafür verurteilen, es so zu tun, ich spreche für mich selbst. Aber ich denke, sobald ich einen Build-Prozess habe (weil ich dieses Feature will), würde ich dann Sass wählen, damit es mit dem Rest meiner Projekte konsistent ist und mir nicht nur dieses gewünschte Feature, sondern viele andere zum gleichen Kostenpunkt des Einstiegs bietet.
Tolle Artikel. Obwohl ich Ihrer Meinung bezüglich Post CSS und der Bevorzugung von SASS etwas widerspreche. Ich habe SASS jahrelang bevorzugt und verwendet, gerade aus diesem Grund, bin dann aber aus mehreren Gründen auf Post CSS umgestiegen und nie zurückgeschaut. Das Hauptproblem von SASS ist ähnlich wie bei jQuery, dass es viel zu viele Features gibt, von denen einige schlechten CSS-Code fördern, wenn der Entwickler Anfänger ist und nicht genau weiß, was er tut. Mixins, Expand und die schlimmste String-Interpolation, @-root sowie zu einfache Verschachtelungsregeln verleiten viele unerfahrene und faule Entwickler, insbesondere die, die hauptsächlich JS-Entwickler sind und Imperativ lieben, zu den verrücktesten, leistungsschwächsten und spezifischsten Spaghetti-CSS-Codes, die man sich vorstellen kann. Versuchen Sie, ein solches Chaos Jahre später zu refaktorieren, und Sie werden meinen Punkt verstehen. Solange ich es selbst sorgfältig verwendet habe, bin ich nie in diese Fallen getappt.
Wie Sie sagen: "Sobald du dich mit der Tatsache abgefunden hast, dass du einen Build-Prozess hast, kannst du anfangen..." all die Dinge zu tun, die du niemals tun solltest, nur weil du kannst.
Zugegebenermaßen kannst du mit reinem CSS oder Post CSS auch ein Chaos schreiben, aber es ist viel schwieriger. Genau weil das Hinzufügen jeder verrückten Funktion einen Preis hat.
Mit Post CSS geschriebener Code ist sauberer.
Es zwingt einen auch, Konzepte und Werkzeuge zu lernen, die niemals in Standard-CSS Einzug halten werden und einfach später nicht nützlich sind. Zumindest lernt man mit Post CSS Fähigkeiten, die man in ein paar Monaten/Jahren nutzen kann.
Und die Verwendung von Post CSS mit etwas wie postcss-preset-env bringt Ihnen alle Funktionen, die Sie von SASS wünschen, ohne viel mehr Kosten als die Verwendung von SASS.
Ich lese diesen Kommentar, nachdem ich Rich Harris und Evan You sagen gehört habe, so ziemlich dasselbe. Zeit, Post-CSS zu lernen. Ich würde gerne eine Antwort von Chris zu Ihren Gedanken dazu sehen.
Ich arbeite an einem React-Projekt, bei dem ich mir nicht sicher bin, ob ich SCSS oder Styled Components verwenden soll. Welches bevorzugen Sie persönlich? Eine weitere Frage: Gibt es eine Möglichkeit, dass React die Unterstützung für Styled Components zurückzieht, so wie useStyles in React 18 nicht mehr unterstützt wird?