SlideShare ist ein Scribd-Unternehmen logo
1 von 30
Downloaden Sie, um offline zu lesen
CSS in JS
Escrevendo CSS no JavaScript
2
Dan Vitoriano
Engenheiro de Software, PagSeguro
dnvtrn
AGENDA
▹ O que é CSS in JS?
■ Como surgiu
▹ Por que usar?
▹ Como funciona?
■ Inline CSS
▹ Bibliotecas
■ JSS
■ Glamor
■ Styled-Components
▹ Referências
3
Esqueça os conceitos
front-end de separar
HTML, CSS e JS
Abra sua mente!
4
Primeiro passo:
O que é CSS in JS
“CSS in JS consiste em
abstrair o CSS para o
nível do componente em
si e não ao nível do
documento, usando
JavaScript para
descrever estilos de
uma maneira
declarativa e escalável.
6
“
TL;DR
▹ Escrever CSS dentro do .js
▹ Cada componente com seu CSS
▹ Usar estilos inline
▹ CSS agora são variáveis
7
Como surgiu?
▹ Em 2014
▹ Nos laboratórios do Facebook
▹ Tornou-se público depois desta talk do
@vjeux, engenheiro do FB
8
Por que usar?
Segundo @vjeux
Resolver problemas como:
Escalar CSS
▹ Escopo global
▹ Dependências
▹ Eliminar código não utilizado
▹ Minificação
▹ Compartilhar constantes
10
Como funciona?
Estilizando botões com CSS
12
/* button.css */
.button {
background: #f6f7f8;
border: 1px solid #cdced0;
border-radius: 2px;
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
}
.button-depressed {
border-color: #c6c7ca;
color: #5890ff;
}
Estilizando botões com JS
13
/* button.js */
var styles = {
container: {
background: '#f6f7f8',
border: '1px solid #cdced0',
borderRadius: 2,
boxShadow: '0 1px 1px rgba(0, 0, 0, 0.05)'
},
depressed: {
borderColor: '#c6c7ca',
color: '#5890ff'
}
}
cssinjs.org
Diferenças de sintaxe
15
/* button.js */
var styles = {
container: {
background: '#f6f7f8',
border: '1px solid #cdced0',
borderRadius: 2,
boxShadow: '0 1px 1px rgba(0, 0, 0, 0.05)'
}
}
CSS in JS:
● Strings
● Vírgulas
● camelCase
● Numbers
Como converter CSS para JSS
staxmanade.com/CssToReact
16
“
E como aplicar?
17
18
/* button.js */
var styles = {
container: {
background: '#f6f7f8',
border: '1px solid #cdced0',
borderRadius: 2,
boxShadow: '0 1px 1px rgba(0, 0, 0, 0.05)'
},
depressed: {
borderColor: '#c6c7ca',
color: '#5890ff'
}
}
/* button.js */
<div style={styles.container}>
CSS Inline!!!
Bibliotecas
As mais populares libs
▹ JSS
▹ Glamor
▹ Radium
▹ Aphrodite
▹ Emotion
▹ Glamorous
▹ Glamor
▹ Glam
▹ Fela
▹ Styletron
▹ React-CSS-Modules
▹ Babel-Plugin-CSS-in-JS
▹ JSXStyle
▹ Styled-Components
20
Nossos exemplos
▹ JSS
▹ Glamor
▹ Radium
▹ Aphrodite
▹ Emotion
▹ Glamorous
▹ Glamor
▹ Glam
▹ Fela
▹ Styletron
▹ React-CSS-Modules
▹ Babel-Plugin-CSS-in-JS
▹ JSXStyle
▹ Styled-Components
21
JSS
23
const styles = {
wrapper: {
padding: 40,
background: '#f7df1e',
textAlign: 'center'
},
title: {
font: {
size: 40,
weight: 900
},
color: '#24292e'
},
link: {
color: '#24292e',
'&:hover': {
opacity: 0.5
}
}
}
Ver código completo
no CodeSandBox:
https://codesandbox.io/s/z21lpmvv33
Repositório:
cssinjs.org
Glamor
25
const styles = {
container: css({
background: Globals.colors.white,
alignItems: 'center',
'@media(max-width: 720px)': {
alignSelf: 'auto',
},
}),
paragraphAfterParty: css({
textAlign: 'center',
':first-letter': {
textTransform: 'uppercase',
},
}),
card: css({
width: 250,
'@media(min-width: 721px)': {
height: 100,
},
backgroundColor: Globals.colors.white,
'> a > img': {
display: 'block',
},
})
};
Ver código completo
no Github:
github.com/frontinsampa/site2018
github.com/react-brasil/conf
Repositório:
github.com/threepointone/glamor
Styled-components
“
Principal committer styled-components:
Max Stoiber
@mxstbr
27
28
const Button = styled.a`
display: inline-block;
border-radius: 3px;
padding: 0.5rem 0;
margin: 0.5rem 1rem;
width: 11rem;
${props => props.primary && css`
background: white;
color: palevioletred;
`}
`
render(
<div>
<Button
href="https://github.com/styled-components/styled-components"
primary
>
GitHub
</Button>
</div>
)
Ver código completo
no CodeSandBox:
codesandbox.io/s/rkmNRByE4
Repositório:
github.com/styled-components/styled-components
Referências ▹ https://cssinjs.org/performance/?v=v10.0.0-alpha.10
▹ https://speakerdeck.com/vjeux/react-css-in-js
▹ https://blog.bitsrc.io/9-css-in-js-libraries-you-should-know-in-2018-25afb4025b9b
▹ https://staxmanade.com/CssToReact/
▹ https://hackernoon.com/all-you-need-to-know-about-css-in-js-984a72d48ebc
▹ https://medium.com/@oleg008/jss-is-css-d7d41400b635
▹ https://cssinjs.org/performance/?v=v10.0.0-alpha.10
▹ https://cssinjs.org/from-sass-to-cssinjs
▹ https://github.com/mxstbr
▹ https://www.styled-components.com/
▹ https://docs.google.com/presentation/d/1uACCYWjAjkLBNU4m3qyCuts32uiWR6UsooaNY
aQYVsg/edit?usp=sharing
▹ https://www.npmjs.com/package/react-styled-shadow-dom
29
Dúvidas?
twitter.com/dnvtrn
medium.com/@dnvtrn
github.com/danvitoriano
github.com/react-brasil
30

