Devel.cz Lupa Měšec Podnikatel Root Zdroják.cz DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Udržovatelný stylopis: CSS kód, ze kterého nerozbolí hlava

Technická dokonalost kaskádových stylů je samozřejmostí a nestojí už takové úsilí. Vyplatí se však začít klást důraz na udržovatelnost. Rozumíte svému stylopisu? Je jednotný, nebo spíše připomíná Babylón? Subjektivní pohled z praxe s ukázkami kódu.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

Dnešní článek patří do rubriky Subjektivně. Jejím cílem je zejména poskytovat prostor pro názory a pohledy na aktuální dění v oblasti webových technologií i na jejich vývoj do budoucna. Jedná se o osobní názory, které se nemusí vždy shodovat s názory redakce. Pokud máte co říci, pojďte k nám psát Subjektivně.

Kodeřina je hrozná dřina

„Kodeřina je hrozná dřina” — takový podtitul měl můj první blog v roce 2002. A nebylo divu. Procházeli jsme dramatickým vývojem ve využívání kaskádových stylů, válčili se zastaralými prohlížeči a zkoumali řešení, bez kterých si dnes nedovedeme představit práci client-side kodérů.

Svět kaskádových se dnes už dramaticky nevyvíjí a zdá se, že v nejbližší době ani nebude. Vizuální stránka webů neprochází jednou za rok či dva redesignem. Klíčovým slovem vývoje je evoluce nikoliv revoluce. Váš dnes napsaný stylopis vás bude doprovázet ještě za pár let.

Rozumíte svému stylopisu?

Zen Garden

Technická dokonalost je samozřejmostí a nestojí už takové úsilí. Vyplatí se však začít klást důraz na udržovatelnost. Zeptejte se svého kódu: „Budu ti rozumět, až se k tobě za rok vrátím?”

Velká část mých starších stylopisů na otázku neodpoví. Nerozumí mi, stejně jako já nerozumím jim. A tak už rok hledám best practice — způsob, jak psát udržovatelný stylopis. Podělím se s vámi, k čemu jsem zatím dospěl. Zcela subjektivně.

Technicky precizní, validní stylopis totiž bude za rok k ničemu, je-li psán způsobem, kterému rozumíte jen vy a jen v tuto chvíli. Naopak, udržovatelný stylopis mluví sám. Budete mu rozumět i za rok vy, bude mu rozumět člověk, který po vás projekt převezme nebo kolega back-end vývojář, který do něj bude chtít doplnit pár pravidel. Udržovatelnému stylopisu bude rozumět i váš velký kamarád, Firebug. Ladění v něm bude ještě méně bolestné. Udržovatelný stylopis ušetří váš drahocenný čas a peníze vašich klientů.

Dva cíle a pět zásad udržovatelného stylopisu

Našim cílem je efektivita a také „radost z práce”. Hesla, která u leckterého webdesignéra budí pobavený úsměv. Ten pak po nocích kleje u vlastního špatného kódu.

Jaké jsou naše zásady?

  1. čitelnost — kdykoliv bude kdokoliv chtít udělat zásah, měl by se vždy rychle zorientovat.
  2. přenositelnost — izolovaný kus kódu můžu snadno vzít a přenést na jiný projekt, příkladem budiž plugin FancyBox nebo resetovací stylopis.
  3. centralizace — nespravuji vlastnosti jednoho prvku na více místech.
  4. dopředná kompatibilita — pro detekci prohlížečů nevyužívám konstrukcí, které využívají jejich aktuálních a často dočasných chyb. Maximálně dodržuji standardy, ty přetrvávají.
  5. jednotnost — struktura CSS souborů, jejich obsahu a způsob pojmenovávání selektorů by měla být konzistentní i napříč projekty.

Začnu špatným příkladem:

#content #hlavicka2 p#menu li a { text-transform:uppercase;width:130px;
background:#4DBEE9;color:#292929;padding:10px 4px 10px 6px;display:block; } 

Komprese kódu je pro počítače, ne pro lidi

Vyzkoušel jsem snad všechny způsoby zápisu kaskádových stylů. A došel k tomu, že člověku nejčitelnější kód je vždy ten velikostně nejméně úsporný. Můj kód je velkorysý. Každé pravidlo má svůj vlastní řádek a je odsazeno. Kompresi kódu rád přenechám softwaru k tomu určenému, například Minify.

Náš příklad tedy „dekomprimuji” do čitelnější podoby. Seřadím vlastnosti — první dám vždy ty, které určují rozměry a pozici. Pozor na zkrácené zápisy — třeba vlastnost background se tváří nevinně, ale je nebezpečná. Kromě barvy vám předefinuje například i obrázek na pozadí.

