Zum Inhalt springen

Theme und Anpassung

Das Theme von Tailwind besteht aus einer flachen Menge von CSS-Variablen. Du erweiterst oder ersetzt es mit einem @theme { … }-Block in deinem Eingabe-CSS, verweist innerhalb von CSS über Theme-Funktionen auf diese Werte und liest die aufgelösten Werte aus PHP aus. Es gibt keine JavaScript-Konfigurationsdatei – das Theme liegt vollständig in CSS.

Der @theme-Block

Ein @theme-Block definiert Design-Tokens als benutzerdefinierte Eigenschaften von CSS. Das Namensraumpräfix jeder Variable (--color-*, --font-*, --breakpoint-*, --spacing-*, …) gibt an, welche Utilities und Varianten Tailwind mit diesem Token bereitstellt.

PHP
use TailwindPHP\tw;

$css = tw::generate('<div class="bg-brand text-brand xs:flex">', '
    @import "tailwindcss";

    @theme {
        --color-brand: #3b82f6;
        --font-heading: "Inter", sans-serif;
        --breakpoint-xs: 20rem;
        --spacing-huge: 10rem;
    }
');

Jeder Token registriert Utilities in seinem Namensraum. Das obige Beispiel stellt bg-brand, text-brand, border-brand, die Familie font-heading, eine responsive Variante xs: sowie Abstände p-huge/m-huge bereit – generiert werden sie nur, wenn die jeweilige Klasse in deinen Inhalten vorkommt.

CSS
/* bg-brand resolves to the theme variable */
:root, :host {
  --color-brand: #3b82f6;
}
.bg-brand {
  background-color: var(--color-brand);
}

Der Token --breakpoint-xs registriert die Variante xs: direkt:

CSS
@media (min-width: 20rem) {
  .xs\:flex {
    display: flex;
  }
}

Häufige Namensräume

Namensraum Stellt bereit
--color-* bg-*, text-*, border-*, fill-*, stroke-*, …
--font-* Utilities der Familie font-*
--text-* text-*-Schriftgrößen-Utilities
--breakpoint-* Responsive Varianten (sm:, md:, benutzerdefiniertes xs:)
--spacing-* Benannte Abstände (p-huge, m-huge)
--radius-* rounded-*-Utilities
--shadow-* shadow-*-Utilities

Namensraum zurücksetzen

Wenn du einen Namensraum-Wildcard auf initial setzt, entfernt Tailwind zunächst die Standardwerte für diesen Namensraum. Anschließend werden deine eigenen Tokens hinzugefügt. So kannst du mit einer leeren Palette beginnen:

CSS
@theme {
    /* Drop every default color, then define only what you need */
    --color-*: initial;
    --color-brand: #3b82f6;
    --color-ink: #111827;
}

--*: initial; setzt das gesamte Theme zurück. Ein einzelner Wert initial für einen Schlüssel ohne Wildcard (--color-red-500: initial;) entfernt nur diesen Token. Als Wert für einen -*-Wildcard ist nur initial zulässig; jeder andere Wert führt zu einem Fehler.

Theme-Werte in CSS auslesen

theme()

Die veraltete Funktion theme() liest einen Wert in Punktnotation aus den Namespaces von v3-style. Sie wird beim Kompilieren zum Wert des Tokens aufgelöst und kann daher überall dort verwendet werden, wo ein Wert erwartet wird – auch in benutzerdefinierten Regeln und anderen Deklarationen.

PHP
$css = tw::generate('<div class="callout">', '
    @import "tailwindcss";
    .callout { color: theme(colors.red.500); }
');
CSS
.callout {
  color: oklch(63.7% .237 25.331);
}

Punktpfade verweisen auf die zugrunde liegenden Variablen (colors.red.500 → --color-red-500, fontFamily.sans → die serifenlose Schriftfamilie). Ein Opazitätsmodifikator wird unterstützt: theme(colors.red.500 / 50%). Ein Fallback kann als zweites Argument übergeben werden: theme(colors.brand, #000). Kann ein Pfad nicht aufgelöst werden und ist kein Fallback angegeben, wird der Kandidat, der ihn verwendet, verworfen.

--theme()

--theme() liest eine Theme-Variable anhand ihres CSS-Eigenschaftsnamens und gibt standardmäßig eine var()-Referenz zurück, damit der Wert zur Laufzeit überschreibbar bleibt:

CSS
.btn { color: --theme(--color-brand); }
/* → color: var(--color-brand); */

Füge inline hinzu, um statt einer var()-Referenz den aufgelösten Wert einzusetzen: --theme(--color-brand inline). Ein zweites Argument dient als Fallback (--theme(--color-brand, #000)); ein initial-Fallback wird speziell behandelt — er wird in verschachtelte var()-Referenzen eingefügt, die selbst zu initial aufgelöst werden. Innerhalb einer At-Regel (@media, @container) wird --theme() immer inline aufgelöst, da var() in diesen Präambeln ungültig ist.

--spacing()

--spacing(n) multipliziert die grundlegende Abstandseinheit des Themes (--spacing) mit n:

CSS
@utility my-gap { gap: --spacing(4); }
/* → gap: calc(var(--spacing) * 4); */

Ein Multiplikator von 1 wird zur Basisvariable selbst aufgelöst (--spacing(1) → var(--spacing), was auch p-1 ausgibt), und 0 zu einer einfachen Länge von null.

Dies ist dieselbe Berechnung, die die integrierten Abstandswerkzeuge verwenden. Benutzerdefinierte Werte bleiben so mit p-4, m-4 und ähnlichen Werten konsistent.

--alpha()

--alpha(color / opacity) wendet mithilfe eines color-mix() im oklab-Farbraum eine Opazität auf eine Farbe an:

CSS
@utility tint { color: --alpha(var(--color-red-500) / 50%); }
CSS
.tint {
  color: #fb2c3680;
}
@supports (color: color-mix(in lab, red, red)) {
  .tint {
    color: color-mix(in oklab, var(--color-red-500) 50%, transparent);
  }
}

Die Form color-mix() bleibt zur Laufzeit überschreibbar; der davorstehende statische Fallback, der aus dem Theme-Wert berechnet wird, deckt Browser ohne color-mix() ab. Deaktiviere den Fallback mit der Option polyfills von tw::compile().

Opazität und color-mix() kombinieren → oklab()

Opazitätsmodifikatoren lassen sich kombinieren. Werden auf einen Wert, der bereits 50 % Opazität hat, nochmals 50 % angewendet, ergibt das 25 %, berechnet in oklab. Wird ein Opazitätsmodifikator auf eine statische Farbe angewendet, reduziert TailwindPHP den Ausdruck color-mix(in oklab, …) auf einen konkreten Wert vom Typ oklab() — dieselbe Umwandlung, die lightningcss in der vorgelagerten Tailwind-Toolchain durchführt. Dynamische Farben, die weiterhin in var() eingeschlossen sind, behalten die Form color-mix() und bleiben dadurch zur Laufzeit überschreibbar.

Theme-Werte aus PHP lesen

Drei Zugriffsmethoden geben aufgelöste Theme-Werte als PHP-Arrays zurück. Jede nimmt optional einen Eingabestring CSS entgegen (Standardwert @import "tailwindcss";) und ist auch auf einer Compilerinstanz verfügbar.

PHP
use TailwindPHP\tw;

tw::colors();
// ['red-500' => 'oklch(63.7% .237 25.331)', 'blue-500' => 'oklch(62.3% .214 259.815)', ...]

tw::breakpoints();
// ['sm' => '40rem', 'md' => '48rem', 'lg' => '64rem', 'xl' => '80rem', '2xl' => '96rem']

tw::spacing('@import "tailwindcss"; @theme { --spacing-huge: 10rem; }');
// ['huge' => '10rem']

Übergib einen CSS-String, um Werte aus einem angepassten Theme auszulesen:

PHP
tw::colors('@import "tailwindcss"; @theme { --color-brand: #3b82f6; }');
// [..., 'brand' => '#3b82f6']

tw::breakpoints('@import "tailwindcss"; @theme { --breakpoint-xs: 20rem; }');
// ['sm' => '40rem', ..., '2xl' => '96rem', 'xs' => '20rem']

TailwindCSS 4 verwendet einen einzelnen --spacing-Basiswert statt einer --spacing-*-Skala, daher gibt tw::spacing() nur die benutzerdefinierten --spacing-*-Tokens zurück, die du definierst. Bei einer Compilerinstanz sind dieselben Methoden verfügbar: $compiler->colors(), $compiler->breakpoints(), $compiler->spacing(). Die API enthält alle Signaturen.

Nächste Schritte

  • Direktiven — @apply, @utility, @custom-variant, @layer.
  • Importe — @import, virtuelle Module und Preflight.
  • API — alle Accessor- und Inspektionsmethoden.