SlideShare a Scribd company logo
Je CSS vážně
tak podivné?
Martin Michálek
@machal
Metody organizace stylů
vycházejících z jejich podstaty.
Ahoj, jsem Martin
vrdl.cz/martin
CSS v Javacriptu
https://medium.com/@steida/css-in-js-the-argument-refined-471c7eb83955
Dost se mluví o CSS v JS. Někdy fajn cesta, ale je potřeba říct, že ne všechny
vlastnosti CSS jsou špatné. A že se díky nim dají styly psát a organizovat rozumně.
CSS je fakt
divný jazyk.
😠
Na začátku každé části nechám promluvit CSS hejtry.
CSS = design?
Ano, každý kdo píše CSS, by měl umět uvažovat alespoň trochu jako designér.
Ale to neznamená, že CSS není kód a že není potřeba vývojářských znalostí.
Čím více v CSS „programujete“, tím horší výstup má
S extendy, zanořováním, mixiny a dalšími pokročilými vlastnosti preprocesorů
jde napáchat mnoho škod. Kdy jste naposledy četli zkompilované CSS?
Standardizace: Code Guide
codeguide.co
Standardizace: Stylelint
stylelint.io
Kaskáda, specificita,
pořadí vlastností…
WTF?!
😠
Pořadí deklarací
https://codepen.io/machal/pen/YVgOZY
Bude <div> zelený nebo bílý?
Samozřejmě zelený. Záleží totiž jen na pořadí deklarací v CSS. Toho se dá využít.
Specifičnost
https://specificity.keegan.st
Složité selektory už způsobily tolik bolehlavů… Selektor vyšší váhy má přednost,
i když je ve stylech první. Vždy proto držte váhu selektorů co nejníže.
Chování
Graf specifičnosti
cssstats.com
Graf specifičnosti by měl narůstat postupně. Když jsou na začátku takhle vysoké
vrcholky, budete asi jednou muset použít !important. A to nechcete, věřte mi.
Obsah
HTML
Prezentace
CSS
Chování
Javascript
Vrstvení — princip webu i CSS
ITCSS: Vrstvení a přidávání specificity
Organizační metodika ITCSS se kromě jiného snaží specifičnost postupně zvyšovat.
Trumps jsou „helper třídy” a ty už klidně mohou mít třeba !important.
OOCSS
1. Nezávislost na HTML

.nav > li ! .nav-item
2. Nezávislost na kontejnteru

.pg-broadcast .nav-tabs ! .nav-tabs-full-width
3. Co nejnižší specifičnost

#component ! .component
4. Objekt, element, modifikátor

.nav — .nav-item — .nav-full-width
http://www.vzhurudolu.cz/prirucka/oocss
Pro objekty a komponenty doporučuji metodiku OOCSS. Pro každý objekt
máme jednu třídu.
Globální
platnost? Nemožnost
izolace? Sorry jako.
😠
BEM pojmenovávací konvence
https://www.slideshare.net/robinpokorny/react-a-omyly-css
Globálnost všeho v CSS je pořád problém.
Zčásti se dá s trochou vynaložené energie vyřešit pojmenovávací
konvencí BEM.
Block .nav-tabs
Element .nav-tabs__item
Modifier .nav-tabs--level-1
Element Modifier .nav-tabs__item--full
BEM pojmenovávací konvence
http://www.vzhurudolu.cz/prirucka/bem
BEM zavádí význam k OOCSS třídám tak, aby se nám
nepletly jejich jednotlivé typy.
BEM: Příklad
<div class="nav-tabs nav-tabs--level-1 nav-tabs--full">
<div class="nav-tabs__inner">
<ul class="nav nav-tabs__list">
<li class="nav-tabs__item nav-tabs__item--active">
…
</li>
</ul>
</div>
</div>
http://www.vzhurudolu.cz/prirucka/bem
I z HTML je pak jasně vidět jaké komponenty a jejich modifikace či elementy
používáme. Ve zkratce – jaká je struktura komponent.
Kde je nějaká
modularita, vole?
😠
Servírovací modularita s HTTP/2 už brzy
https://jakearchibald.com/2016/link-in-body/
CSS soubor je
ohromný,
opakující se
monolit.
😠
http://www.vzhurudolu.cz/blog/82-tachyons-nejremeslnici
Tachyons: Subatomické třídy
https://github.com/machal/blanka-html/
Kompromis: Helper třídy pro nejčastější modifikace
Subatomické třídy mají své nevýhody. Je ovšem vhodné je použít 

