Tailwind no es para mí
Las críticas a Tailwind CSS se centran en sus verbosas clases de utilidad, la “contaminación” del HTML y el bloqueo alrededor de la sintaxis no estándar `@apply`, y algunos desarrolladores sostienen que socava el HTML semántico, la accesibilidad y la mantenibilidad a largo plazo. Sus defensores responden que Tailwind mejora la productividad, mantiene el estilo localizado junto a los componentes y reduce problemas comunes de CSS como el nombrado, los conflictos de especificidad y la acumulación descontrolada de hojas de estilo, especialmente en aplicaciones grandes o desarrolladas con rapidez. El intercambio destaca una tensión más amplia entre el HTML/CSS/JS “aburrido” y las nuevas abstracciones, así como prioridades distintas en torno a la velocidad de desarrollo, la legibilidad y la preparación para el futuro.
Sentimiento general
- El hilo está muy dividido: algunos ven Tailwind como una gran mejora de productividad, otros lo consideran feo, propietario y malo para el mantenimiento a largo plazo.
- Muchos sostienen que la elección depende sobre todo del flujo de trabajo personal, la escala del proyecto y la tolerancia al bloqueo por herramientas.
Productividad frente a mantenibilidad
- Sus defensores dicen que Tailwind:
- Elimina tener que nombrar clases CSS y gestionar hojas de estilo grandes.
- Mantiene la “localidad de comportamiento”: los estilos están junto al marcado/componente, lo que facilita copiar y pegar y razonar sobre el código.
- Acelera el prototipado y los MVP, especialmente para personas sin mucha experiencia en CSS.
- Sus críticos dicen:
- Los atributos
classlargos se vuelven ilegibles, especialmente con 20–50 utilidades en un solo elemento. - Refactorizar meses después, o que lo haga otra persona, es doloroso.
- Fomenta la “sopa de
div/span” y una semántica débil, perjudicando la accesibilidad y el rendimiento.
- Los atributos
CSS, arquitectura y separación de responsabilidades
- Un bando enfatiza la separación: HTML para estructura, CSS para estilo, JS para comportamiento. Tailwind se ve como un retroceso hacia estilos en línea y “spaghetti”.
- Otros argumentan que la separación estricta está sobrevalorada; colocar los estilos junto a los componentes reduce los cambios de contexto y los problemas propios de CSS (guerras de especificidad, abuso de
!important). - Hay debate sobre si Tailwind es “solo CSS en línea” (críticos) o un sistema de utilidades restringido y basado en temas que evita muchos problemas de los estilos en línea (defensores).
Bloqueo, herramientas y portabilidad
- Algunos temen que
@applyde Tailwind y los tokens de diseño definidos en JS sean propietarios y hagan que los estilos no sean portables. - Otros señalan herramientas que convierten entre Tailwind y CSS normal, y proyectos orientados a “des-Tailwindizar” código.
- Preocupa la necesidad de una etapa de compilación y de herramientas JS incluso para CSS; otros señalan que muchas pilas ya tienen un pipeline de compilación.
Web components, custom elements y Shadow DOM
- Debate sobre usar elementos personalizados (por ejemplo,
<ui-card>) para evitar la sopa dediv:- Algunos sostienen que se pueden usar etiquetas no declaradas solo por semántica y para seleccionar con CSS.
- Otros subrayan que eso no es lo mismo que los verdaderos custom elements, que requieren JS y Shadow DOM.
- Se critica el Shadow DOM como una abstracción problemática que complica el estilo y la integración con Tailwind y otras herramientas.
Alternativas y enfoques intermedios
- Alternativas mencionadas: PicoCSS, CSS puro con funciones modernas, CSS Modules, Styled Components, LESS/SASS, bibliotecas atómicas/de utilidades y herramientas que extraen Tailwind a CSS normal.
- Un compromiso habitual: usar utilidades para maquetación/estructura, y clases o componentes personalizados para el aspecto visual; agrupar clases de Tailwind dentro de abstracciones de componentes.
Metadiscusión: moda tecnológica y “tecnología aburrida”
- Varios comentarios lamentan el cambio constante de frameworks y la tecnología como moda.
- Algunos defienden HTML/CSS/JS “aburridos” sin herramientas pesadas; otros defienden la experimentación y señalan que los frameworks suelen influir en futuros estándares.