SlideShare a Scribd company logo
Komponenty v kaskádě
Reactisti - Praha, Prosinec 2015
Filip Mareš
Principal Software Engineer
Monster Worldwide
@etylsarin
Komponenty kam se
podíváš
„UI by se měly skládat z opětovně
použitelných komponent s dobře
definovaným rozhraním“
WTF?!
CSS a komponenty
Christopher “vjeux” Chedeau
React: CSS in JS
7 „problémů“ CSS
• Všechno je v globálním namespace
• Závislosti
• Eliminace mrtvého kódu
• Minifikace
• Sdílení konstant
• Umístění ve stylopisu hraje roli
• Izolace
CSS v JS
In-line styly FTW!
CSS v Reactu
Cascading Style
Sheets
• Selektor ≠ proměnná
• CSS vzniklo v době
webových stránek
a dokumentů
7 „problémů“ CSS
• Všechno je v globálním namespace
• Závislosti
• Eliminace mrtvého kódu
• Minifikace
• Sdílení konstant
• Umístění ve stylopisu hraje roli
• Izolace
Nevýhody CSS v JS
• Globální styly
• Použití stávajících knihoven
• Styly pro různé prohlížeče / uživatele
• Svázání konkrétního vzhledu s
komponentou
• Svázání konkrétní technologie s
komponentou
Nevýhody in-line CSS
• (Ne)ukládání do mezipaměti
• Velikost HTML hraje roli
• :hover/:focus/:active
• Media queries (@ pravidla)
• CSS Animace
• Stylování pro různé prohlížeče
• DevTools / SourceMaps
CSS v Reactu
css-loader
loader: ‘css-loader?modules’
Disciplína FTW!
Ideální řešení
• Sass, Less, nebo PostCSS syntaxe
• Nezávislé na frameworku
• Nezávislé na CSS názvosloví
• Žádná extra režie při renderování stylů na
klientu
Jak si zvolit konvence?
• Velikost projektu
• Externí knihovny
• Časová náročnost
• Don’t Repeat Yourself
• Modifikace
• Izolace
ITCSS
Obecné
Konkrétní
ITCSS
Méně
specifické
Více
specifické
Nastavení
Nástroje
Obecné
Základní
Objekty
Komponenty
Exkluzivní
ITCSS
Kam dál?
• React Native
• Shadow DOM
• MSS ?
Díky!
Reference
• https://github.com/MicheleBertoli/css-in-js
• https://css-tricks.com/the-debate-around-do-we-even-need-css-anymore/
• https://medium.com/@jviereck/modularise-css-the-react-way-
1e817b317b04
• http://hugogiraudel.com/2015/06/18/styling-react-components-in-sass/
• http://glenmaddern.com/articles/interoperable-css
• https://medium.com/seek-ui-engineering/the-end-of-global-css-
90d2a4a06284

More Related Content

Viewers also liked

Performance optimization - Basics
Performance optimization - BasicsPerformance optimization - Basics
Performance optimization - Basics
Filip Mares
 
Performance optimization - Advanced techniques
Performance optimization - Advanced techniquesPerformance optimization - Advanced techniques
Performance optimization - Advanced techniques
Filip Mares
 
Proofread symbols
Proofread symbolsProofread symbols
Proofread symbols
Nuestra De Asis
 
Let’s practice critical thinking
Let’s practice critical thinkingLet’s practice critical thinking
Let’s practice critical thinking
coop8
 
Anatomie mobilního webu
Anatomie mobilního webuAnatomie mobilního webu
Anatomie mobilního webuFilip Mares
 
Performance optimization - JavaScript
Performance optimization - JavaScriptPerformance optimization - JavaScript
Performance optimization - JavaScript
Filip Mares
 
HTML5 Geolocation API
HTML5 Geolocation APIHTML5 Geolocation API
HTML5 Geolocation API
Filip Mares
 
77094122 report-on-aarong-part-two
77094122 report-on-aarong-part-two77094122 report-on-aarong-part-two
77094122 report-on-aarong-part-two
এ.আর. সিকদার
 
