Poder Atómico: la Historia de StyleX

Rate this content
Bookmark

Una historia de cómo la transformación del código ha afectado a la industria. Y cómo llevó a cambios en la forma en que escribimos CSS

This talk has been presented at React Day Berlin 2024, check out the latest edition of this React Conference.

Naman Goel
Naman Goel
25 min
16 Dec, 2024

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Hola, soy Naman y hoy voy a hablar sobre el poder atómico y la historia de StylX. Los preprocesadores de CSS como Sass y Less surgieron para abordar desafíos con CSS. En la evolución de CSS, hubo una bifurcación en el camino con algunos moviéndose hacia módulos de CSS y otros hacia CSS en JS. Atomic CSS trata de descomponer estilos en piezas pequeñas y reutilizables. Tailwind es una implementación exitosa de estilos atómicos. Stylix es un compilador de JavaScript que genera Atomic CSS y permite definir estilos una vez y reutilizarlos. El orador demuestra la conversión de un diseño a clases de Tailwind usando Stylix. Se discuten la función TW y el analizador en StyleX para definir constantes y convertirlas en objetos de StyleX. Atomic CSS es un concepto ampliamente aceptado y Tailwind se puede usar con StyleX. Se menciona el proyecto React Strict DOM como una herramienta para escribir interfaces de usuario para web y React Native.
Available in English: Atomic Power: the Story of StyleX

1. Introduction to StylX and Atomic Power

Short description:

Hola, soy Naman. Hoy, voy a hablar sobre el poder atómico y la historia de StylX. Al principio, solo existía HTML sin CSS. Usábamos etiquetas blink y etiquetas marquee para el estilo, lo cual era limitado. Luego se inventó CSS, resolviendo algunos problemas pero creando nuevos. Los preprocesadores de CSS como Sass y Less surgieron para abordar estos desafíos.

Hola, soy Naman. Mantengo StylX en Mera, y hoy voy a hablar sobre el poder atómico. Y no del tipo nuclear, sino que voy a hablar sobre lo atómico, y voy a hablar sobre poder. Y luego, usando esa lente, voy a contarles la historia de StylX.

Así que comencemos desde el principio. Al principio, existía HTML y fue el nacimiento de la World Wide Web. Y no había CSS. HTML es todo lo que teníamos. Y con ese HTML, usábamos etiquetas blink y etiquetas marquee para divertirnos, etiquetas de fuente para algo de estilo, y también lidiábamos con diseños de tablas. Eso no era divertido. Esto no era genial, pero era muy limitado. Todo tipo de diseños que hacemos hoy eran simplemente imposibles. Y era muy tedioso. No había forma de reutilizar nuestros estilos en los componentes. Los componentes ni siquiera existían aún.

Y así, en unos pocos años, personas inteligentes se reunieron e inventaron CSS. CSS resolvió algunos de nuestros mayores problemas con el estilo en HTML. Era mucho más poderoso, había diseños reales que podías hacer, y no solo con tablas. Y era mucho más reutilizable. Podías definir un selector CSS una vez y usarlo en todo tu HTML. Pero a medida que resolvíamos algunos problemas, descubríamos nuevos. Y nos dimos cuenta de que, dado que CSS no tenía espacios de nombres, era realmente difícil de mantener. Y dado que este es el CSS temprano, ni siquiera tenía variables. Así que no tenemos que repetirnos en nuestro HTML, pero ahora tenemos que repetirnos en nuestro CSS.

Así que algunas personas más inteligentes se reunieron, y llegamos a un nuevo conjunto de herramientas. Esta vez, eran preprocesadores de CSS. Cosas que procesarían algo que escribiste y generarían tu CSS. Puede que hayas oído hablar de Sass y Less. Solía usar Stylus, y CSS era CSS en JS antes de CSS en JS. Los preprocesadores de CSS resolvieron algunos de nuestros mayores problemas con CSS, como variables y anidamiento.

2. Evolution of CSS Modules and CSS in JS

Short description:

En la siguiente era, hubo una bifurcación en el camino. Algunos se movieron hacia los módulos de CSS, mientras que otros se movieron hacia CSS en JS. Los módulos de CSS resolvieron el problema de los espacios de nombres, pero tenían problemas de escalabilidad. CSS en JS proporcionó espacios de nombres y una mejor experiencia para el desarrollador. El CSS en JS compilado evolucionó, resolviendo algunos problemas pero no todos los problemas de escalabilidad. La idea de CSS atómico surgió como una convergencia entre los módulos de CSS y el CSS en JS en tiempo de compilación.

También añadieron un montón de otras características poderosas como bucles e inclusiones. Pero aún no tenían espacios de nombres, y seguía siendo difícil de mantener a gran escala. Y así, los ingenieros siguieron trabajando. Y en la siguiente era, hubo una bifurcación en el camino. Y parte de la comunidad se movió hacia los módulos de CSS, y otra parte de la comunidad se movió hacia CSS en JS. La razón por la que esto sucedió fue porque esta es la era en la que las aplicaciones de una sola página se estaban volviendo populares, y los frameworks como React habían comenzado a aparecer. Y solo para ser claros, hubo muchas personas que no se movieron a ninguna de estas nuevas herramientas y continuaron usando el buen CSS antiguo o preprocesadores de CSS. Pero me voy a centrar en cada paso adelante que damos y no continuar mencionando que, sí, las herramientas antiguas nunca desaparecieron.