Weitere ähnliche Inhalte

Was ist angesagt?

Kubernetes dealing with storage and persistence
Kubernetes  dealing with storage and persistenceKubernetes  dealing with storage and persistence
Kubernetes dealing with storage and persistenceJanakiram MSV
 
Chapter 02: Introduction to compute virtualization
Chapter 02: Introduction to compute virtualizationChapter 02: Introduction to compute virtualization
Chapter 02: Introduction to compute virtualizationSsendiSamuel
 
Power vc for powervm deep dive tips &amp; tricks
Power vc for powervm deep dive tips &amp; tricksPower vc for powervm deep dive tips &amp; tricks
Power vc for powervm deep dive tips &amp; trickssolarisyougood
 
Kubernetes Application Deployment with Helm - A beginner Guide!
Kubernetes Application Deployment with Helm - A beginner Guide!Kubernetes Application Deployment with Helm - A beginner Guide!
Kubernetes Application Deployment with Helm - A beginner Guide!Krishna-Kumar
 
The battle of jutland
The battle of jutlandThe battle of jutland
The battle of jutlandShafiq Ridz
 
U boot porting guide for SoC
U boot porting guide for SoCU boot porting guide for SoC
U boot porting guide for SoCMacpaul Lin
 
Decompressed vmlinux: linux kernel initialization from page table configurati...
Decompressed vmlinux: linux kernel initialization from page table configurati...Decompressed vmlinux: linux kernel initialization from page table configurati...
Decompressed vmlinux: linux kernel initialization from page table configurati...Adrian Huang
 
Implementation &amp; Comparison Of Rdma Over Ethernet
Implementation &amp; Comparison Of Rdma Over EthernetImplementation &amp; Comparison Of Rdma Over Ethernet
Implementation &amp; Comparison Of Rdma Over EthernetJames Wernicke
 