Daniel Steigerwald: Jak psát mobilní webové aplikace
Daniel Steigerwald: Jak psát mobilní webové aplikaceDaniel Steigerwald: Jak psát mobilní webové aplikace
Daniel Steigerwald: Jak psát mobilní webové aplikace
Develcz
 
React js
React jsReact js
React js
Jai Santhosh
 
React JS and why it's awesome
React JS and why it's awesomeReact JS and why it's awesome
React JS and why it's awesome
Andrew Hull
 
Integrating React.js with PHP projects
Integrating React.js with PHP projectsIntegrating React.js with PHP projects
Integrating React.js with PHP projects
Ignacio Martín
 
Rethinking Best Practices
Rethinking Best PracticesRethinking Best Practices
Rethinking Best Practices
floydophone
 

Viewers also liked (14)

Performance optimization - Basics
Performance optimization - BasicsPerformance optimization - Basics
Performance optimization - Basics
 
Performance optimization - Advanced techniques
Performance optimization - Advanced techniquesPerformance optimization - Advanced techniques
Performance optimization - Advanced techniques
 
Proofread symbols
Proofread symbolsProofread symbols
Proofread symbols
 
Let’s practice critical thinking
Let’s practice critical thinkingLet’s practice critical thinking
Let’s practice critical thinking
 
Anatomie mobilního webu
Anatomie mobilního webuAnatomie mobilního webu
Anatomie mobilního webu
 
Performance optimization - JavaScript
Performance optimization - JavaScriptPerformance optimization - JavaScript
Performance optimization - JavaScript
 
HTML5 Geolocation API
HTML5 Geolocation APIHTML5 Geolocation API
HTML5 Geolocation API
 
77094122 report-on-aarong-part-two
77094122 report-on-aarong-part-two77094122 report-on-aarong-part-two
77094122 report-on-aarong-part-two
 
Daniel Steigerwald: Jak psát mobilní webové aplikace
Daniel Steigerwald: Jak psát mobilní webové aplikaceDaniel Steigerwald: Jak psát mobilní webové aplikace
Daniel Steigerwald: Jak psát mobilní webové aplikace
 
Bez HTML5/CSS3 to nejde
Bez HTML5/CSS3 to nejdeBez HTML5/CSS3 to nejde
Bez HTML5/CSS3 to nejde
 
React js
React jsReact js
React js
 
React JS and why it's awesome
React JS and why it's awesomeReact JS and why it's awesome
React JS and why it's awesome
 
Integrating React.js with PHP projects
Integrating React.js with PHP projectsIntegrating React.js with PHP projects
Integrating React.js with PHP projects
 
Rethinking Best Practices
Rethinking Best PracticesRethinking Best Practices
Rethinking Best Practices
 

Similar to Komponenty v kaskákdě

Styling React Native Applications
Styling React Native ApplicationsStyling React Native Applications
Styling React Native Applications
Jan Maršíček
 
ITCSS — škálovatelná CSS architektura
ITCSS — škálovatelná CSS architekturaITCSS — škálovatelná CSS architektura
ITCSS — škálovatelná CSS architektura
Adam Kudrna
 
TNPW2-2016-03
TNPW2-2016-03TNPW2-2016-03
TNPW2-2016-03
Lukáš Vacek
 
TNPW2-2014-03
TNPW2-2014-03TNPW2-2014-03
TNPW2-2014-03
Lukáš Vacek
 
Použití Next.js a Reactí UI khinihovny v aplikaci
Použití Next.js a Reactí UI khinihovny v aplikaciPoužití Next.js a Reactí UI khinihovny v aplikaci
Použití Next.js a Reactí UI khinihovny v aplikaci
Martin Krištof
 
06 prez9(tvorba webu)
06 prez9(tvorba webu)06 prez9(tvorba webu)
06 prez9(tvorba webu)olc_user
 
Kvalita kódu
Kvalita kóduKvalita kódu
Kvalita kódu
Adam Kudrna
 