Así que, en el lado de los módulos de CSS, finalmente resolvieron el problema de los espacios de nombres. Esto fue enorme. Esta es la razón por la que los módulos de CSS son tan exitosos. Pero aún era difícil de escalar de algunas maneras. En general, la mantenibilidad del código se había resuelto en su mayor parte, pero aún podías encontrarte con cierta cantidad de conflictos de CSS, y tu CSS seguiría creciendo a medida que tu aplicación se hace más grande. Por otro lado, CSS en JS también nos dio espacios de nombres, y nos dio un montón de otros poderes. Nos dio una experiencia de desarrollador mucho mejor que cualquier cosa que habíamos probado antes. Ahora podías escribir tu estilo en el mismo archivo que tu marcado, en el mismo archivo que tu componente. Pero la mayoría de estas primeras bibliotecas de CSS en JS tenían un rendimiento realmente malo porque dependían de la inyección de estilo en tiempo de ejecución. Y así, los desarrolladores de JavaScript, siendo desarrolladores de JavaScript, seguimos intentándolo.

Y un montón de bibliotecas realmente impresionantes surgieron y se volvieron exitosas. Y eventualmente alcanzamos el siguiente hito, que fue el CSS en JS en tiempo de compilación. Esta fue una evolución de la idea de CSS en JS, donde no tienes la sobrecarga de rendimiento porque compilas todo tu CSS en tiempo de construcción, y ya no tienes ninguna inyección de estilo en tiempo de ejecución, pero aún tienes la misma gran experiencia de desarrollador, que es por lo que CSS en JS fue tan exitoso en primer lugar. Y aunque resolvió muchos problemas, no resolvió completamente todos los problemas de escalabilidad que hemos tenido con básicamente cada solución de CSS que hemos probado. A medida que tu aplicación se hace más grande, tu CSS se hace más grande. Entonces te ves obligado a cargar tu CSS de manera diferida, lo que significa que las actualizaciones de tu página se vuelven más lentas porque estás esperando que se cargue, procese y compute CSS adicional. Y así continuamos. Un montón de más grandes bibliotecas de CSS en JS en tiempo de compilación surgieron, como Linarea y Vanilla Extract, y alcanzamos algún tipo de convergencia, donde las dos corrientes más o menos acordaron en la idea de CSS atómico. Por supuesto, no todos estuvieron de acuerdo. Muchas personas se aferraron a los módulos de CSS, módulos de CSS Vanilla, y muchos otros continuaron usando el CSS en JS en tiempo de compilación, o incluso CSS en JS en tiempo de ejecución. Pero es importante notar que muchas personas de ambas corrientes sí estuvieron de acuerdo en que el CSS atómico era una buena idea. Pero, ¿qué es el CSS atómico? Tan pronto como se menciona el término, este pensamiento aparece en la cabeza de todos, este elefante en la habitación.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Construir un Sistema de Diseño con React y Tailwind CSS
React Summit 2022React Summit 2022
27 min
Construir un Sistema de Diseño con React y Tailwind CSS
Top Content
This Talk discusses design systems and how to build one using React and Tailwind CSS. Tailwind CSS provides utility classes for building complex layouts without writing CSS rules. Custom colors can be added to the Tailwind CSS config file, and font styles and text sizes can be customized. The entire Tailwind CSS configuration can be customized to meet specific requirements. Base styles can be added to the config file itself using a plugin. Reusable components can be created with Tailwind CSS, allowing for easy customization of size and color.
If You Were a React Compiler
React Summit US 2024React Summit US 2024
26 min
If You Were a React Compiler
Top Content
In this talk, the speaker aims to build an accurate understanding of how the new React compiler works, focusing on minimizing re-renders and improving performance. They discuss the concept of memoization and how it can be used to optimize React applications by storing the results of function calls. The React compiler automates this process by analyzing code, checking dependencies, and transpiling JSX. The speaker emphasizes the importance of being aware of memory concerns when using memoization and explains how the React compiler detects changes in function closure values. They also mention the Fibre Tree, which drives the reconciliation process and helps optimize performance in React. Additionally, the speaker touches on JSX transpilation, compiler caching, and the generation of code. They encourage developers to understand the code generated by the compiler to optimize specific sections as needed.
Cómo lograr la composición de diseño en React
React Summit 2022React Summit 2022
8 min
Cómo lograr la composición de diseño en React
This talk discusses achieving layout composition in React using Bedrock Layout Primitives. By componentizing CSS layout, complex layouts can be achieved and reused across different components. The talk also covers the challenges of achieving complex layouts, such as card lineups, and provides solutions for maintaining alignment and responsiveness. The BedrockLayout primitive library simplifies web layouts and offers flexibility in composing layouts.
Estilo Seguro para Paquetes de Componentes React: Vanilla Extract CSS
React Advanced 2023React Advanced 2023
19 min
Estilo Seguro para Paquetes de Componentes React: Vanilla Extract CSS
Today's Talk introduces Vanilla Extract CSS, a type-safe styling method for React applications. It combines the benefits of scoped styling, zero runtime overhead, and a great developer experience. Vanilla Extract generates a static CSS file at build time, resulting in better performance. It is framework agnostic and offers a powerful toolkit, including Sprinkles for utility classes and CSS utils for calculations. With type safety and the ability to define themes and variants, Vanilla Extract makes it easy to create efficient, scalable, and maintainable design system component packages.
Pasando de Css-In-Js en tiempo de ejecución a gran escala
React Summit 2023React Summit 2023
29 min
Pasando de Css-In-Js en tiempo de ejecución a gran escala
This Talk explores the evolution of styling architecture, dynamic theming with style components, and optimizing style updates. It discusses the challenges of CSS migration and the choice between JavaScript and CSS native tooling. The Talk also touches on CSS tools and libraries, including Tailwind CSS and CSS in JS major libraries like MUI. The importance of picking a stack based on team members' strengths and the use of namespacing CSS for conflict-free dependency trees are highlighted.