Kernel_Crash_Dump_Analysis
Kernel_Crash_Dump_AnalysisKernel_Crash_Dump_Analysis
Kernel_Crash_Dump_AnalysisBuland Singh
 
Introduction to RCU
Introduction to RCUIntroduction to RCU
Introduction to RCUKernel TLV
 
Docker introduction
Docker introductionDocker introduction
Docker introductionGourav Varma
 
qemu + gdb: The efficient way to understand/debug Linux kernel code/data stru...
qemu + gdb: The efficient way to understand/debug Linux kernel code/data stru...qemu + gdb: The efficient way to understand/debug Linux kernel code/data stru...
qemu + gdb: The efficient way to understand/debug Linux kernel code/data stru...Adrian Huang
 
DTW18 - code08 - Everything You Need To Know About Storage with Kubernetes
DTW18 - code08 - Everything You Need To Know About Storage with KubernetesDTW18 - code08 - Everything You Need To Know About Storage with Kubernetes
DTW18 - code08 - Everything You Need To Know About Storage with KubernetesKendrick Coleman
 
강좌 01 ARM 프로세서 개요
강좌 01 ARM 프로세서 개요강좌 01 ARM 프로세서 개요
강좌 01 ARM 프로세서 개요chcbaram
 
Kubernetes #4 volume &amp; stateful set
Kubernetes #4   volume &amp; stateful setKubernetes #4   volume &amp; stateful set
Kubernetes #4 volume &amp; stateful setTerry Cho
 
eBPF Trace from Kernel to Userspace
eBPF Trace from Kernel to UserspaceeBPF Trace from Kernel to Userspace
eBPF Trace from Kernel to UserspaceSUSE Labs Taipei
 

Was ist angesagt? (20)

Kubernetes dealing with storage and persistence
Kubernetes  dealing with storage and persistenceKubernetes  dealing with storage and persistence
Kubernetes dealing with storage and persistence
 
Chapter 02: Introduction to compute virtualization
Chapter 02: Introduction to compute virtualizationChapter 02: Introduction to compute virtualization
Chapter 02: Introduction to compute virtualization
 
Power vc for powervm deep dive tips &amp; tricks
Power vc for powervm deep dive tips &amp; tricksPower vc for powervm deep dive tips &amp; tricks
Power vc for powervm deep dive tips &amp; tricks
 
Kubernetes Application Deployment with Helm - A beginner Guide!
Kubernetes Application Deployment with Helm - A beginner Guide!Kubernetes Application Deployment with Helm - A beginner Guide!
Kubernetes Application Deployment with Helm - A beginner Guide!
 
Wireguard VPN
Wireguard VPNWireguard VPN
Wireguard VPN
 
The battle of jutland
The battle of jutlandThe battle of jutland
The battle of jutland
 
U boot porting guide for SoC
U boot porting guide for SoCU boot porting guide for SoC
U boot porting guide for SoC
 
Decompressed vmlinux: linux kernel initialization from page table configurati...
Decompressed vmlinux: linux kernel initialization from page table configurati...Decompressed vmlinux: linux kernel initialization from page table configurati...
Decompressed vmlinux: linux kernel initialization from page table configurati...
 
Implementation &amp; Comparison Of Rdma Over Ethernet
Implementation &amp; Comparison Of Rdma Over EthernetImplementation &amp; Comparison Of Rdma Over Ethernet
Implementation &amp; Comparison Of Rdma Over Ethernet
 
Kernel_Crash_Dump_Analysis
Kernel_Crash_Dump_AnalysisKernel_Crash_Dump_Analysis
Kernel_Crash_Dump_Analysis
 
Introduction to RCU
Introduction to RCUIntroduction to RCU
Introduction to RCU
 
Docker introduction
Docker introductionDocker introduction
Docker introduction
 
qemu + gdb: The efficient way to understand/debug Linux kernel code/data stru...
qemu + gdb: The efficient way to understand/debug Linux kernel code/data stru...qemu + gdb: The efficient way to understand/debug Linux kernel code/data stru...
qemu + gdb: The efficient way to understand/debug Linux kernel code/data stru...
 
eBPF Basics
eBPF BasicseBPF Basics
eBPF Basics
 
