Configuración, Theme (Tema)

Configurar el tema por default de tu proyecto

La sección theme (tema) de tu archivo tailwind.config.js es donde defines la paleta de colores, escala de tipos, fuentes, puntos de quiebre, valores de radio de borde y más de tu proyecto.

// tailwind.config.js
/** @type {import('tailwindcss').Config} */
module.exports = {
    theme: {
        screens: {
            sm: '480px',
            md: '768px',
            lg: '976px',
            xl: '1440px',
        },
        colors: {
            blue: '#1fb6ff',
            purple: '#7e5bef',
            pink: '#ff49db',
            orange: '#ff7849',
            green: '#13ce66',
            yellow: '#ffc82c',
            'gray-dark': '#273444',
            gray: '#8492a6',
            'gray-light': '#d3dce6',
        },
        fontFamily: {
            sans: ['Graphik', 'sans-serif'],
            serif: ['Merriweather', 'serif'],
        },
        extend: {
            spacing: {
                128: '32rem',
                144: '36rem',
            },
            borderRadius: {
                '4xl': '2rem',
            },
        },
    },
}

Tailwind un tema predeterminado sensato con un conjunto muy generoso de valores para que comiences, pero no tengas miedo de cambiarlo o ampliarlo.

Estructura del tema

El objeto theme contiene claves para pantallas, colores y espaciado, así como una clave para cada plugin base.

Screens (Pantallas)

La clave screens te permite personalizar los puntos de quiebre responsivos en tu proyecto.

// tailwind.config.js
/** @type {import('tailwindcss').Config} */
module.exports = {
    theme: {
        screens: {
            sm: '640px',
            md: '768px',
            lg: '1024px',
            xl: '1280px',
            '2xl': '1536px',
        },
    },
}

Colors (Colores)

El objeto colors te permite personalizar la paleta de colores global de tu proyecto.

// tailwind.config.js
/** @type {import('tailwindcss').Config} */
module.exports = {
    theme: {
        colors: {
            transparent: 'transparent',
            black: '#000',
            white: '#fff',
            gray: {
                100: '#f7fafc',
                // ...
                900: '#1a202c',
            },

            // ...
        },
    },
}

Por default estos colores son heredados por todos aquellos valores relacionados con los colores, como backgroundColor, borderColor, textColor y otros.

Spacing (Espaciado)

El objeto spacing permite personalizar los valores globales de espaciamiento, tamaño y escala del proyecto.

// tailwind.config.js
/** @type {import('tailwindcss').Config} */
module.exports = {
    theme: {
        spacing: {
            px: '1px',
            0: '0',
            0.5: '0.125rem',
            1: '0.25rem',
            1.5: '0.375rem',
            2: '0.5rem',
            2.5: '0.625rem',
            3: '0.75rem',
            3.5: '0.875rem',
            4: '1rem',
            5: '1.25rem',
            6: '1.5rem',
            7: '1.75rem',
            8: '2rem',
            9: '2.25rem',
            10: '2.5rem',
            11: '2.75rem',
            12: '3rem',
            14: '3.5rem',
            16: '4rem',
            20: '5rem',
            24: '6rem',
            28: '7rem',
            32: '8rem',
            36: '9rem',
            40: '10rem',
            44: '11rem',
            48: '12rem',
            52: '13rem',
            56: '14rem',
            60: '15rem',
            64: '16rem',
            72: '18rem',
            80: '20rem',
            96: '24rem',
        },
    },
}

Por default estos valores son heredados por padding, margin, width, height, maxHeight, flex-basis, gap, inset, space, translate, scrollMargin, scrollPadding y textIndent.

Core Plugins (Plugins principales)

El resto de la sección theme es utilizado para configurar cuales valores están disponibles para cada plugin base.

Por ejemplo, el borderRadius permite personalizar el radio del borde.

module.exports = {
    theme: {
        borderRadius: {
            none: '0',
            sm: '.125rem',
            DEFAULT: '.25rem',
            lg: '.5rem',
            full: '9999px',
        },
    },
}

Las claves determinan el sufijo para las clases generadas, y los valores determinan el valor de la declaración CSS real.

La configuración de ejemplo de borderRadius mencionada anteriormente generaría las siguientes clases CSS:

.rounded-none {
    border-radius: 0;
}
.rounded-sm {
    border-radius: 0.125rem;
}
.rounded {
    border-radius: 0.25rem;
}
.rounded-lg {
    border-radius: 0.5rem;
}
.rounded-full {
    border-radius: 9999px;
}

