Skip to content

Tema

UnoCSS también soporta el sistema de temas que podrías estar familiarizado en Tailwind CSS / Windi CSS. A nivel de usuario, puedes especificar la propiedad theme en tu configuración, y se fusionará profundamente con el tema por defecto.

Uso

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

Durante el proceso de análisis, theme siempre existirá en context.

Uso en rules

Para consumir el tema en reglas:

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

Uso en variants

Para consumir el tema en variantes:

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

Uso en shortcuts

Para consumir el tema en atajos dinámicos:

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

Breakpoints

WARNING

Cuando se proporciona un objeto breakpoints personalizado, el por defecto se sobrescribirá en lugar de fusionarse.

Con el siguiente ejemplo, podrás usar solo las variantes de breakpoint sm: y md::

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

Si quieres heredar los breakpoints del tema original, puedes usar extendTheme:

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

INFO

verticalBreakpoints es igual que breakpoints pero para diseño vertical.

Además ordenaremos los puntos de pantalla por tamaño (misma unidad). Para puntos de pantalla en diferentes unidades, para evitar errores, por favor usa unidades unificadas en la configuración.

ts
theme: {
  // ...
  breakpoints: {
    sm: '320px',
    // Porque uno no soporta comparación de ordenamiento de diferentes tamaños de unidad, por favor convierte a la misma unidad.
    // md: '40rem',
    md: `${40 * 16}px`,
    lg: '960px',
  },
}

ExtendTheme

ExtendTheme te permite editar el tema fusionado profundamente para obtener el objeto de tema completo.

Las funciones personalizadas mutan el objeto de tema.

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"
  }
}

También es posible devolver un nuevo objeto de tema para reemplazar completamente el original.

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.