DTW18 - code08 - Everything You Need To Know About Storage with Kubernetes
DTW18 - code08 - Everything You Need To Know About Storage with KubernetesDTW18 - code08 - Everything You Need To Know About Storage with Kubernetes
DTW18 - code08 - Everything You Need To Know About Storage with Kubernetes
 
강좌 01 ARM 프로세서 개요
강좌 01 ARM 프로세서 개요강좌 01 ARM 프로세서 개요
강좌 01 ARM 프로세서 개요
 
NFV and OpenStack
NFV and OpenStackNFV and OpenStack
NFV and OpenStack
 
Kubernetes #4 volume &amp; stateful set
Kubernetes #4   volume &amp; stateful setKubernetes #4   volume &amp; stateful set
Kubernetes #4 volume &amp; stateful set
 
Init of Android
Init of AndroidInit of Android
Init of Android
 
eBPF Trace from Kernel to Userspace
eBPF Trace from Kernel to UserspaceeBPF Trace from Kernel to Userspace
eBPF Trace from Kernel to Userspace
 

Ähnlich wie CSS in JS - Escrevendo CSS no JavaScript - Dan Vitoriano

Unb 2012.1 - dweb - c - técnicas
Unb   2012.1 - dweb - c - técnicasUnb   2012.1 - dweb - c - técnicas
Unb 2012.1 - dweb - c - técnicasClaudenio Alberto
 
CSS - Cansei de Ser Subestimado
CSS - Cansei de Ser SubestimadoCSS - Cansei de Ser Subestimado
CSS - Cansei de Ser SubestimadoAnyssa Ferreira
 
CSS No Webdesign - Aula 06 - Webdesign - 2020-01
CSS No Webdesign - Aula 06 - Webdesign - 2020-01CSS No Webdesign - Aula 06 - Webdesign - 2020-01
CSS No Webdesign - Aula 06 - Webdesign - 2020-01Renato Melo
 
Um guia bem básico de Bootstrap + Less
Um guia bem básico de Bootstrap + LessUm guia bem básico de Bootstrap + Less
Um guia bem básico de Bootstrap + LessBruno Said
 
Introdução ao CSS - Desenvolvimento web
Introdução ao CSS - Desenvolvimento webIntrodução ao CSS - Desenvolvimento web
Introdução ao CSS - Desenvolvimento webCarlos Eduardo Kadu
 
CSS Básico - Webdesign - 2021-01
CSS Básico - Webdesign - 2021-01CSS Básico - Webdesign - 2021-01
CSS Básico - Webdesign - 2021-01Renato Melo
 
Oficina de Planejamento Corte: Seu layout virando código - 15 EDTED
Oficina de Planejamento Corte: Seu layout virando código  - 15 EDTEDOficina de Planejamento Corte: Seu layout virando código  - 15 EDTED
Oficina de Planejamento Corte: Seu layout virando código - 15 EDTEDBunee.io - Hiring with Intelligence
 
Design Responsivo com Sass
Design Responsivo com SassDesign Responsivo com Sass
Design Responsivo com SassVitor Garcia
 
Básico em (X)HTML e CSS
Básico em (X)HTML e CSSBásico em (X)HTML e CSS
Básico em (X)HTML e CSSKako Botasso
 
Speed up! Critical css to the rescue
Speed up! Critical css to the rescueSpeed up! Critical css to the rescue
Speed up! Critical css to the rescuemelidevelopers
 
Conheça o Sass, mehor amigo do seu CSS - Nayara Felix
Conheça o Sass, mehor amigo do seu CSS - Nayara FelixConheça o Sass, mehor amigo do seu CSS - Nayara Felix
Conheça o Sass, mehor amigo do seu CSS - Nayara FelixNayara Felix
 
Introdução ao Asp.Net Mvc
Introdução ao Asp.Net MvcIntrodução ao Asp.Net Mvc
Introdução ao Asp.Net MvcGiovanni Bassi
 
Aprender CSS (UFCD0154) v2
Aprender CSS (UFCD0154) v2Aprender CSS (UFCD0154) v2
Aprender CSS (UFCD0154) v2Afonso Gomes
 

Ähnlich wie CSS in JS - Escrevendo CSS no JavaScript - Dan Vitoriano (20)

