- 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í
- 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
- jediná výjimka je úprava výchozího(globální) chování elementů
Vysoká specifičnost
- používání selektorů s příliš velkou specifičností.
- ukázkový kód ale nefunguje
- kaskáda způsobí, že pravidlo
.active { color: gold; }
se neaplikuje - jelikož má menší specifičnost
- pokusíme se opravit:
- zkomplikuje situaci
- použitý selektor má vyšší specifičnost kvůli vysoké specifičnosti ostatních selektorů
- navíc stále jsou tam chyby pokud by aktivní položkou byl první element
li
bude zobrazen zeleně - už jen dvě možnosti řešení (ani jedno dobré)
!important
- změna
class
naid
- oba případy zase zvednou specifičnost
- proč je problematická:
- selektory s velkou specifičností omezují dědičnost
- redundantní kód
- se špatnou organizací → velké problémy
- řešení:
- vyhnout se selektoru atributu
id
- vyhnout se psaní
!important
- vyhnout se selektoru atributu
Pojmenování
- pojmenovávání elementů dle jejich vzhledu po čase může problematické když chceme změnit design a už to neodpovídá názvu
- lepší pojmenovávat dle použití
- případná změna hodnot nebude matoucí
- pojmenování dle umístění (
.button-main-page
) taky není vhodné element může být použit na jiných místech název v jiném místě bude nelogický
CSS metodiky
- pomohou nám vyhnout se chybám
- popisují základní konvence psaní CSS
OOCSS (Object Oriented CSS)
- doporučuje:
- používat selektory s nízkou specifičností
- vyhnout se pojmenování na základě vizuální podoby a místa použití
- nepromítat kontext elementu do CSS selektorů
Příklad
- zabraňuje snadnému znovupoužití na jiném místě
- chceme element
h2
(Lorem Ipsum) vizualizovat stejně jakoh2
(dolor sit amet) ale jinou barvou - existující pravidlo nám tomu brání a musíme přidat redundantní pravidlo
Příklad
- řešení dle OOCSS - přejmenování a odstranění kontextu v selektorech
Správné řešení
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
Příklad
- 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
- 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
Příklad utility tříd
Organizace souboru
- zabývá se jak pravidla CSS organizovat v souborech
ITCSS (Inverted Triangle CSS)
- od pravidel s největším dosahem (největší vizuální změna) po pravidla s nejmenším dosahem
- od pravidel s největší specifičností po pravidla s nejnižší specifičností;
- od pravidel s největší konkrétností po pravidla s nejmenší konkrétností
Kde začít?
Předloha atomický design
- je vhodné implementovat elementární části stránky, kterým se v terminologii říkají atomy
- Následně skládáním atomů → komponenty → design
- umožňuje spolupráci více vývojářů (každý pracuje na atomu)
Předloha méně atomických prvků
- vhodné vytvořit základní vizualizaci a tu následně vylepšovat
- nejprve hrubý layout stránky a následně komponenty
- pokud se komponenty opakují v různých variantách → vytvořit obecnou podobu následně upravovat specifické části
Navigace
Předchozí: Dědičnost a kaskáda Následující: Layout webové stránky - grid, flexbox, pozicování Celý okruh: 2. Informační technologie