Dnes je Přidat k oblíbeným
Každý prvek, který používáme v HTML má přednastavené výchozí hodnoty některých vlastností. Ty se použijí vždycky, pokud je ve stylopisu nezměníme. Díky tomu nemusíme znovu a znovu definovat pro každý prvek všechny vlastnosti.
Tam, kde nám na způsobu vykreslení nějakého prvku opravdu záleží, doporučuji ve stylopisu jeho parametry nadefinovat. Jinak byste si museli otestovat alespoň v těch nejpoužívanějších prohlížečích a navíc v různých rozlišeních, že to vypadá opravdu tak, jak chcete.
Dříve, než se pro prvek použijí jeho předdefinované hodnoty, tak se pokusí je "zdědit" od svého rodičovského prvku. Ne všechny vlastnosti jsou ale dědičné. Obecně jsou dědičné jenom vlastnosti, které popisují styl obsahu (barvu, typ a velikost písma, výšku řádku...). Vlastnosti, které popisují styl bloků (pozadí, okraje, rámečky) dědičné nejsou.
Prakticky to při vykreslování prvku vypadá tak, že pokud nemá ve stylopisu nadefinovanou nějakou dědičnou vlastnost, podívá se na hodnotu téhle vlastnosti u svého rodiče (prvku, ve kterém je umístěn). Pokud ji nemá nadefinovanou ani rodič, tak ji převezme od svého rodiče a takhle to jde dál, až se dostaneme až k prvku <body>. Pokud ani ten nemá tuto vlastnost určenou, teprve pak se použije výchozí hodnota. Jestliže ovšem vlastnost dědičná není a my ji ve stylopisu nedefinujeme, použije se výchozí hodnota ihned, bez jakéhokoliv dotazování se rodičovských prvků.Každý prvek může mít nadefinovanou jednu vlastnost víckrát. Buď k dokumentu tagem <link> připojíme několik stylopisů nebo současně se stylopisem nadefinujeme styl v hlavičce mezi tagy <style> a </style> nebo třeba současně s oběma způsoby jednomu prvku nadefinujeme nějaké jiné vlastnosti přímo atributem style u konkrétního tagu. V rámci jednoho stylopisu můžeme navíc zadat několik pravidel pro jeden prvek a v každém pravidle budou vlastnosti s jinými hodnotami. Co se potom použije?
V CSS existují jasná a přesná pravidla, jak vícenásobné definice stylu pro jeden prvek zpracovat- která mají přednost a jak se mohou případně doplňovat. Zde nastíním jen ta základní.
Pokud více pravidel definuje nějakou vlastnost pro stejný prvek, nejprve se porovná konkrétnost selekce (selektoru u každého pravidla). Přednost má to pravidlo, které prvek popisuje nejkonkrétněji. Nejobecněji prvek popisuje samotný název HTML tagu (h1, p, b...)- pokud jsou v selektoru, pak v počítání konkrétnosti se za něj přičte jeden bod. Konkrétnější jsou pak třídy a pseudotřídy- za ně se přičítá 10 bodů. Nejlépe vystihují prvek identifikátory- za ně je bodů 100. Přednost potom má definice s vyšší hodnotou.
Pokud máme několik pravidel se stejnou (nejvyšší) hodnotou, použije se to, které je definováno jako poslední. Pravidla jsou řazena systémem: externí stylopisy, připojené tagem <link> (následují za sebou v pořadí jak jsou připojené) --> stylopisy v hlavičce mezi <style> a </style>. Absolutní přednost mají ale pravidla, která jsou definována přímo u prvku v atributu style=. Takto definované vlastnosti jsou jakoby za 1000 bodů.
Když už víme, co dědičnost a kaskáda znamenají, ještě se je musíme naučit používat. Dědičnost nám může ušetřit spoustu psaní zbytečného kódu. Pokud chci, nastavit všemu na stránce jednotný typ písma, bez dědičnosti bych musel napsat něco takového:/
S využitím dědičnosti si to mohu významně zkrátit a neriskuji, že opominu nějaký prvek. Všechny tyto vlastnosti jsou totiž dědičné, a tak když je nadefinujeme pro tag <body>, všechny prvky obsažené mezi <body> a </body> je zdědí (pokud to potom pro nějaký konkrétní prvek neupravíme jinak).
Stejně tak je zbytečné i definování přednastavených hodnot pro jednotlivé prvky. Pro nadpis <h1> můžu klidně napsat
h1 {
font-size: 200%;
font-weight: bold;
font-style: normal;
width: auto;
height: auto;
padding: 0;
border: none;
text-decoration: none;
}
ale je to naprosto zbytečné, protože většinu těchto vlastností si CSS definuje samo. Smysl má pouze definovat font-size: 200%; font-weight: bold; a font-style: normal;, protože tyto vlastnosti si určuje sám prohlížeč a proto budou trochu jinak vypadat ve Firefoxu a jinak v Opeře. Ostatní hodnoty vlastností jsou totožné s nastavením CSS, a proto je výsledek stejný, ať je zapíšete nebo ne.
Když už umíme využít dědičnost a výchozí hodnoty, tak se ještě podívejme na využití kaskády. To už je trochu složitější problematika, ale do budoucna Vám může ušetřit hodně práce. Můžeme třeba několika různým prvkům definovat jejich stejné vlastnosti a teprve potom určíme jejich odlišnosti. Využijeme tak toho, že přednost má pozdější pravidlo.
Podobný způsob použijeme i pokud chceme jednomu prvku nadefinovat současně několik vlastností. Využijeme tzv. zkratek, které najednou definují více vlastností a přepsáním v kaskádě si ulehčíme práci.
Využít se dá i pravidlo o přednosti konkrétnější selekce. Vlastnosti všech nadpisů h1 nadefinujeme na jedno místo a některé konkrétní nadpisy potom trošku pozměníme.