Unb 2012.1 - dweb - c - técnicas
Unb   2012.1 - dweb - c - técnicasUnb   2012.1 - dweb - c - técnicas
Unb 2012.1 - dweb - c - técnicas
 
Arquitetura CSS
Arquitetura CSSArquitetura CSS
Arquitetura CSS
 
CSS - Cansei de Ser Subestimado
CSS - Cansei de Ser SubestimadoCSS - Cansei de Ser Subestimado
CSS - Cansei de Ser Subestimado
 
CSS Modules
CSS ModulesCSS Modules
CSS Modules
 
CSS No Webdesign - Aula 06 - Webdesign - 2020-01
CSS No Webdesign - Aula 06 - Webdesign - 2020-01CSS No Webdesign - Aula 06 - Webdesign - 2020-01
CSS No Webdesign - Aula 06 - Webdesign - 2020-01
 
Um guia bem básico de Bootstrap + Less
Um guia bem básico de Bootstrap + LessUm guia bem básico de Bootstrap + Less
Um guia bem básico de Bootstrap + Less
 
CSS
CSSCSS
CSS
 
Curso de Desenvolvimento Web - Módulo 02 - CSS
Curso de Desenvolvimento Web - Módulo 02 - CSSCurso de Desenvolvimento Web - Módulo 02 - CSS
Curso de Desenvolvimento Web - Módulo 02 - CSS
 
Psd to html
Psd to htmlPsd to html
Psd to html
 
Introdução ao CSS - Desenvolvimento web
Introdução ao CSS - Desenvolvimento webIntrodução ao CSS - Desenvolvimento web
Introdução ao CSS - Desenvolvimento web
 
CSS Básico - Webdesign - 2021-01
CSS Básico - Webdesign - 2021-01CSS Básico - Webdesign - 2021-01
CSS Básico - Webdesign - 2021-01
 
Pre vs Pos
Pre vs PosPre vs Pos
Pre vs Pos
 
Oficina de Planejamento Corte: Seu layout virando código - 15 EDTED
Oficina de Planejamento Corte: Seu layout virando código  - 15 EDTEDOficina de Planejamento Corte: Seu layout virando código  - 15 EDTED
Oficina de Planejamento Corte: Seu layout virando código - 15 EDTED
 
Design Responsivo com Sass
Design Responsivo com SassDesign Responsivo com Sass
Design Responsivo com Sass
 
Básico em (X)HTML e CSS
Básico em (X)HTML e CSSBásico em (X)HTML e CSS
Básico em (X)HTML e CSS
 
Speed up! Critical css to the rescue
Speed up! Critical css to the rescueSpeed up! Critical css to the rescue
Speed up! Critical css to the rescue
 
Css tutorial
Css tutorialCss tutorial
Css tutorial
 
Conheça o Sass, mehor amigo do seu CSS - Nayara Felix
Conheça o Sass, mehor amigo do seu CSS - Nayara FelixConheça o Sass, mehor amigo do seu CSS - Nayara Felix
Conheça o Sass, mehor amigo do seu CSS - Nayara Felix
 
Introdução ao Asp.Net Mvc
Introdução ao Asp.Net MvcIntrodução ao Asp.Net Mvc
Introdução ao Asp.Net Mvc
 
Aprender CSS (UFCD0154) v2
Aprender CSS (UFCD0154) v2Aprender CSS (UFCD0154) v2
Aprender CSS (UFCD0154) v2
 

Mehr von Dan Vitoriano

Workshop React Hooks
Workshop React HooksWorkshop React Hooks
Workshop React HooksDan Vitoriano
 
AMP Roadshow SP 2019 - Web Apps Modernas
AMP Roadshow SP 2019 - Web Apps ModernasAMP Roadshow SP 2019 - Web Apps Modernas
AMP Roadshow SP 2019 - Web Apps ModernasDan Vitoriano
 
Times digitais de alta performance - Tera e Endeavor
Times digitais de alta performance - Tera e EndeavorTimes digitais de alta performance - Tera e Endeavor
Times digitais de alta performance - Tera e EndeavorDan Vitoriano
 