Výběr vhodných technologii pro startup v prostředí cloudu
Výběr vhodných technologii pro startup v prostředí clouduVýběr vhodných technologii pro startup v prostředí cloudu
Výběr vhodných technologii pro startup v prostředí cloudu
Jan Kodera
 
Spring framework - J2EE S Lidskou Tvari
Spring framework - J2EE S Lidskou TvariSpring framework - J2EE S Lidskou Tvari
Spring framework - J2EE S Lidskou Tvari
Roman Pichlík
 
Péhápkaři v Pecce: Naše cesta k read-modelu – Vojtěch Buba –18. 5. 2022
Péhápkaři v Pecce: Naše cesta k read-modelu – Vojtěch Buba –18. 5. 2022Péhápkaři v Pecce: Naše cesta k read-modelu – Vojtěch Buba –18. 5. 2022
Péhápkaři v Pecce: Naše cesta k read-modelu – Vojtěch Buba –18. 5. 2022
PeckaDesign.cz
 
Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]
Tomáš Kukol
 
Webový front-end ve službách mobilního vývojáře
Webový front-end  ve službách mobilního  vývojáře Webový front-end  ve službách mobilního  vývojáře
Webový front-end ve službách mobilního vývojáře Martin Michálek
 
Borek Bernard: TypeScript - příčetný jazyk pro web
Borek Bernard: TypeScript - příčetný jazyk pro webBorek Bernard: TypeScript - příčetný jazyk pro web
Borek Bernard: TypeScript - příčetný jazyk pro webDevelcz
 
PoSobota 96 ČB 28.4.2018
PoSobota 96 ČB 28.4.2018PoSobota 96 ČB 28.4.2018
PoSobota 96 ČB 28.4.2018
Brilo Team
 
Oxygen Builder - Kyslík pro WordPress
Oxygen Builder - Kyslík pro WordPressOxygen Builder - Kyslík pro WordPress
Oxygen Builder - Kyslík pro WordPress
Aleš Sýkora
 

Similar to Komponenty v kaskákdě (19)

Styling React Native Applications
Styling React Native ApplicationsStyling React Native Applications
Styling React Native Applications
 
ITCSS — škálovatelná CSS architektura
ITCSS — škálovatelná CSS architekturaITCSS — škálovatelná CSS architektura
ITCSS — škálovatelná CSS architektura
 
TNPW2-2016-03
TNPW2-2016-03TNPW2-2016-03
TNPW2-2016-03
 
TNPW2-2014-03
TNPW2-2014-03TNPW2-2014-03
TNPW2-2014-03
 
TNPW2-2012-05
TNPW2-2012-05TNPW2-2012-05
TNPW2-2012-05
 
TNPW2-2013-05
TNPW2-2013-05TNPW2-2013-05
TNPW2-2013-05
 
Použití Next.js a Reactí UI khinihovny v aplikaci
Použití Next.js a Reactí UI khinihovny v aplikaciPoužití Next.js a Reactí UI khinihovny v aplikaci
Použití Next.js a Reactí UI khinihovny v aplikaci
 
06 prez9(tvorba webu)
06 prez9(tvorba webu)06 prez9(tvorba webu)
06 prez9(tvorba webu)
 
Kvalita kódu
Kvalita kóduKvalita kódu
Kvalita kódu
 
Výběr vhodných technologii pro startup v prostředí cloudu
Výběr vhodných technologii pro startup v prostředí clouduVýběr vhodných technologii pro startup v prostředí cloudu
Výběr vhodných technologii pro startup v prostředí cloudu
 
Spring framework - J2EE S Lidskou Tvari
Spring framework - J2EE S Lidskou TvariSpring framework - J2EE S Lidskou Tvari
Spring framework - J2EE S Lidskou Tvari
 
Péhápkaři v Pecce: Naše cesta k read-modelu – Vojtěch Buba –18. 5. 2022
Péhápkaři v Pecce: Naše cesta k read-modelu – Vojtěch Buba –18. 5. 2022Péhápkaři v Pecce: Naše cesta k read-modelu – Vojtěch Buba –18. 5. 2022
Péhápkaři v Pecce: Naše cesta k read-modelu – Vojtěch Buba –18. 5. 2022
 
Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]
 
