secture & code

Back to the Feature. Viajando al futuro con Tailwind.

Mi gran amigo Dani Cabal nos contó en su artículo Tailwind es a la programación lo que la peste fue a Europa medieval cómo hemos viajado al pasado para volver al presente e implementar nuestros estilos como hace 30 años. 

Pero en este artículo no os voy a llevar al pasado sino al futuro, en concreto a un futuro en el que nuestra capa de estilos está bien organizada y estructurada, tenemos variables, utilidades y clases encapsuladas que nos ayudan a que nuestro código gane en legibilidad y limpieza. ¿Pero no hacemos esto ya? Tranquilidad, seguid leyendo. 

Tailwind

«¿CSS? A donde vamos, no necesitamos CSS.»

De vuelta al futuro

Para viajar a ese futuro prometedor, no usaremos un Delorean sino algo con más clase, o mejor dicho clases. Usaremos Tailwind.

Si bien hay fans y detractores de Tailwind, hay cierto consenso en los inconvenientes que genera su uso. ¿Pero acaso es un argumento de peso que nuestro código se vuelva ilegible e inmantenible? “Por suerte”, tenemos herramientas para luchar contra estas contrariedades y flexibilizar y escalar nuestros estilos. 

– ¡Pero yo ya hago eso que dices! 
– Espera y sigue leyendo.

Problemas de lectura y debug

Una de las principales quejas que recaen sobre Tailwind es que el código generado ensucia nuestro HTML ya que un componente estándar puede tener decenas de clases incluso aún siendo un componente pequeño que solo tenga las clases necesarias. Solo teniendo en cuenta las imprescindibles, las correspondientes asignadas a media queries y alguna que otra pseudo clase nos plantamos en una buena ristra de clases. Ni que decir tiene que volver a este componente pasado un tiempo para modificarlo se puede convertir en una ardua tarea, pero que no cunda el pánico, tenemos una solución a este problema.

Está solución no es otra que encapsular nuestros estilos, hay varias maneras de hacerlo pero me voy a centrar en dos en concreto. La primera sería encapsularlos en clases con @apply. Esto no es otra cosa que una clase de css que contiene las clases de Tailwind. 

.button {
  @apply bg-green rounded-l
}

Con esto y utilizando la clase button tendremos todos  los estilos que hemos aplicado, en este caso bg-green y rounded-l

Otra solución de encapsulación sería utilizar una librería como por ejemplo class-variance-authority. Con ella podemos no solo extraer nuestros estilos del HTML sino también controlar cambios de estado y variantes. 

Otro problema común es la inspección de estilos en el navegador. Si utilizamos Tailwind de forma canónica debuggear se hace tedioso, si encapsulamos estilos con @apply solventamos este problema, no así con class-variance-authority ya que el resultado equivale a añadir los estilos como clases en el HTML.

Llegados a este punto hemos resuelto el problema de tener una ristra interminable de estilos como clases en el HTML y una mejora a la hora de debuggear (si encapsulamos con @apply). ¿Acaso no es esto un enorme paso hacia el futuro?

– Yo ya hacía esto con estilos semánticos preprocesados hace más de 10 años.
– Si, pero ahora utilizas Tailwind. ¡Boom!

“¿Qué nos pasa en el futuro Doc? ¿Nos volvemos gilipollas o algo así?” (Marty McFly)

Aprender y dominar un framework

Otro problema que resaltan los detractores de Tailwind es lo tedioso que es aprender las más de 4000 clases que incluye. Sinceramente, en nuestro trabajo como desarrolladores estamos constantemente aprendiendo y tener que estudiar una nueva tecnología no considero que sea un problema. Además, al final siempre hay clases más comunes que otras y no es complicado encontrar las clases que implementen propiedades menos usadas. 

Por otra parte, sabiendo una clase sabidas todas sus variantes. Por ejemplo, si sabemos que p-4 equivale a padding: 1rem (en base a 16px) sabemos que p-8 equivale a 2rem

Si sabemos que la clase rotate-45 equivale a transform: rotate(45deg) sabemos que la clase rotate-60 equivale a… 

-Esto… La clase rotate-60 no está contemplada en Tailwind, habría que añadirla a la configuración tal que

extend: {
  rotate: {
    '60': '60deg',
  },
}

– Vale ¿y la clase p-15?
– Tampoco existe, habría que añadirla a la configuración también
– Pero mi diseñador ha puesto varios paddings de 52px en sus diseños.
– Seguro que son imprescindibles esos espacios. O puede que no les haya dado tiempo a aprender las más de 4000 clases que tú si has aprendido y no sepa que tienes que añadir ese espaciado en la configuración. Y ten en cuenta que la clase p-15 solo afecta el padding, si quieres un margen de 52px  también debes de añadirlo a la configuración.
-Vale, le pasaré el curso Haz tu propio twitter en solo 2h con Tailwind a los diseñadores.

AD 4nXfwzSoB2tHFW7p8jTAJm x5Ol H2KcvjYAmeFaG ION6U7pj44j9aJvDdgq438of8nlr3OD6EgN1 HKl 15RVmYnzdW9Tic27uULGzbFp LyjBIzK2XzuMe vdrY0PRyUuXH7z9yA?key=L9RoLTsXQbnlyevoptHUVtGT

Insisto, no debe de ser un problema aprender a utilizar una tecnología, sin embargo…

CSS se desvanece en el tiempo

Después de un año de uso intensivo me cuesta esfuerzo recordar las propiedades base de CSS y mi conocimiento se está desvaneciendo como Marty McFly cuando no conseguía que su madre fuera al baile del encantamiento bajo el mar con su padre. Cuando aparezca un nuevo framework, y os aseguro que aparecerá (como cada viernes), tendré que apuntarme todas las propiedades que tiene CSS en un almanaque para revisarlo cuando llegue el momento.

“Supongo que no estáis preparados para este framework. Pero a los juniors les encantará.”

Conclusiones

Llegados a este punto es el momento de plantearnos cuál es la diferencia entre encapsular y organizar nuestra capa de estilos con Tailwind vs CSS preprocesado. ¿Estamos viajando varios años en el futuro o volviendo al lejano oeste? Huelga decir que cada desarrollador es libre de ejercer su trabajo con la tecnología que más le agrade, con la que se sienta más cómodo o por la que más le paguen. 

Me parece interesante pensar si realmente estamos mejorando nuestro stack dándole funcionalidades a tecnologías que no están pensadas para ello. Tailwind nos dice (en el header de su página web) que con su uso vamos a construir sitios web modernos sin dejar el HTML, justo todo lo contrario que ofrecen los enfoques de encapsulación de Tailwind. Tal vez nuestras webs sean modernas, pero ¿acaso las desarrollaremos más lento y dejando continuamente el HTML? Solo hay una cosa cierta, “En mi opinión, si vas a hacer algo como esto, hazlo con estilo.” (Emmett L. «Doc» Brown).





Lee más en nuestro blog

Frontend

Picture of Fernando Arenas

Fernando Arenas

En mi opinión, si vas a hacer algo como esto, hazlo con estilo.
Picture of Fernando Arenas

Fernando Arenas

En mi opinión, si vas a hacer algo como esto, hazlo con estilo.

We are HIRING!

What Can We Do