#content #hlavicka2 p#menu li a
{
 width: 130px;
 padding: 10px 4px 10px 6px;
 display: block;
 float: left;
 text-transform: uppercase;
 background-color: #4DBEE9;
 color: #292929;
} 

Indexy a „ukecané” komentáře

Už vím, že nemusím šetřit komentáři. Počítač mi je na produkční verzi odstraní.

Komentáře mého stylopisu jsou hotový román. Najdete v nich:

  • Matematiku prvního stupně ZŠ — tedy složitěji odvoditelné výpočty rozměrů prvků.
  • Vysvětlení těžce pochopitelných jevů — stylopis pro IE6 je jich plný, často do komentářů přikládám odkazy na popis workaroundu nebo vysvětlení chyby.
  • Index z-indexů — u webů s vyšším výskytem z-index vlastností dávám do specifikační části seznam všech z-indexů.
  • Index barev — seznam všech použitých barev, jejich pojmenování a příklady použití.
  • Specifikace layoutu — rozměry gridu, pravidla typografie. Layout a barvy by měly vzniknout ve spolupráci s designérem a u větších projektů narůst do manuálu stylu.

Správa indexů jde sice proti jedné ze zásad udržovatelného stylopisu (nedělat úkony na dvou místech), ale samotná jejich existence mu velmi prospívá (zvyšuje čitelnost). Bylo by skvělé, kdyby nám je uměl vygenerovat editor CSS, podobně jako to dělá Word.

Náš kód „okecám” a uvedu do souvislostí:

#content #hlavicka2 p#menu li a
{
 width: 130px; /* Celkem 150px - polovina sirky sloupce */
 padding: 10px 4px 10px 6px;
 ...
} 

Sémantické, jednoznačné a nekomplikované identifikátory

Názvy identifikátorů mají popisovat obsah, nikoliv formu ( .float-left-box není nejlepší řešení). Druhé pravidlo je, že by měly „umět mluvit”. Sebepopisnost je velmi důležitá  —  zásadně vynechávám zkratková pojmenování nebo babylónštinu – tedy nejednotnost jazyka ( .head-modry).

Babylónštna nesmí vzniknout ani při komunikaci s jinými členy týmu. Na posledním projektu například pojmenovávání přebírám z Rails controllerů od kolegy Karla Minaříka. Oba se pak shodneme na pojmenování určitých částí webu a nepotřebujeme překladatele.

