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
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:
rules: [
[/^text-(.*)$/, ([, c], { theme }) => {
if (theme.colors[c])
return { color: theme.colors[c] }
}],
]
Uso en variants
Para consumir el tema en variantes:
variants: [
{
name: 'variant-name',
match(matcher, { theme }) {
// ...
},
},
]
Uso en shortcuts
Para consumir el tema en atajos dinámicos:
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:
:
theme: {
// ...
breakpoints: {
sm: '320px',
md: '640px',
},
}
Si quieres heredar los breakpoints del tema original
, puedes usar extendTheme
:
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.
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.
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.
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"
},
},
}
}