Zdroj: https://www.vzhurudolu.cz/prirucka/oocss
- OOCSS mi pomáhá psát CSS styly tak, abych je moje snadno spravovat a používat na dalších místech (klidně i dalších projektech)
Klíčové slovo: komponenta
- komponenta je nějaký prvek na stránce, která může být abstrahována
- nejlépe to popíše následující příklad s tlačítkem:
/* Komponenta */
.button { … }
/* Elementy komponenty */
.button-icon { … }
/* Modifikátory komponenty */
.button-primary { … }
.button-login { … }
5 hlavních principů OOCSS
1) Nezávislost vzhledu na struktuře
- HTML tagy do CSS NEpatří - při jejich změně nechceme dělat změny jak v HTML, tak i v CSS
/* Tohle je v objektovém CSS zakázáno: */
button { … }
input.button { … }
.comment img { … }
- jako výjimku bereme stylování základní typografické vrstvy projektu - tam selectory
p
čih1
mohu v pohodě použít
2) Nezávislost obsahu na kontejneru
- do CSS Selektorů nechceš promítat strukturu DOMu, ta se také může měnit
/* Špatně: */
.login-form .button { … }
/* Dobře: */
.button { … }
.button-login { … } /* modifikátor */
3) Co nejnižší specifičnost
- v CSS nechceš používat selectory identifikátorů (
#id
) kvůli jejich vysoké specifičnostiid="..."
si nech pro kotvy či referencování z JS
!important
si taky nech - to používej pro debuggovací, či vysoce specifické účely- nepiš zbytečně selektory rodičů (už je to zase kopírování struktury DOMu)
- nepiš kombinované selektory, např.
.button.button-primary
- O specifičnosti na MDN - lidsky
- Kalkulačka specificity
4) Vývoj zaměřený na komponenty a znovupoužitelnost
- komponenta = objekt
- jsou nezávislé a lze je pak používat na jiných projektech
- tvoří pak samostatný celek, který pak importujeme
@import "button.css";
@import "nav.css";
5) Princip prefixování: Objekt, Element, Modifikátor
-
už trochu souvisí s CSS BEM - pojmenovávací konvence
-
tipy od Martina Michálka
- není potřeba striktně využívat objektový přístup se vším všudy a lpět na tom
- ale alespoň základy principů bych měl používat všude
- hlavně snížení specifičnosti, nezávislost vzhledu na struktuře a obsahu na kontejneru