pro nejčastější drobné modifikace komponent.
Atomic Design
http://vrdl.cz/p/pattern-lab
Jeden z klíčů k jednodušší organizaci CSS je už v designu: Dobře navržený systém
designu nezpůsobuje tolik duplicit. Komponenty jsou prostě menší, atomické.
Příliš monolitické komponenty
Part of the molecule:
.media-block .img-wrap .thumb
Part of the molecule:
.media-block.size-2 h4
Part of the molecule:
.media-block.size-2 p
Rozbití do atomů
Reusable atom:
.thumb
Reusable atom:
.title
Reusable atom:
.perex
1) Neprogramujte
2) Používejte Stylelint a CodeGuide
3) Pište to v OOCSS a BEM
4) Zvažte ITCSS
5) Zaveďte HTTP/2
6) Chtějte atomický design
🤔
Díky!
vrdl.cz/ebook-responzivni
@machal
www.vzhurudolu.cz


😍

More Related Content

Similar to Je CSS vážně tak podivné?

CSS a sazba knih: jak jsme daleko?
CSS a sazba knih: jak jsme daleko?CSS a sazba knih: jak jsme daleko?
CSS a sazba knih: jak jsme daleko?
Martin Michálek
 
Styling React Native Applications
Styling React Native ApplicationsStyling React Native Applications
Styling React Native Applications
Jan Maršíček
 
CSS preprocesory
CSS preprocesoryCSS preprocesory
CSS preprocesory
Martin Michálek
 
Metodika BEM
Metodika BEMMetodika BEM
Metodika BEM
Martin Pešout
 
17 technických tipů ke zrychlení webů
17 technických tipů ke zrychlení webů17 technických tipů ke zrychlení webů
17 technických tipů ke zrychlení webů
Martin Michálek
 
React a omyly jazyka CSS
React a omyly jazyka CSSReact a omyly jazyka CSS
React a omyly jazyka CSS
Robin Pokorny
 
Hledání příčin pomalého webu a jak to řešit
Hledání příčin pomalého webu a jak to řešitHledání příčin pomalého webu a jak to řešit
Hledání příčin pomalého webu a jak to řešit
Desingdev
 
Jak zlepšit zabezpečení čtvrtiny celého webu
Jak zlepšit zabezpečení čtvrtiny celého webuJak zlepšit zabezpečení čtvrtiny celého webu
Jak zlepšit zabezpečení čtvrtiny celého webu
Michal Špaček
 
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
 
10 praktických CSS3 a SVG řešení
10 praktických  CSS3 a SVG řešení10 praktických  CSS3 a SVG řešení
10 praktických CSS3 a SVG řešení
Martin Michálek
 
PHP Vysočina - WordPress - 25.10.2018
PHP Vysočina - WordPress - 25.10.2018PHP Vysočina - WordPress - 25.10.2018
PHP Vysočina - WordPress - 25.10.2018
Brilo Team
 
XSS PHP CSP ETC OMG WTF BBQ
XSS PHP CSP ETC OMG WTF BBQXSS PHP CSP ETC OMG WTF BBQ
XSS PHP CSP ETC OMG WTF BBQ
Michal Špaček
 
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
 
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
 

Similar to Je CSS vážně tak podivné? (16)

CSS a sazba knih: jak jsme daleko?
CSS a sazba knih: jak jsme daleko?CSS a sazba knih: jak jsme daleko?
CSS a sazba knih: jak jsme daleko?
 
Styling React Native Applications
Styling React Native ApplicationsStyling React Native Applications
Styling React Native Applications
 
CSS preprocesory
CSS preprocesoryCSS preprocesory
CSS preprocesory
 
Metodika BEM
Metodika BEMMetodika BEM
Metodika BEM
 
17 technických tipů ke zrychlení webů
17 technických tipů ke zrychlení webů17 technických tipů ke zrychlení webů
17 technických tipů ke zrychlení webů
 
React a omyly jazyka CSS
React a omyly jazyka CSSReact a omyly jazyka CSS
React a omyly jazyka CSS
 
Hledání příčin pomalého webu a jak to řešit
Hledání příčin pomalého webu a jak to řešitHledání příčin pomalého webu a jak to řešit
Hledání příčin pomalého webu a jak to řešit
 
Jak zlepšit zabezpečení čtvrtiny celého webu
Jak zlepšit zabezpečení čtvrtiny celého webuJak zlepšit zabezpečení čtvrtiny celého webu
Jak zlepšit zabezpečení čtvrtiny celého webu
 
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
 
10 praktických CSS3 a SVG řešení
10 praktických  CSS3 a SVG řešení10 praktických  CSS3 a SVG řešení
10 praktických CSS3 a SVG řešení
 
PHP Vysočina - WordPress - 25.10.2018
PHP Vysočina - WordPress - 25.10.2018PHP Vysočina - WordPress - 25.10.2018
PHP Vysočina - WordPress - 25.10.2018
 
CSS - Tipy a triky
CSS - Tipy a trikyCSS - Tipy a triky
CSS - Tipy a triky
 