GraphQL - A Graph Query Language to your API
GraphQL - A Graph Query Language to your APIGraphQL - A Graph Query Language to your API
GraphQL - A Graph Query Language to your APIDan Vitoriano
 
Mobile First e Offline First
Mobile First e Offline FirstMobile First e Offline First
Mobile First e Offline FirstDan Vitoriano
 
Meetup Processos de Desenvolvimento São Paulo - Gamestorming
Meetup Processos de Desenvolvimento São Paulo - GamestormingMeetup Processos de Desenvolvimento São Paulo - Gamestorming
Meetup Processos de Desenvolvimento São Paulo - GamestormingDan Vitoriano
 
Unit Test JavaScript
Unit Test JavaScriptUnit Test JavaScript
Unit Test JavaScriptDan Vitoriano
 
Untraceable electronic mail, return addresses and digital pseudonyms - David ...
Untraceable electronic mail, return addresses and digital pseudonyms - David ...Untraceable electronic mail, return addresses and digital pseudonyms - David ...
Untraceable electronic mail, return addresses and digital pseudonyms - David ...Dan Vitoriano
 
The computer for the 21st century - Mark Weiser, 1991
The computer for the 21st century - Mark Weiser, 1991The computer for the 21st century - Mark Weiser, 1991
The computer for the 21st century - Mark Weiser, 1991Dan Vitoriano
 
Especificações UX/UI CMA Tablet
Especificações UX/UI CMA TabletEspecificações UX/UI CMA Tablet
Especificações UX/UI CMA TabletDan Vitoriano
 
User experience guidelines for Universal Windows Platform (UWP) appsUwp app d...
User experience guidelines for Universal Windows Platform (UWP) appsUwp app d...User experience guidelines for Universal Windows Platform (UWP) appsUwp app d...
User experience guidelines for Universal Windows Platform (UWP) appsUwp app d...Dan Vitoriano
 
Fullcircle papers - Sobre Blogs
Fullcircle papers - Sobre BlogsFullcircle papers - Sobre Blogs
Fullcircle papers - Sobre BlogsDan Vitoriano
 
Apresentação FEMUG-ABC
Apresentação FEMUG-ABCApresentação FEMUG-ABC
Apresentação FEMUG-ABCDan Vitoriano
 
Planejamento estratégico de comunicação digital - Dados sobre internet e mobi...
Planejamento estratégico de comunicação digital - Dados sobre internet e mobi...Planejamento estratégico de comunicação digital - Dados sobre internet e mobi...
Planejamento estratégico de comunicação digital - Dados sobre internet e mobi...Dan Vitoriano
 
Google Material Design - Conceito, aplicações, código e web components
Google Material Design - Conceito, aplicações, código e web componentsGoogle Material Design - Conceito, aplicações, código e web components
Google Material Design - Conceito, aplicações, código e web componentsDan Vitoriano
 

Mehr von Dan Vitoriano (20)

Node.js e Express
Node.js e ExpressNode.js e Express
Node.js e Express
 
Workshop React Hooks
Workshop React HooksWorkshop React Hooks
Workshop React Hooks
 
AMP Roadshow SP 2019 - Web Apps Modernas
AMP Roadshow SP 2019 - Web Apps ModernasAMP Roadshow SP 2019 - Web Apps Modernas
AMP Roadshow SP 2019 - Web Apps Modernas
 
JavaScript das Ruas
JavaScript das RuasJavaScript das Ruas
JavaScript das Ruas
 
Times digitais de alta performance - Tera e Endeavor
Times digitais de alta performance - Tera e EndeavorTimes digitais de alta performance - Tera e Endeavor
Times digitais de alta performance - Tera e Endeavor
 
GraphQL - A Graph Query Language to your API
GraphQL - A Graph Query Language to your APIGraphQL - A Graph Query Language to your API
GraphQL - A Graph Query Language to your API
 
Mobile First e Offline First
Mobile First e Offline FirstMobile First e Offline First
Mobile First e Offline First
 
React Native
React NativeReact Native
React Native
 
Pdsp #3
Pdsp #3Pdsp #3
Pdsp #3
 
Pdsp #2
Pdsp #2Pdsp #2
Pdsp #2
 
