Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CSS-in-JS. Estilos en React con styled-components

CSS-in-JS. Estilos en React con styled-components

Conoceremos el panorama actual de CSS y los mal usos del lenguaje, para ponernos en situación y ver las ventajas que nos va a ofrecer CSS-in-JS en nuestros desarrollos con React.

Como una de las soluciones más populares a los ‘problemas’ actuales con CSS vamos a utilizar styled-components. Una propuesta que nos va a permitir desarrollar componentes estilizados preparados para ser utilizados en nuestro proyecto, ayudándonos a dar solución a los problemas ocasionados por la cascada, especificidad y declaraciones de nombres mejorando también nuestro performance CSS.

Existe un gran debate entre personas muy opuestas a utilizar CSS-in-JS, en parte es debido a que no se llega a conocer en profundidad las soluciones que nos ofrecen. Con styled-components podemos utilizar cualquier característica que nos proporciona CSS vanilla. Veremos cómo definir componentes estilizados, estilos condicionales, estilos globales, animaciones, theming y estilizar componentes de terceros.

Juan Carlos Ruiz

November 09, 2019
Tweet

More Decks by Juan Carlos Ruiz

Other Decks in Programming

Transcript

  1. CSS

  2. 4.800 RULES 6.574 SELECTORS 11.789 DECLARATIONS 249 PROPERTIES Total selectors

    by type 422 ID 6.177 CLASS 865 PSEUDO CLASS 688 PSEUDO ELEMENT — CSS Stats — 462KB 78KB Gzipped file size File size 75,10% Unused CSS average (%)
  3. 4.800 RULES 6.574 SELECTORS 11.789 DECLARATIONS 249 PROPERTIES Total selectors

    by type 422 ID 6.177 CLASS 865 PSEUDO CLASS 688 PSEUDO ELEMENT — CSS Stats — 462KB 78KB Gzipped file size File size 75,10% Unused CSS average (%)
  4. 4.800 RULES 6.574 SELECTORS 11.789 DECLARATIONS 249 PROPERTIES Total selectors

    by type 422 ID 6.177 CLASS 865 PSEUDO CLASS 688 PSEUDO ELEMENT — CSS Stats — 462KB 78KB Gzipped file size File size 75,10% Unused CSS average (%)
  5. — CSS Stats — 32 #id #id .class #id .class

    #id .class.class element #id #id #id #id #id #id 264 176 88 352
  6. — CSS Stats — 32 #id .class #id element .class.class

    #id .class element .class { … } 264 176 88 352
  7. — Arquitecturas — ITCSS - Inverted Triangle CSS Settings Tools

    Generic Elements Objects Components Utilities ITCSS
  8. { CSS in JS } - Enfoque a componentes -

    Estilos aislados - Toda la potencia de JS
  9. Vue

  10. Escribes y soporta todo el CSS CSS global Estilos aislados

    Vendor prefixing — styled-components —
  11. Escribes y soporta todo el CSS CSS global Estilos aislados

    Vendor prefixing Critical CSS automático — styled-components —
  12. Escribes y soporta todo el CSS CSS global Estilos aislados

    Vendor prefixing Critical CSS automático Server side rendering — styled-components —
  13. Escribes y soporta todo el CSS CSS global Estilos aislados

    Vendor prefixing Critical CSS automático Server side rendering Plug-and-Play! — styled-components —
  14. — styled-components — Escribes y soporta todo el CSS CSS

    global Estilos aislados Vendor prefixing Critical CSS automático Server side rendering Plug-and-Play!
  15. 4.800 RULES 6.574 SELECTORS 11.789 DECLARATIONS 249 PROPERTIES Total selectors

    by type 422 ID 6.177 CLASS 865 PSEUDO CLASS 688 PSEUDO ELEMENT — CSS Stats — 462KB 78KB Gzipped file size File size 75,10% Unused CSS average (%) lego.com (web antigua)
  16. lego.com (actual con styled-components) — CSS Stats — 827 RULES

    911 SELECTORS 3.917 DECLARATIONS 152 PROPERTIES Total selectors by type 0 ID 731 CLASS 113 PSEUDO CLASS 10 PSEUDO ELEMENT 96KB 15KB Gzipped file size File size ~ 0% Unused CSS average (%)
  17. — CSS Stats — 827 RULES 911 SELECTORS Total selectors

    by type 0 ID 731 CLASS 15KB ~ 0% Unused CSS average (%) Gzipped file size 4.800 RULES 6.574 SELECTORS Total selectors by type 422 ID 6.177 CLASS 78KB 75,10% Unused CSS average (%) Gzipped file size lego.com (actual con styled-components)
  18. — CSS Stats — 32 24 16 8 32 lego.com

    (actual con styled-components)
  19. styled-components v5.0 vs v4.0 31% reducción del bundle (16.2kB vs.

    12.33kB min+gzip) ⚡ 22% rapidez de client-side rendering 26% rapidez de actualización de estilos dinámicos 45% (!!!) rapidez de server-side rendering