XSS PHP CSP ETC OMG WTF BBQ
XSS PHP CSP ETC OMG WTF BBQXSS PHP CSP ETC OMG WTF BBQ
XSS PHP CSP ETC OMG WTF BBQ
 
PoSobota 96 ČB 28.4.2018
PoSobota 96 ČB 28.4.2018PoSobota 96 ČB 28.4.2018
PoSobota 96 ČB 28.4.2018
 
TNPW2-2016-03
TNPW2-2016-03TNPW2-2016-03
TNPW2-2016-03
 
TNPW2-2014-03
TNPW2-2014-03TNPW2-2014-03
TNPW2-2014-03
 

More from Martin Michálek

Rychlejší web snadno a rychle: Nové technologie a nástroje pro vývojáře
Rychlejší web snadno a rychle: Nové technologie a nástroje pro vývojářeRychlejší web snadno a rychle: Nové technologie a nástroje pro vývojáře
Rychlejší web snadno a rychle: Nové technologie a nástroje pro vývojáře
Martin Michálek
 
Browsers: from competition to collaboration
Browsers: from competition to collaborationBrowsers: from competition to collaboration
Browsers: from competition to collaboration
Martin Michálek
 
„To my ne, to oni!“ – komponenty třetích stran a rychlost webu
„To my ne, to oni!“ – komponenty třetích stran a rychlost webu„To my ne, to oni!“ – komponenty třetích stran a rychlost webu
„To my ne, to oni!“ – komponenty třetích stran a rychlost webu
Martin Michálek
 
Rychlost webu: Co pro ni mohou udělat UXáci, marketéři a majitelé webů?
Rychlost webu: Co pro ni mohou udělat UXáci, marketéři a majitelé webů?Rychlost webu: Co pro ni mohou udělat UXáci, marketéři a majitelé webů?
Rychlost webu: Co pro ni mohou udělat UXáci, marketéři a majitelé webů?
Martin Michálek
 
Blbosti kolem webové rychlosti
Blbosti kolem webové rychlostiBlbosti kolem webové rychlosti
Blbosti kolem webové rychlosti
Martin Michálek
 
SEO jako Brno - workshop k rychlosti webu
SEO jako Brno - workshop k rychlosti webuSEO jako Brno - workshop k rychlosti webu
SEO jako Brno - workshop k rychlosti webu
Martin Michálek
 
Web rychlý jako blesk (s důrazem na AMP)
Web rychlý jako blesk (s důrazem na AMP)Web rychlý jako blesk (s důrazem na AMP)
Web rychlý jako blesk (s důrazem na AMP)
Martin Michálek
 
CSS proměnné (Custom Properties)
CSS proměnné (Custom Properties)CSS proměnné (Custom Properties)
CSS proměnné (Custom Properties)
Martin Michálek
 
Devel.cz: Bootstrap 4
Devel.cz: Bootstrap 4Devel.cz: Bootstrap 4
Devel.cz: Bootstrap 4
Martin Michálek
 
AMP: Co řeší a co nového nabízí
AMP: Co řeší a co nového nabízíAMP: Co řeší a co nového nabízí
AMP: Co řeší a co nového nabízí
Martin Michálek
 
Metriky rychlosti načítání
Metriky rychlosti načítáníMetriky rychlosti načítání
Metriky rychlosti načítání
Martin Michálek
 
WebExpo 2017 - Přístupnost v kódu: ukázky a návrhové vzory
WebExpo 2017 - Přístupnost v kódu: ukázky a návrhové vzoryWebExpo 2017 - Přístupnost v kódu: ukázky a návrhové vzory
WebExpo 2017 - Přístupnost v kódu: ukázky a návrhové vzory
Martin Michálek
 
Slasti a pasti prototypování v HTML
Slasti a pasti  prototypování v HTMLSlasti a pasti  prototypování v HTML
Slasti a pasti prototypování v HTML
Martin Michálek
 
Debugování responzivních webů
Debugování responzivních webůDebugování responzivních webů
Debugování responzivních webů
Martin Michálek
 
Mobile First v praxi
Mobile First v praxiMobile First v praxi
Mobile First v praxi
Martin Michálek
 
Vše co potřebuje markeťák vědět o rychlostní optimalizaci webů
Vše co potřebuje markeťák vědět o rychlostní optimalizaci webůVše co potřebuje markeťák vědět o rychlostní optimalizaci webů
Vše co potřebuje markeťák vědět o rychlostní optimalizaci webů
Martin Michálek
 
Design webů v prohlížeči
Design webů v prohlížečiDesign webů v prohlížeči
Design webů v prohlížeči
Martin Michálek
 
