Desde que mencionamos por primera vez CSS-en-JS como una técnica emergente en el 2007, se ha vuelto mucho más popular, y es una tendencia que también vemos en nuestro trabajo. Con una sólida experiencia de producción en nuestro historial, ahora podemos recomendar CSS-en-JS como una técnica a probar. Un buen punto de partida es el marco de trabajo denominado componentes con estilos (styled components), que mencionamos en nuestro último Radar. A pesar de todos los aspectos positivos que tiene esta técnica, puede haber una desventaja al utilizar CSS-en-JS: el cálculo de los estilos en tiempo de ejecución puede ocasionar retardos notables al usar la aplicación. Con Linaria ahora vemos una nueva clase de marcos de trabajo que fueron creados con este problema en mente. Linaria utiliza una serie de técnicas para mover la mayor parte de la carga sobre el rendimiento al tiempo de construcción. Desafortunadamente, esto trae consigo algunas dificultades, especialmente la falta de soporte para los estilos dinámicos en IE11.
CSS in JS is a technique of writing CSS styling in the JavaScript programming language. This encourages a common pattern of writing the styling with the JavaScript component it applies to, co-locating presentational and logical concerns. The new players — including JSS, emotion and styled-components — rely on the tooling to translate the CSS-in-JS code to separate CSS stylesheets, to make them suitable for browser consumption. This is the second-generation approach to writing CSS in JavaScript and unlike the previous approaches doesn’t rely on in-line styles. That means it provides the benefit of supporting all CSS features, sharing of CSS using the npm ecosystem and utilization of components across multiple platforms. Our teams have found styled-components working well with component-based frameworks, such as React, and unit testing of CSS with jest-styled-components. This space is new and rapidly changing; the approach requires some effort for manual debugging of the generated class names in the browser, and it may not apply to some projects where the front-end architecture does not support reusing components and requires global styling.