Skip to content

Theme

UnoCSS unterstützt auch das Theme-System, das Sie möglicherweise aus Tailwind CSS / Windi CSS kennen. Auf Benutzerebene können Sie die theme Eigenschaft in Ihrer Konfiguration angeben, und sie wird tief mit dem Standard-Theme zusammengeführt.

Verwendung

ts
theme: {
  // ...
  colors: {
    veryCool: '#0000ff', // class="text-very-cool"
    brand: {
      primary: 'hsl(var(--hue, 217) 78% 51%)', //class="bg-brand-primary"
      DEFAULT: '#942192' //class="bg-brand"
    },
  },
}

TIP

Während des Parsing-Prozesses wird theme immer im context vorhanden sein.

Verwendung in rules

Um das Theme in Regeln zu verwenden:

ts
rules: [
  [/^text-(.*)$/, ([, c], { theme }) => {
    if (theme.colors[c])
      return { color: theme.colors[c] }
  }],
]

Verwendung in variants

Um das Theme in Varianten zu verwenden:

ts
variants: [
  {
    name: 'variant-name',
    match(matcher, { theme }) {
      // ...
    },
  },
]

Verwendung in shortcuts

Um das Theme in dynamischen Shortcuts zu verwenden:

ts
shortcuts: [
  [/^badge-(.*)$/, ([, c], { theme }) => {
    if (Object.keys(theme.colors).includes(c))
      return `bg-${c}4:10 text-${c}5 rounded`
  }],
]

Breakpoints

WARNING

Wenn ein benutzerdefiniertes breakpoints Objekt bereitgestellt wird, wird das Standard-Objekt überschrieben anstatt zusammengeführt.

Mit dem folgenden Beispiel können Sie nur die sm: und md: Breakpoint-Varianten verwenden:

ts
theme: {
  // ...
  breakpoints: {
    sm: '320px',
    md: '640px',
  },
}

Wenn Sie die original Theme-Breakpoints erben möchten, können Sie extendTheme verwenden:

ts
extendTheme: (theme) => {
  return {
    ...theme,
    breakpoints: {
      ...theme.breakpoints,
      sm: '320px',
      md: '640px',
    },
  }
}

INFO

verticalBreakpoints ist dasselbe wie breakpoints, aber für vertikales Layout.

Zusätzlich sortieren wir Bildschirmpunkte nach Größe (gleiche Einheit). Für Bildschirmpunkte in verschiedenen Einheiten, um Fehler zu vermeiden, verwenden Sie bitte einheitliche Einheiten in der Konfiguration.

ts
theme: {
  // ...
  breakpoints: {
    sm: '320px',
    // Da uno keinen Vergleichssortierung von verschiedenen Einheitsgrößen unterstützt, konvertieren Sie bitte zur gleichen Einheit.
    // md: '40rem',
    md: `${40 * 16}px`,
    lg: '960px',
  },
}

ExtendTheme

ExtendTheme ermöglicht es Ihnen, das tief zusammengeführte Theme zu bearbeiten, um das vollständige Theme-Objekt zu erhalten.

Benutzerdefinierte Funktionen mutieren das Theme-Objekt.

ts
extendTheme: (theme) => {
  theme.colors.veryCool = '#0000ff' // class="text-very-cool"
  theme.colors.brand = {
    primary: 'hsl(var(--hue, 217) 78% 51%)', // class="bg-brand-primary"
  }
}

Es ist auch möglich, ein neues Theme-Objekt zurückzugeben, um das Original vollständig zu ersetzen.

ts
extendTheme: (theme) => {
  return {
    ...theme,
    colors: {
      ...theme.colors,
      veryCool: '#0000ff', // class="text-very-cool"
      brand: {
        primary: 'hsl(var(--hue, 217) 78% 51%)', // class="bg-brand-primary"
      },
    },
  }
}

Released under the MIT License.