Styled JSX ist eine CSS-in-JS-Bibliothek, die es ermöglicht, gekapselte und begrenzte CSS-Stile für Komponenten zu schreiben. Die Stile, die für eine Komponente definiert werden, beeinflussen andere Komponenten nicht, sodass Stile ohne unerwünschte Nebeneffekte hinzugefügt, geändert oder gelöscht werden können.
Erste Schritte
Next.js beinhaltet Styled JSX standardmäßig, daher ist der Einstieg so einfach wie das Hinzufügen eines <style jsx>
-Tags in ein bestehendes React-Element und das Schreiben von CSS darin:
In diesem Beispiel fügen wir Stile für das Container-Element der Komponente und einen Absatz hinzu. Obwohl wir generische Selektoren verwenden, beeinflussen die Stile keine Elemente mit dem Klassennamen container
oder <p>
-Tags in anderen Komponenten. Dies liegt daran, dass Styled JSX sicherstellt, dass die Stile nur auf diese Komponente beschränkt sind (durch das Hinzufügen zusätzlicher eindeutiger Klassennamen zu gestylten Elementen).
Durch das Hinzufügen eines einzigen jsx
-Attributs zu einem <style>
-Element können Sie standardmäßiges CSS schreiben, das automatisch geprefixt und auf die Komponente beschränkt wird. <style jsx>
-Elemente sollten innerhalb des Wurzelelements der Komponente platziert werden.
Globale Stile hinzufügen
Die meisten Projekte benötigen einige globale Stile, um das Body-Element zu gestalten oder CSS-Resets bereitzustellen. Styled JSX ermöglicht das Hinzufügen globaler Stile mit <style jsx global>
. Zum Beispiel:
Dies wendet eine Schriftgröße von 20px auf alle <p>
-Tags in dieser spezifischen Seite an.
Um globale Stile auf alle Seiten unserer Anwendung anzuwenden, ist es ratsam, zunächst eine Layout-Komponente mit den globalen Stilen zu erstellen und dann alle Seiten damit zu umschließen.
Die Verwendung einer Layout-Komponente bietet die Flexibilität, bestimmte Stile auf einige Seiten anzuwenden, während andere Seiten einen anderen Stil haben können:
In Next.js können wir das Layout einmal für alle Seiten laden, indem wir eine benutzerdefinierte App
-Komponente in pages/_app.js
erstellen, die Layout
-Komponente importieren und sie wie folgt zur Render-Methode hinzufügen:
Stile in externen Dateien schreiben
Wir können Stile auch in externen Dateien außerhalb der Komponente schreiben.
Zum Beispiel können wir unsere globalen Stile aus der Layout
-Komponente in eine separate Datei verschieben:
Wir können dann die Stile wieder in die Layout
-Komponente importieren:
Einmalige globale Selektoren
Die Stile, die wir mit <style jsx>
zu einer Komponente hinzufügen, betreffen nur die Elemente innerhalb dieser Komponente, nicht jedoch Kindkomponenten.
Manchmal müssen wir einen bestimmten Stil einer Kindkomponente überschreiben. Dafür bietet Styled JSX :global()
, was den Zugriff auf einmalige globale Selektoren ermöglicht.
Angenommen, wir haben eine <Widget>
-Komponente, die einen Button mit dem Klassennamen btn
enthält. Wenn wir die Farben dieses Buttons nur ändern möchten, wenn das Widget auf der Startseite importiert wird, können wir dies wie folgt tun:
Dynamische Stile
Im Vergleich zu anderen Lösungen ist die Möglichkeit, das Styling einer Komponente basierend auf ihren Props anzupassen, ein großer Vorteil von CSS-in-JS
-Bibliotheken.
Mit Styled JSX können wir dies wie folgt tun:
Wenn der Alert
-Komponente ein type
-Prop mit dem Wert warning
übergeben wird wie:
wird die Komponente einen orangefarbenen Hintergrund haben. Ohne Angabe des type-Props fällt der Hintergrund auf die standardmäßige graue Farbe zurück.
Beachten Sie, dass wir den dynamischen Stil in ein separates <style jsx>
-Tag platziert haben. Dies ist nicht erforderlich, wird jedoch empfohlen, um statische und dynamische Stile zu trennen, sodass nur die dynamischen Teile neu berechnet werden, wenn sich die Props ändern.
Ein alternativer Ansatz, um Stile basierend auf Props anzupassen, ist das Anwenden verschiedener Klassennamen basierend auf dem Prop-Wert, wie unten gezeigt:
Ein Site-Theme erstellen
Ein Theme kann ein einfaches Objekt sein, in dem wir die häufigsten Variablen, die wir in unserer App benötigen, enthalten:
Wir importieren dann diese Theme-Datei in unseren Komponenten und ersetzen hartkodierte Werte durch Variablen:
In diesem Blogpost haben wir behandelt, wie Sie mit Styled JSX beginnen können. Um mehr über zusätzliche Funktionen zu erfahren, sollten Sie es auf GitHub auschecken.