Crear componentes; es otro de los superpoderes de Tailwind css, agrupando funcionalidad y reutilización.
.

Crear clases personalizadas que agrupen múltiples utilidades de Tailwind CSS es una técnica poderosa para mantener el código limpio y reutilizable. Cuando un proyecto crece, repetir las mismas cadenas de clases en cada elemento se vuelve insostenible, y es aquí donde la extracción de componentes marca la diferencia.
¿Qué significa extraer componentes en Tailwind CSS?
Extraer componentes consiste en crear clases de estilos propias que encapsulen todas las utilidades de Tailwind aplicadas a un elemento específico. De esta forma, en lugar de escribir una larga lista de clases en cada input o botón, se usa una sola clase personalizada que se puede reutilizar en todo el proyecto [0:15].
Antes de comenzar la extracción, es importante revisar cómo se ve el diseño en modo responsivo. En el ejemplo práctico, el formulario estaba ubicado incorrectamente dentro de los cards, lo que causaba problemas visuales. Al corregir la estructura y agregar utilidades como mt-4 para separación y container mx-auto para centrado, el formulario quedó en su lugar correcto [0:30].
¿Cómo se usa la directiva @apply para crear clases reutilizables?
El proceso se realiza dentro del archivo CSS de Tailwind, utilizando la directiva @apply. Esta directiva permite agrupar múltiples clases de utilidad bajo un solo nombre personalizado.
¿Cómo crear un form control reutilizable?
Para extraer un input como componente se siguen estos pasos [1:15]:
.form-control en el archivo CSS.@apply seguido de las clases copiadas.form-control.css .form-control { @apply /* aquí van todas las clases de utilidad del input */; }
Un detalle importante: al intentar incluir atributos personalizados como placeholder-secondary dentro de @apply, Tailwind lanza un error porque no reconoce atributos creados por el usuario. La solución es remover ese tipo de clases personalizadas del componente extraído [2:00].
¿Cómo manejar pseudoclases como hover y focus?
Las pseudoclases requieren clases separadas. Se crean componentes adicionales como .form-control-hover y .form-control-focus [2:45]:
hover: o focus:.@apply dentro de la regla CSS correspondiente.css .form-control:hover { @apply /* clases de hover sin el prefijo hover: */; }
.form-control:focus { @apply /* clases de focus sin el prefijo focus: */; }
Una vez creadas estas reglas, se eliminan las pseudoclases del HTML y el componente mantiene todos sus efectos visuales de forma centralizada.
¿Cómo extraer un botón con variantes en Tailwind?
El mismo principio aplica para botones. Se copian las clases del botón sin las pseudoclases, se crea una clase .btn y se usa @apply [3:30]:
css .btn { @apply /* clases base del botón */; }
.btn:hover { @apply /* clases de hover del botón */; }
Además, se pueden crear variantes del botón. Por ejemplo, un botón primario con un color específico [4:05]:
css .btn-primary { @apply bg-yellow-600; }
En el HTML basta con usar btn btn-primary para obtener un botón amarillo con todos los estilos base heredados. Este patrón es muy similar al que usan frameworks como Bootstrap, pero con la flexibilidad total de Tailwind.
Las ventajas de esta técnica son claras:
¿Ya estás usando @apply en tus proyectos? Comparte cómo organizas tus componentes extraídos y qué patrones te han funcionado mejor.
Crear clases personalizadas que agrupen múltiples utilidades de Tailwind CSS es una técnica poderosa para mantener el código limpio y reutilizable. Cuando un proyecto crece, repetir las mismas cadenas de clases en cada elemento se vuelve insostenible, y es aquí donde la extracción de componentes marca la diferencia.
Extraer componentes consiste en crear clases de estilos propias que encapsulen todas las utilidades de Tailwind aplicadas a un elemento específico. De esta forma, en lugar de escribir una larga lista de clases en cada input o botón, se usa una sola clase personalizada que se puede reutilizar en todo el proyecto [0:15].
Antes de comenzar la extracción, es importante revisar cómo se ve el diseño en modo responsivo. En el ejemplo práctico, el formulario estaba ubicado incorrectamente dentro de los cards, lo que causaba problemas visuales. Al corregir la estructura y agregar utilidades como mt-4 para separación y container mx-auto para centrado, el formulario quedó en su lugar correcto [0:30].
El proceso se realiza dentro del archivo CSS de Tailwind, utilizando la directiva @apply. Esta directiva permite agrupar múltiples clases de utilidad bajo un solo nombre personalizado.
Para extraer un input como componente se siguen estos pasos [1:15]:
.form-control en el archivo CSS.@apply seguido de las clases copiadas.form-control.css .form-control { @apply /* aquí van todas las clases de utilidad del input */; }
Un detalle importante: al intentar incluir atributos personalizados como placeholder-secondary dentro de @apply, Tailwind lanza un error porque no reconoce atributos creados por el usuario. La solución es remover ese tipo de clases personalizadas del componente extraído [2:00].
Las pseudoclases requieren clases separadas. Se crean componentes adicionales como .form-control-hover y .form-control-focus [2:45]:
hover: o focus:.@apply dentro de la regla CSS correspondiente.css .form-control:hover { @apply /* clases de hover sin el prefijo hover: */; }
.form-control:focus { @apply /* clases de focus sin el prefijo focus: */; }
Una vez creadas estas reglas, se eliminan las pseudoclases del HTML y el componente mantiene todos sus efectos visuales de forma centralizada.
El mismo principio aplica para botones. Se copian las clases del botón sin las pseudoclases, se crea una clase .btn y se usa @apply [3:30]:
css .btn { @apply /* clases base del botón */; }
.btn:hover { @apply /* clases de hover del botón */; }
Además, se pueden crear variantes del botón. Por ejemplo, un botón primario con un color específico [4:05]:
css .btn-primary { @apply bg-yellow-600; }
En el HTML basta con usar btn btn-primary para obtener un botón amarillo con todos los estilos base heredados. Este patrón es muy similar al que usan frameworks como Bootstrap, pero con la flexibilidad total de Tailwind.
Las ventajas de esta técnica son claras:
¿Ya estás usando @apply en tus proyectos? Comparte cómo organizas tus componentes extraídos y qué patrones te han funcionado mejor.
Crear componentes; es otro de los superpoderes de Tailwind css, agrupando funcionalidad y reutilización.
.

en la version 2 me estaba dando un error al extraer shadow-outline y es porque esta clase la remplazaron por ring
Era que pongan esta clase al principio
Booom justo lo que veía que era lo malo de Tailwind de tener un html con muuuchas clases con la directiva @apply se soluciona!
Alguien sabe como hacer para que vscode deje de mostrar warnings por las directivas de Tailwind. Son un poco molestos
definitivamente me enamore de tailwind <3
Por si a alguien no le funciona, tiene que hacerlo de la siguiente manera:
.form-control {
@apply w-full leading-snug placeholder-secondary text-gray-800 py-1 px-4 rounded bg-gray-300 border border-blue-300 hover:bg-white focus:outline-none focus:ring-2 focus:ring-blue-600 focus:border-transparent;
}
Luego deben ir a su terminal y ejecutar ++npm run build++ y listo.
En el siguiente enlace pueden ver la documentación oficial de Tailwind.
f
Creo que esto es lo mas poderoso que tiene tailwind
y qué pasó con el placeholder-secondary?