Responzivní obrázky v praxi
Responzivní obrázky v praxiResponzivní obrázky v praxi
Responzivní obrázky v praxi
Martin Michálek
 
Co by měl UXák vědět o responzivním webdesignu?
Co by měl UXák vědět o responzivním webdesignu?Co by měl UXák vědět o responzivním webdesignu?
Co by měl UXák vědět o responzivním webdesignu?
Martin Michálek
 
Ach, ty mobilní prohlížeče
Ach, ty mobilní prohlížečeAch, ty mobilní prohlížeče
Ach, ty mobilní prohlížeče
Martin Michálek
 

More from Martin Michálek (20)

Rychlejší web snadno a rychle: Nové technologie a nástroje pro vývojáře
Rychlejší web snadno a rychle: Nové technologie a nástroje pro vývojářeRychlejší web snadno a rychle: Nové technologie a nástroje pro vývojáře
Rychlejší web snadno a rychle: Nové technologie a nástroje pro vývojáře
 
Browsers: from competition to collaboration
Browsers: from competition to collaborationBrowsers: from competition to collaboration
Browsers: from competition to collaboration
 
„To my ne, to oni!“ – komponenty třetích stran a rychlost webu
„To my ne, to oni!“ – komponenty třetích stran a rychlost webu„To my ne, to oni!“ – komponenty třetích stran a rychlost webu
„To my ne, to oni!“ – komponenty třetích stran a rychlost webu
 
Rychlost webu: Co pro ni mohou udělat UXáci, marketéři a majitelé webů?
Rychlost webu: Co pro ni mohou udělat UXáci, marketéři a majitelé webů?Rychlost webu: Co pro ni mohou udělat UXáci, marketéři a majitelé webů?
Rychlost webu: Co pro ni mohou udělat UXáci, marketéři a majitelé webů?
 
Blbosti kolem webové rychlosti
Blbosti kolem webové rychlostiBlbosti kolem webové rychlosti
Blbosti kolem webové rychlosti
 
SEO jako Brno - workshop k rychlosti webu
SEO jako Brno - workshop k rychlosti webuSEO jako Brno - workshop k rychlosti webu
SEO jako Brno - workshop k rychlosti webu
 
Web rychlý jako blesk (s důrazem na AMP)
Web rychlý jako blesk (s důrazem na AMP)Web rychlý jako blesk (s důrazem na AMP)
Web rychlý jako blesk (s důrazem na AMP)
 
CSS proměnné (Custom Properties)
CSS proměnné (Custom Properties)CSS proměnné (Custom Properties)
CSS proměnné (Custom Properties)
 
Devel.cz: Bootstrap 4
Devel.cz: Bootstrap 4Devel.cz: Bootstrap 4
Devel.cz: Bootstrap 4
 
AMP: Co řeší a co nového nabízí
AMP: Co řeší a co nového nabízíAMP: Co řeší a co nového nabízí
AMP: Co řeší a co nového nabízí
 
Metriky rychlosti načítání
Metriky rychlosti načítáníMetriky rychlosti načítání
Metriky rychlosti načítání
 
WebExpo 2017 - Přístupnost v kódu: ukázky a návrhové vzory
WebExpo 2017 - Přístupnost v kódu: ukázky a návrhové vzoryWebExpo 2017 - Přístupnost v kódu: ukázky a návrhové vzory
WebExpo 2017 - Přístupnost v kódu: ukázky a návrhové vzory
 
Slasti a pasti prototypování v HTML
Slasti a pasti  prototypování v HTMLSlasti a pasti  prototypování v HTML
Slasti a pasti prototypování v HTML
 
Debugování responzivních webů
Debugování responzivních webůDebugování responzivních webů
Debugování responzivních webů
 
Mobile First v praxi
Mobile First v praxiMobile First v praxi
Mobile First v praxi
 
Vše co potřebuje markeťák vědět o rychlostní optimalizaci webů
Vše co potřebuje markeťák vědět o rychlostní optimalizaci webůVše co potřebuje markeťák vědět o rychlostní optimalizaci webů
Vše co potřebuje markeťák vědět o rychlostní optimalizaci webů
 
Design webů v prohlížeči
Design webů v prohlížečiDesign webů v prohlížeči
Design webů v prohlížeči
 
Responzivní obrázky v praxi
Responzivní obrázky v praxiResponzivní obrázky v praxi
Responzivní obrázky v praxi
 
Co by měl UXák vědět o responzivním webdesignu?
Co by měl UXák vědět o responzivním webdesignu?Co by měl UXák vědět o responzivním webdesignu?
Co by měl UXák vědět o responzivním webdesignu?
 
Ach, ty mobilní prohlížeče
Ach, ty mobilní prohlížečeAch, ty mobilní prohlížeče
Ach, ty mobilní prohlížeče
 

Je CSS vážně tak podivné?