Meetup Processos de Desenvolvimento São Paulo - Gamestorming
Meetup Processos de Desenvolvimento São Paulo - GamestormingMeetup Processos de Desenvolvimento São Paulo - Gamestorming
Meetup Processos de Desenvolvimento São Paulo - Gamestorming
 
Unit Test JavaScript
Unit Test JavaScriptUnit Test JavaScript
Unit Test JavaScript
 
Untraceable electronic mail, return addresses and digital pseudonyms - David ...
Untraceable electronic mail, return addresses and digital pseudonyms - David ...Untraceable electronic mail, return addresses and digital pseudonyms - David ...
Untraceable electronic mail, return addresses and digital pseudonyms - David ...
 
The computer for the 21st century - Mark Weiser, 1991
The computer for the 21st century - Mark Weiser, 1991The computer for the 21st century - Mark Weiser, 1991
The computer for the 21st century - Mark Weiser, 1991
 
Especificações UX/UI CMA Tablet
Especificações UX/UI CMA TabletEspecificações UX/UI CMA Tablet
Especificações UX/UI CMA Tablet
 
User experience guidelines for Universal Windows Platform (UWP) appsUwp app d...
User experience guidelines for Universal Windows Platform (UWP) appsUwp app d...User experience guidelines for Universal Windows Platform (UWP) appsUwp app d...
User experience guidelines for Universal Windows Platform (UWP) appsUwp app d...
 
Fullcircle papers - Sobre Blogs
Fullcircle papers - Sobre BlogsFullcircle papers - Sobre Blogs
Fullcircle papers - Sobre Blogs
 
Apresentação FEMUG-ABC
Apresentação FEMUG-ABCApresentação FEMUG-ABC
Apresentação FEMUG-ABC
 
Planejamento estratégico de comunicação digital - Dados sobre internet e mobi...
Planejamento estratégico de comunicação digital - Dados sobre internet e mobi...Planejamento estratégico de comunicação digital - Dados sobre internet e mobi...
Planejamento estratégico de comunicação digital - Dados sobre internet e mobi...
 
Google Material Design - Conceito, aplicações, código e web components
Google Material Design - Conceito, aplicações, código e web componentsGoogle Material Design - Conceito, aplicações, código e web components
Google Material Design - Conceito, aplicações, código e web components
 

