CSS
Next.js unterstützt mehrere Methoden zur CSS-Handhabung, einschließlich:
CSS-Module
Next.js bietet integrierte Unterstützung für CSS-Module mit der Dateiendung .module.css
.
CSS-Module begrenzen CSS lokal, indem automatisch eindeutige Klassennamen erstellt werden. Dies ermöglicht die Verwendung desselben Klassennamens in verschiedenen Dateien ohne Namenskollisionen. Dieses Verhalten macht CSS-Module zur idealen Methode für komponentenbezogene CSS-Stile.
Beispiel
CSS-Module können in jede Datei innerhalb des app
-Verzeichnisses importiert werden:
CSS-Module sind nur für Dateien mit den Erweiterungen .module.css
und .module.sass
aktiviert.
In der Produktionsversion werden alle CSS-Modul-Dateien automatisch in mehrere minifizierte und Code-gesplittete .css
-Dateien zusammengeführt. Diese .css
-Dateien repräsentieren Hot-Execution-Pfade in Ihrer Anwendung und gewährleisten, dass nur die minimal erforderliche CSS-Menge für das Rendering der Anwendung geladen wird.
Globale Stile
Globale Stile können in jedes Layout, jede Seite oder Komponente innerhalb des app
-Verzeichnisses importiert werden.
Hinweis:
- Dies unterscheidet sich vom
pages
-Verzeichnis, wo globale Stile nur innerhalb der_app.js
-Datei importiert werden können.- Next.js unterstützt die Verwendung globaler Stile nur, wenn sie tatsächlich global sind, das heißt, sie können auf alle Seiten angewendet werden und für die gesamte Lebensdauer der Anwendung existieren. Dies liegt daran, dass Next.js die in React integrierte Unterstützung für Stylesheets zur Integration mit Suspense nutzt. Diese integrierte Unterstützung entfernt Stylesheets derzeit nicht beim Navigieren zwischen Routen. Aus diesem Grund empfehlen wir die Verwendung von CSS-Modulen anstelle globaler Stile.
Betrachten wir beispielsweise ein Stylesheet mit dem Namen app/global.css
:
Importieren Sie das global.css
-Stylesheet im Root-Layout (app/layout.js
), um die Stile auf jede Route in Ihrer Anwendung anzuwenden:
Externe Stylesheets
Von externen Paketen veröffentlichte Stylesheets können an beliebiger Stelle im app
-Verzeichnis importiert werden, einschließlich zusammengestellter Komponenten:
Hinweis: Externe Stylesheets müssen direkt von einem npm-Paket importiert oder heruntergeladen und mit Ihrer Codebasis zusammengestellt werden. Die Verwendung von
<link rel="stylesheet" />
ist nicht möglich.
Reihenfolge und Zusammenführung
Next.js optimiert CSS während der Produktions-Builds, indem Stylesheets automatisch in Chunks (zusammengeführt) werden. Die CSS-Reihenfolge wird durch die Reihenfolge der Stylesheet-Importe im Anwendungscode bestimmt.
Zum Beispiel wird base-button.module.css
vor page.module.css
angeordnet, da <BaseButton>
zuerst in <Page>
importiert wird:
Um eine vorhersehbare Reihenfolge zu gewährleisten, empfehlen wir Folgendes:
- Importieren Sie eine CSS-Datei nur in einer einzigen JS/TS-Datei.
- Bei Verwendung globaler Klassenamen importieren Sie die globalen Styles in derselben Datei in der Reihenfolge, in der sie angewendet werden sollen.
- Bevorzugen Sie CSS-Module gegenüber globalen Styles.
- Verwenden Sie eine konsistente Benennungskonvention für Ihre CSS-Module. Zum Beispiel
<name>.module.css
statt<name>.tsx
.
- Verwenden Sie eine konsistente Benennungskonvention für Ihre CSS-Module. Zum Beispiel
- Extrahieren Sie gemeinsam genutzte Styles in eine separate gemeinsame Komponente.
- Bei Verwendung von Tailwind importieren Sie das Stylesheet am Anfang der Datei, vorzugsweise im Root Layout.
- Deaktivieren Sie Linter/Formatierer (z.B. ESLints
sort-import
), die Ihre Imports automatisch sortieren. Dies kann versehentlich Ihr CSS beeinflussen, da die CSS-Import-Reihenfolge wichtig ist.
Hinweis:
- Die CSS-Reihenfolge kann sich im Entwicklungsmodus anders verhalten, stellen Sie sicher, den Build (
next build
) zu überprüfen, um die endgültige CSS-Reihenfolge zu verifizieren.- Sie können die Option
cssChunking
innext.config.js
verwenden, um zu steuern, wie CSS in Chunks aufgeteilt wird.
Zusätzliche Funktionen
Next.js bietet zusätzliche Funktionen, um die Erstellungserfahrung beim Hinzufügen von Styles zu verbessern:
- Bei lokaler Ausführung mit
next dev
profitieren lokale Stylesheets (global oder CSS-Module) von Fast Refresh, um Änderungen sofort zu reflektieren, sobald Bearbeitungen gespeichert werden. - Beim Produktions-Build mit
next build
werden CSS-Dateien in weniger minifizierte.css
-Dateien gebündelt, um die Anzahl der Netzwerkanfragen zum Abrufen von Styles zu reduzieren. - Wenn JavaScript deaktiviert ist, werden Styles im Produktions-Build (
next start
) weiterhin geladen. Fürnext dev
ist JavaScript jedoch erforderlich, um Fast Refresh zu ermöglichen.