Nesnažím se kaskádou popsat umístění prvku ve struktuře dokumentu. To se může snadno změnit. Proto před zápisem .page-home .articles .item dám přednost .home-page-article. Stejně tak se mohou změnit HTML prvky, proto na ně CSS selektory co nejméně navazuji ( #menu namísto  p#menu).

V našemu kódu odlehčíme selektor a ve výsledku bude vypadat takhle:

#navigation a
{
 width: 130px; /* Celkem 150px - polovina sirky sloupce */
 padding: 10px 4px 10px 6px;
 display: block;
 float: left;
 text-transform: uppercase;
 background-color: #4DBEE9;
 color: #292929;
} 

Zdá se, že k naší ukázkové definici se můžu za rok vrátit a rychle pochopit, co jsem jí myslel, nebo předat kolegovi, až se za dobře odvedenou práci odměním roční dovolenou v Karibiku.

Pokračování příště

V další části se podíváme od pravidel výše — na centrální stylopis a jednotnou strukturu souboru. Načneme také ožehavé téma: používat nebo nepoužívat hacky?


Martin Michálek se zabývá praktickým webdesignem od roku 1997. Posledních 7 let ve studiu Shortcat. Aktuálně se kromě jiného koncentruje na efektivitu webdesignérské práce. Píše blog Vzhůru dolů.

Anketa

Rozumíte svému stylopisu?

       

Martin Michálek

Martin Michálek

Webdesignér ve Studiu Shortcat. Zabývá se technologickou stránkou uživatelského rozhraní. Píše blog Vzhůru dolů a tweetuje.

Školení: Úvod do UX (user experince)

DW - Školení použitelnosti
  • Použitelný web mají návštěvníci rádi a lépe vrací investované peníze.
  • Poradíme vám, které metody využít a co vám to přinese.
  • Jak na uživatelský výzkum a návrh webu.
  • Naučíte se, jak rychle a levně otestovat web.

Další informace o školení Úvod do UX »

Přehled názorů

RE: Udržovatelný stylopis: CSS kód, ze kterého nerozbolí hlava
yossarian 18. 3. 2009 00:15
Nový
└ 
RE: Udržovatelný stylopis: CSS kód, ze kterého nerozbolí hlava
Roman Vašíček 18. 3. 2009 09:44
Nový
 
└ 
RE: Udržovatelný stylopis: CSS kód, ze kterého nerozbolí hlava
Martin Michálek 18. 3. 2009 11:37
Nový
Špatný příklad
Hoween 18. 3. 2009 06:58
Nový
├ 
Re: Špatný příklad
VfB 18. 3. 2009 07:07
Nový
│
└ 
Re: Špatný příklad
Štěpán Pilař 18. 3. 2009 07:53
Nový
│
 
├ 
Re: Špatný příklad
Hoween 18. 3. 2009 08:42
Nový
│
 
│
└ 
Re: Špatný příklad
WuDo 18. 3. 2009 09:51
Nový
│
 
│
 
└ 
Re: Špatný příklad
Hoween 18. 3. 2009 09:58
Nový
│
 
├ 
Re: Špatný příklad
Plaváček 18. 3. 2009 10:59
Nový
│
 
│
└ 
Re: Špatný příklad
Hoween 18. 3. 2009 11:06
Nový
│
 
│
 
└ 
Re: Špatný příklad
Plaváček 18. 3. 2009 11:14
Nový
│
 
│
 
 
└ 
Re: Špatný příklad
Karel Fučík 18. 3. 2009 12:19
Nový
│
 
└ 
Re: Špatný příklad
VfB 20. 3. 2009 12:54
Nový
│
 
 
└ 
Re: Špatný příklad
Hoween 20. 3. 2009 13:07
Nový
└ 
Re: Špatný příklad
Martin Michálek 18. 3. 2009 11:55
Nový
 
└ 
Re: Špatný příklad
Hoween 18. 3. 2009 12:17
Nový
 
 
├ 
Re: Špatný příklad
Radovan 18. 3. 2009 12:31
Nový
 
 
│
└ 
Re: Špatný příklad
Hoween 18. 3. 2009 12:44
Nový
 
 
│
 
├ 
Re: Špatný příklad
Radovan 18. 3. 2009 12:51
Nový
 
 
│
 
├ 
Re: Špatný příklad
Lokutus 18. 3. 2009 14:55
Nový
 
 
│
 
│
└ 
Re: Špatný příklad
mofo 18. 3. 2009 21:20
Nový
 
 
│
 
└ 
Re: Špatný příklad
Ash 19. 3. 2009 20:00
Nový
 
 
│
 
 
└ 
Re: Špatný příklad
Hoween 19. 3. 2009 22:54
Nový
 
 
│
 
 
 
└ 
Re: Špatný příklad
Radovan 20. 3. 2009 07:22
Nový
 
 
└ 
Re: Špatný příklad
Martin Kopta 25. 3. 2009 14:11
Nový
Webdeveloper, Firebug
David Biňovec 18. 3. 2009 08:37
Nový
└ 
Re: Webdeveloper, Firebug
Martin Michálek 18. 3. 2009 12:08
Nový
 
├ 
Re: Webdeveloper, Firebug
Hoween 18. 3. 2009 12:19
Nový
 
│
└ 
Re: Webdeveloper, Firebug
Martin Michálek 18. 3. 2009 12:52
Nový
 
│
 
└ 
Re: Webdeveloper, Firebug
Hoween 18. 3. 2009 12:56
Nový
 
│
 
 
└ 
Re: Webdeveloper, Firebug
Martin Michálek 18. 3. 2009 14:13
Nový
 
├ 
Re: Webdeveloper, Firebug
Radovan 18. 3. 2009 12:27
Nový
 
├ 
Re: Webdeveloper, Firebug
anonymní uživatel 20. 3. 2009 09:41
Nový
 
└ 
Re: Webdeveloper, Firebug
VfB 20. 3. 2009 13:04
Nový
 
 
└ 
Re: Webdeveloper, Firebug
Hoween 20. 3. 2009 13:08
Nový
Jednoriadkovy zapis pravidiel
Ľuboš Kmeťko 18. 3. 2009 09:06
Nový
├ 
Re: Jednoriadkovy zapis pravidiel
karmi 18. 3. 2009 10:08
Nový
│
└ 
Re: Jednoriadkovy zapis pravidiel
Hoween 18. 3. 2009 10:27
Nový
│
 
└ 
Re: Jednoriadkovy zapis pravidiel
karmi 18. 3. 2009 10:54
Nový
│
 
 
└ 
Re: Jednoriadkovy zapis pravidiel
Hoween 18. 3. 2009 11:04
Nový
│
 
 
 
├ 
Re: Jednoriadkovy zapis pravidiel
karmi 18. 3. 2009 11:19
Nový
│
 
 
 
│
└ 
Re: Jednoriadkovy zapis pravidiel
Hoween 18. 3. 2009 11:32
Nový
│
 
 
 
│
 
└ 
Re: Jednoriadkovy zapis pravidiel
Radovan 18. 3. 2009 12:12
Nový
│
 
 
 
│
 
 
└ 
Re: Jednoriadkovy zapis pravidiel
Hoween 18. 3. 2009 12:21
Nový
│
 
 
 
│
 
 
 
└ 
Re: Jednoriadkovy zapis pravidiel
Radovan 18. 3. 2009 12:35
Nový
│
 
 
 
│
 
 
 
 
├ 
Re: Jednoriadkovy zapis pravidiel
Hoween 18. 3. 2009 13:29
Nový
│
 
 
 
│
 
 
 
 
│
└ 
Re: Jednoriadkovy zapis pravidiel
Radovan 18. 3. 2009 13:57
Nový
│
 
 
 
│
 
 
 
 
└ 
Re: Jednoriadkovy zapis pravidiel
Karel 18. 3. 2009 14:01
Nový
│
 
 
 
└ 
Re: Jednoriadkovy zapis pravidiel
Martin Michálek 18. 3. 2009 12:31
Nový
│
 
 
 
 
└ 
Re: Jednoriadkovy zapis pravidiel
Hoween 18. 3. 2009 12:47
Nový
└ 
Re: Jednoriadkovy zapis pravidiel
Martin Michálek 18. 3. 2009 12:21
Nový
 
└ 
Re: Jednoriadkovy zapis pravidiel
Ľuboš Kmeťko 18. 3. 2009 23:13
Nový
Moje pravidla
Lukáš Francálek 18. 3. 2009 11:35
Nový
└ 
Re: Moje pravidla
Martin Michálek 18. 3. 2009 12:45
Nový
 
└ 
Re: Moje pravidla
Lukáš Francálek 18. 3. 2009 12:57
Nový
inline?
Tarmaq 18. 3. 2009 13:17
Nový
├ 
Re: inline?
Hoween 18. 3. 2009 13:21
Nový
│
└ 
Re: inline?
Tarmaq 18. 3. 2009 14:19
Nový
└ 
Re: inline?
anonymní uživatel 18. 3. 2009 13:54
Nový
tip na web
alian 18. 3. 2009 13:45
Nový
abeceda
Ja. 18. 3. 2009 17:27
Nový
└ 
Re: abeceda
mofo 18. 3. 2009 21:25
Nový
 
└ 
Re: abeceda
Ja. 19. 3. 2009 09:50
Nový
Můj styl
Gappa 18. 3. 2009 19:55
Nový
├ 
Re: Můj styl
Gappa 18. 3. 2009 20:05
Nový
└ 
Re: Můj styl
Hoween 18. 3. 2009 20:06
Nový
 
└ 
Re: Můj styl
Gappa 18. 3. 2009 20:09
Nový
 
 
└ 
Re: Můj styl
Gappa 18. 3. 2009 20:09
Nový
výhody inline zápisu + pár odkazů do světa
Jan Sládek 18. 3. 2009 20:09
Nový
├ 
Re: výhody inline zápisu + pár odkazů do světa
Ľuboš Kmeťko 18. 3. 2009 23:25
Nový
│
└ 
Re: výhody inline zápisu + pár odkazů do světa
Jan Sládek 18. 3. 2009 23:42
Nový
└ 
Re: výhody inline zápisu + pár odkazů do světa
Martin Michálek 19. 3. 2009 09:44
Nový
 
└ 
Re: výhody inline zápisu + pár odkazů do světa
Jan Sládek 19. 3. 2009 13:30
Nový
 
 
├ 
Re: výhody inline zápisu + pár odkazů do světa
Martin Michálek 21. 3. 2009 11:25
Nový
 
 
└ 
quqwbaq
quqwbaq 23. 6. 2009 18:31
Nový
pod seba a tabulatorovat
ivusko 18. 3. 2009 23:37
Nový
OMG
aprilchild 19. 3. 2009 19:26
Nový
diskusia
Ján Januška 21. 3. 2009 17:31
Nový
Můj styl
Petr Steinbauer 25. 3. 2009 10:03
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem