Základy správného psaní CSS kódu - typické chyby a metodiky
Jan 15, 20255 min read
při psaní CSS pravidel je dobré co nejvíce využívat dědičnost, kaskádu a znuvupoužitelnost
Typické chyby
Nízká specifičnost
používání selektorů, které obsahují jména HTML elementů
to je nevýhodné pokud se elementy opakovaně objevují na různých místech ve více podobách
pokud by jsme chtěli další elementy s jinou barvou dostaneme se do slepé uličky
vytvoříme nepřehledné řešení
/* špatně - použití selektoru, který obsahuje jméno HTML elementu */em { color: gray; }.../* výjimka pro jiné em elementy */.text-color-secondary { color: gold; }
pokud je takových úprav více psaní CSS musíme opakovaně měnit již nastavené hodnoty →redundantní CSS.
řešení pojmenováním elementů pomocí atributu class
řešení dle OOCSS - přejmenování a odstranění kontextu v selektorech
Správné řešení
<h2 class="title">Lorem Ipsum</h2><article> <h2 class="title title-article">dolor sit amet</h2></article>
/* vlastnosti pro všechny nadpisy */ .title { color: gray; border-left: 1em solid gray; padding: 1em; } /* specifické vlastnosti pro nadpis v elementu article */ .title-article { color: gold; border-color: gold; }
Základní principy:
vyčlenění společných vlastností do jedné třídy, úprava pro specifické části jsou určený dalšími CSS pravidly které upravují jen určité atributy
nahrazení kontextové závislosti vhodným pojmenováním
další upravující/rozšiřující pravidla pomocí rozšíření názvu
BEM (Block Element Modificator)
implementuje OOCSS
zajímavá metodika většinou se používá část o pojmenování elementů
struktura - blok, element a modifikátor
blok - samostatná nezávislá část stránky
element - představuje součást bloku
modifikátor - představuje variantu bloku či elementu
/* blok */jmeno-bloku/* modifikátor bloku */ jmeno-bloku--jmeno-modifikatoru-bloku /* element bloku */ jmeno-bloku__jmeno-elementu/* modifikátor elementu bloku */jmeno-bloku__jmeno-elementu--jmeno-modifikatoru-elementu
Příklad
<!-- Představ me si že tento kód je sekundární navigace na stránce--><ul class="nav nav--secodary" role="navigation"> <li class="nav__item"> <a href="#">A</a> </li> <li class="nav__item nav__item--active"> <a href="#">B</a> </li></ul>
/* společné pro všechny navigace */ .nav {...} /* specifika pro sekundární navigaci */ .nav--secondary {...} /* položka navigace */ .nav__item {...} /* specifika pro aktivní položku navigace */ .nav__item--active {...}
vhodné rozdělení tříd minimalizuje redundanci výsledného CSS.
díky struktuře názvu je vždy blok zapouzdřený (neovlivňuje zbylé části stránky)
SUIT CSS
/* komponenta (blok v terminologii BEM) */ JmenoKomponenty /* modifikátor komponenty */ JmenoKomponenty--jmenoModifikatoruKomponenty /* část komponenty (element v terminologii BEM) */ JmenoKomponenty-jmenoCastiKomponenty /* modifikátor části komponenty */ JmenoKomponenty-jmenoCastiKomponenty--jmenoModifikatoruCastiKomponenty
utility třídy - jsou CSS pravidla obsahující pouze jednu deklaraci (pouze jeden účel)
kód z utility tříd se označuje jako atomické CSS
lze pomocí nich vytvořit celou web stránku
náročný ale populární
→ na atomickém CSS je založený Tailwind CSS