CSS in JS - Escrevendo CSS no JavaScript - Dan Vitoriano

  • 1. CSS in JS Escrevendo CSS no JavaScript
  • 2. 2 Dan Vitoriano Engenheiro de Software, PagSeguro dnvtrn
  • 3. AGENDA ▹ O que é CSS in JS? ■ Como surgiu ▹ Por que usar? ▹ Como funciona? ■ Inline CSS ▹ Bibliotecas ■ JSS ■ Glamor ■ Styled-Components ▹ Referências 3
  • 4. Esqueça os conceitos front-end de separar HTML, CSS e JS Abra sua mente! 4 Primeiro passo:
  • 5. O que é CSS in JS
  • 6. “CSS in JS consiste em abstrair o CSS para o nível do componente em si e não ao nível do documento, usando JavaScript para descrever estilos de uma maneira declarativa e escalável. 6
  • 7. “ TL;DR ▹ Escrever CSS dentro do .js ▹ Cada componente com seu CSS ▹ Usar estilos inline ▹ CSS agora são variáveis 7
  • 8. Como surgiu? ▹ Em 2014 ▹ Nos laboratórios do Facebook ▹ Tornou-se público depois desta talk do @vjeux, engenheiro do FB 8
  • 10. Resolver problemas como: Escalar CSS ▹ Escopo global ▹ Dependências ▹ Eliminar código não utilizado ▹ Minificação ▹ Compartilhar constantes 10
  • 12. Estilizando botões com CSS 12 /* button.css */ .button { background: #f6f7f8; border: 1px solid #cdced0; border-radius: 2px; box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); } .button-depressed { border-color: #c6c7ca; color: #5890ff; }
  • 13. Estilizando botões com JS 13 /* button.js */ var styles = { container: { background: '#f6f7f8', border: '1px solid #cdced0', borderRadius: 2, boxShadow: '0 1px 1px rgba(0, 0, 0, 0.05)' }, depressed: { borderColor: '#c6c7ca', color: '#5890ff' } }
  • 15. Diferenças de sintaxe 15 /* button.js */ var styles = { container: { background: '#f6f7f8', border: '1px solid #cdced0', borderRadius: 2, boxShadow: '0 1px 1px rgba(0, 0, 0, 0.05)' } } CSS in JS: ● Strings ● Vírgulas ● camelCase ● Numbers
  • 16. Como converter CSS para JSS staxmanade.com/CssToReact 16
  • 18. 18 /* button.js */ var styles = { container: { background: '#f6f7f8', border: '1px solid #cdced0', borderRadius: 2, boxShadow: '0 1px 1px rgba(0, 0, 0, 0.05)' }, depressed: { borderColor: '#c6c7ca', color: '#5890ff' } } /* button.js */ <div style={styles.container}> CSS Inline!!!
  • 20. As mais populares libs ▹ JSS ▹ Glamor ▹ Radium ▹ Aphrodite ▹ Emotion ▹ Glamorous ▹ Glamor ▹ Glam ▹ Fela ▹ Styletron ▹ React-CSS-Modules ▹ Babel-Plugin-CSS-in-JS ▹ JSXStyle ▹ Styled-Components 20
  • 21. Nossos exemplos ▹ JSS ▹ Glamor ▹ Radium ▹ Aphrodite ▹ Emotion ▹ Glamorous ▹ Glamor ▹ Glam ▹ Fela ▹ Styletron ▹ React-CSS-Modules ▹ Babel-Plugin-CSS-in-JS ▹ JSXStyle ▹ Styled-Components 21
  • 22. JSS
  • 23. 23 const styles = { wrapper: { padding: 40, background: '#f7df1e', textAlign: 'center' }, title: { font: { size: 40, weight: 900 }, color: '#24292e' }, link: { color: '#24292e', '&:hover': { opacity: 0.5 } } } Ver código completo no CodeSandBox: https://codesandbox.io/s/z21lpmvv33 Repositório: cssinjs.org
  • 25. 25 const styles = { container: css({ background: Globals.colors.white, alignItems: 'center', '@media(max-width: 720px)': { alignSelf: 'auto', }, }), paragraphAfterParty: css({ textAlign: 'center', ':first-letter': { textTransform: 'uppercase', }, }), card: css({ width: 250, '@media(min-width: 721px)': { height: 100, }, backgroundColor: Globals.colors.white, '> a > img': { display: 'block', }, }) }; Ver código completo no Github: github.com/frontinsampa/site2018 github.com/react-brasil/conf Repositório: github.com/threepointone/glamor
  • 28. 28 const Button = styled.a` display: inline-block; border-radius: 3px; padding: 0.5rem 0; margin: 0.5rem 1rem; width: 11rem; ${props => props.primary && css` background: white; color: palevioletred; `} ` render( <div> <Button href="https://github.com/styled-components/styled-components" primary > GitHub </Button> </div> ) Ver código completo no CodeSandBox: codesandbox.io/s/rkmNRByE4 Repositório: github.com/styled-components/styled-components
  • 29. Referências ▹ https://cssinjs.org/performance/?v=v10.0.0-alpha.10 ▹ https://speakerdeck.com/vjeux/react-css-in-js ▹ https://blog.bitsrc.io/9-css-in-js-libraries-you-should-know-in-2018-25afb4025b9b ▹ https://staxmanade.com/CssToReact/ ▹ https://hackernoon.com/all-you-need-to-know-about-css-in-js-984a72d48ebc ▹ https://medium.com/@oleg008/jss-is-css-d7d41400b635 ▹ https://cssinjs.org/performance/?v=v10.0.0-alpha.10 ▹ https://cssinjs.org/from-sass-to-cssinjs ▹ https://github.com/mxstbr ▹ https://www.styled-components.com/ ▹ https://docs.google.com/presentation/d/1uACCYWjAjkLBNU4m3qyCuts32uiWR6UsooaNY aQYVsg/edit?usp=sharing ▹ https://www.npmjs.com/package/react-styled-shadow-dom 29