Webový front-end ve službách mobilního vývojáře
Webový front-end  ve službách mobilního  vývojáře Webový front-end  ve službách mobilního  vývojáře
Webový front-end ve službách mobilního vývojáře
 
TNPW2-2011-06
TNPW2-2011-06TNPW2-2011-06
TNPW2-2011-06
 
JS2016
JS2016JS2016
JS2016
 
Borek Bernard: TypeScript - příčetný jazyk pro web
Borek Bernard: TypeScript - příčetný jazyk pro webBorek Bernard: TypeScript - příčetný jazyk pro web
Borek Bernard: TypeScript - příčetný jazyk pro web
 
PoSobota 96 ČB 28.4.2018
PoSobota 96 ČB 28.4.2018PoSobota 96 ČB 28.4.2018
PoSobota 96 ČB 28.4.2018
 
Oxygen Builder - Kyslík pro WordPress
Oxygen Builder - Kyslík pro WordPressOxygen Builder - Kyslík pro WordPress
Oxygen Builder - Kyslík pro WordPress
 

Komponenty v kaskákdě

Editor's Notes

  1. S komponentama se v poslední době roztrhl pytel Polymer má custom elementy Angular má direktivy W3C má Web Components React má komponenty V dokumentaci Reactu se dokonce dočteme, že … React a JSX?
  2. React a JSX! Sloučení HTML a JavaScriptu dává smysl
  3. Konec 2014
  4. Nelze aplikovat pouze na určitou část markupu CSS v čase narůstá Může přinést řadu problémů např. při asynchronním načítání
  5. Celá komponenta je pohromadě Nechce vytvořit dogma, ale otevřít debatu
  6. Michele Bertoli Drtivá většina převzala myšlenku Chrise
  7. Je opravdu chyba v návrhu CSS? První návrh koncem roku 1994 IE 3 a Netscape Navigator 4 měly dost úděsnou implementaci CSS Reálné nasazení CSS přišlo s IE 4 (koncem roku 1997) CSS parser je rychlej JavaScript bylo v té době sprostý slovo
  8. BEM / SUIT Dobrá architektura uncss Gulp / WebPack / gzip SASS / LESS / PostCSS Dobrá architektura / zvýšení specificity OOCSS Testování…
  9. Kam patří normalize? A co typografie? … Co komponenty, které budeme chtít použít na jiném projektu, nebo publikovat na internetu? Pokud do nich nacpeme CSS, nutime ostatni, aby pouzivali to samy reseni.
  10. How do you do :hover/:focus/:active in inline styles? You don't. You fake it.
  11. ES7 decorator, používá css-loader … Mark Dalgleish - Dokumentace “standardu”, postcss moduly, příklady použití s webpackem, browserify a jspm Rozšíření téhož
  12. css-loader je webpack loader pro css
  13. no extra dependencies can be used with React, Angular, Ember can use BEM, SUIT Takže ideální řešení je vlastně hlavně o nastavení a dodržování konvencí
  14. Kolik lidí bude zároveň na stylech pracovat? Kolik času bude potřeba na přípravu dev stacku VS kolik času tím potenciálně ušetříme do budoucna při psaní nových komponent? Jaké externí knihovny se budou používat? Bootstrap ani GMD nepoužívá BEM/SUIT Jak moc mi danné řešení umožní reuse stylů? Umožní mi danné řešení odlišit konkrétní instanci komponenty od ostatních? Můžu v případě potřeby ovlivnit např. sourozence?
  15. Harry Roberts Převrácený trojúhelník
  16. Settings: Global variables, config switches. Tools: Default mixins and functions. Generic: Ground-zero styles (Normalize.css, resets, box-sizing). Base: Unclassed HTML elements (type selectors). Objects: Cosmetic-free design patterns. Components: Designed components, chunks of UI. Trumps: Helpers and overrides.
  17. v React Native jsou pouze inliny styly Shadow DOM umožňuje zapouzdření JavaScriptu, CSS a šablony do Web Componenty. Modular Style Sheet