Notarás que al utilizar la clave DEFAULT en la configuración del tema, se creó la clase rounded sin ningún sufijo. Esta es una convención común en Tailwind y es compatible con todos los complementos centrales.

Personalización del tema predeterminado

De manera predeterminada, tu proyecto heredará automáticamente los valores de la configuración del tema por defecto. Si deseas personalizar el tema por defecto, tienes varias opciones diferentes dependiendo de tus objetivos.

Extender el tema predeterminado

Si deseas conservar los valores predeterminados de una opción de tema pero también agregar nuevos valores, añade tus extensiones bajo la clave theme.extend en tu archivo de configuración. Los valores bajo esta clave se fusionan con los valores existentes de theme y automáticamente se convierten en nuevas clases que puedes utilizar.

// tailwind.config.js
/** @type {import('tailwindcss').Config} */
module.exports = {
    theme: {
        extend: {
            fontFamily: {
                display: 'Oswald, ui-serif', // Adds a new `font-display` class
            },
        },
    },
}

Si queremos por ejemplo agregar uan nueva variante de tamaño a las ya existentes llamada 3xl.

// tailwind.config.js
/** @type {import('tailwindcss').Config} */
export default {
    theme: {
        extend: {
            screens: {
                '3xl': '1600px',
            },
        },
    },
    plugins: [],
}

Con esta adición, podemos empezar a utilizar esta clase responsiva en nuestro proyecto.

<div class="bg-slate-500 min-h-screen p-10">
    <div class="bg-white p-5 rounded-lg">
        <div class="text-2xl 3xl:text-red-600">S3</div>
    </div>
</div>

Ejemplo

Sobreescribir el tema predeterminado

Para sobreescribir una opción default en el tema, agrega el valor dentro de la sección theme.

// tailwind.config.js
/** @type {import('tailwindcss').Config} */
module.exports = {
    theme: {
        // Replaces all of the default `opacity` values
        opacity: {
            0: '0',
            20: '0.2',
            40: '0.4',
            60: '0.6',
            80: '0.8',
            100: '1',
        },
    },
}

Esto reemplazará completamente la configuración por default de esta llave, de tal forma que en el ejemplo anterior, ninguna de las utilidades para opacidad serán generadas.

Cualquier llave que no proporciones sera heredada del tema por default, de tal forma que en el ejemplo anterior, la configuración del tema por default para cosas como colores, espaciamiento, radio del borde, posición del fondo, etc. será preservada.

Es posible también sobreescribir algunas partes del proyecto y extender otras dentro de la misma configuración.

// tailwind.config.js
/** @type {import('tailwindcss').Config} */
module.exports = {
    theme: {
        opacity: {
            0: '0',
            20: '0.2',
            40: '0.4',
            60: '0.6',
            80: '0.8',
            100: '1',
        },
        extend: {
            screens: {
                '3xl': '1600px',
            },
        },
    },
}

Referenciar a otros valores

Si necesitas hacer referencia a otro valor en el tema, puedes utilizar la función theme() para acceder a la notación de punto.

// tailwind.config.js
/** @type {import('tailwindcss').Config} */
module.exports = {
    theme: {
        spacing: {
            // ...
        },
        backgroundSize: ({ theme }) => ({
            auto: 'auto',
            cover: 'cover',
            contain: 'contain',
            ...theme('spacing'),
        }),
    },
}

La función theme() intenta encontrar el valor que estás buscando a partir del objeto de tema completamente fusionado, por lo que puede hacer referencia a tus propias personalizaciones, así como a los valores predeterminados del tema. También funciona de manera recursiva, por lo que siempre que haya un valor estático al final de la cadena, podrá resolver el valor que estás buscando.

Referenciar al tema predeterminado

Si deseas referenciar un valor en un tema default por cualquier razón, puedes importar tailwindcss/defaultTheme.

Un ejemplo en donde esto es útil es si tu deseas agregar una fuente a uno de los stacks por default.

// tailwind.config.js
const defaultTheme = require('tailwindcss/defaultTheme')

module.exports = {
    theme: {
        extend: {
            fontFamily: {
                sans: ['Lato', ...defaultTheme.fontFamily.sans],
            },
        },
    },
}

Desactivación de un plugin principal completo

Si deseas que no se generen clases para determinado plugin, es mejor establecer dicho plugin como false dentro de la configuración corePlugins, que proveer un objeto vacío dentro de theme.

// tailwind.config.js
/** @type {import('tailwindcss').Config} */
module.exports = {
    corePlugins: {
        opacity: false,
    },
}