Přejít k navigační liště

Zdroják » Webdesign » Dopočítávání CSS hodnot

Dopočítávání CSS hodnot

Články Webdesign

Jak funguje dopočítávání hodnot v kaskádových stylech. Zajímavou součástí CSS je doplňování neuvedených vlastností a hodnot.

Nálepky:

Článek původně vyšel na autorově webu Je čas.

Čtyři strany

První případ je nastavování hodnot pro čtyři strany, typicky pro vlastnosti padding, margin, border-color/width/style, outline-color/width/style a podobně.

Tyto vlastnosti jsou zkratkami pro *-top, *-right, *-bottom a *-left (v uvedeném pořadí).

Zapíšeme-li:

div {
  margin: 1em 2em 3em 4em;
}

Je to ekvivalent (nezkráceného) zápisu.

div {
  margin-top: 1em;
  margin-right: 2em;
  margin-bottom: 3em;
  margin-left: 4em;
}

Společná vlastnost (zkratka) ale může mít nastaveno kromě čtyř hodnot i méně — 3, 2 nebo jednu.

Jedna hodnota

div {
  margin: 1em;
}

Nastaví všem stranám totéž:

div {
  margin-top: 1em;
  margin-right: 1em;
  margin-bottom: 1em;
  margin-left: 1em;
}

Jedna hodnota nastavená na auto se často používá při centrování.

Dvě hodnoty

div {
  margin: 1em 2em;
}

První hodnota nastaví obě svislé vlastnosti (*-top a *-bottom), druhá potom vodorovné (*-right a *-left).

div {
  margin-top: 1em;
  margin-right: 2em;
  margin-bottom: 1em;
  margin-left: 2em;
}

Tři hodnoty

div {
  margin: 1em 2em 3em;
}

Od dvou hodnot se liší tím, že třetí hodnota přepíše *-bottom. Vodorovné hodnoty (*-right/*-left) se budou rovnat – podle druhé hodnoty:

div {
  margin-top: 1em;
  margin-right: 2em;
  margin-bottom: 3em;
  margin-left: 2em;
}

Zkratky

Zajímavé věci se potom dějí u zkratek více vlastností s ohledem na výchozí/zděděné hodnoty.

Třeba následující kód vytvoří (nejspíš) 3 pixely tlustý černý rámeček. Nevěříte?

div {
  border: solid;
}

Cca tři pixely (medium) jsou výchozí tloušťka rámečku a barva se zdědí z currentColor/color.

Resetování

Použití zkratky má další zajímavý efekt — zresetuje nenastavené specifické vlastnosti.

div {  
  border-width: 10px;
  border-style: solid;
  border-color: red;
  border: dotted;
}

Tento <div> tedy nebude mít 10px tečkovaný červený rámeček, ale 3px tečkovaný černý. Všechny konkrétnější deklarace se přepíší – ukázka.

Poznámka: IE 7 a starší neuvedené hodnoty neresetují, ale dědí, takže ukázka v nich bude 10px tlustá, červená a tečkovaná (dotted).

Záleží na pořadí?

CSS se snaží fungovat chytře a hádat vlastnosti, ke kterým hodnota patří. Tento kód proto vytvoří 5px rámeček, ačkoliv je pořadí značně nestandardní (obyvykle se uvádí obráceně – tloušťka styl barva).

div {
  border: red solid 5px;
}

Je až možná trochu překvapivé, jak často se dá z kontextu odvodit, co daná hodnota nastavuje.

Není ale asi úplně šťastné na to spoléhat. Třeba u nastavování písma nebude následující kód fungovat podle očekávání:

div {
  font: 'Arial';
}

Při použití zkratky font musí být vždy uvedena minimálně velikost a písmo.

Zneplatnění

CSS funguje v prohlížečích tak, že když v deklaraci vlastnosti nejde něco, čemu nerozumí, celou deklaraci zahodí.

div {
  border: 1px solid neznamaBarva;
}

Jde toho využít pro hack starších prohlížečů.

Zajímavé využití zmínil Chamurappi na Diskusi JPW, kdy se použije „vícenásobný“ obrázek pro rozhodnutí, zda se má vložit PNG/SVG. Vícenásobná pozadí fungují stejně jako SVG od IE 9, takže starší prohlížeče nastavení SVG obrázku zahodí.

.symbol {
  background: url("symbol.png");
  background: url("symbol.svg"), transparent;
}

Komentáře

Odebírat
Upozornit na
guest
3 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
Zobrazit všechny komentáře
Zdeněk Kopš

Tohle mi opravdu vadi – ano, IE8- jsou starsi prohlizece, ale nejsou jedine. Skoro kazdy prohlizec ma sve starsi verze a tyto zapisy se mohou chovat odlisne. Napriklad jisty stary webkit podporuje vicenasobne pozadi, ale podpora svg spis neni nez je. Google nastesti stare verze neposkytuje, takze bfu je spise nemaji. A bohuzel Google starsi verze neposkytuje, takze se to obtizne testuje.

Petr Prchal

Mno, ono jde o to, ze IE8 se vam samo nezaktualizuje, na nekterych systemech to ani nedokazete… Ostatni jsou aktualizovatelne/delaji to sami…

Martin Hassman

Myslím, že přehled podpory v prohlížečích na http://caniuse.com/#feat=multibackgrounds ukazuje, že se jedná o košer tvrzení.

Přístupnost není jen o splnění norem: nový pohled na inkluzivní design

Přístupnost a inkluze možná nepatří mezi nejžhavější témata digitálního světa – dokud o nich nezačne mluvit Vitaly Friedman. Na WebExpo 2024 předvedl, že inkluzivní design není jen o splněných checkboxech, ale hlavně o lidech. S energií sobě vlastní obrátil zažité přístupy naruby a ukázal, že skutečně přístupný web je nejen možný, ale i nezbytný.

Efektivnější vývoj UI nebo API: Co si odnést z WebExpo 2025?

Různé
Komentáře: 0
Jak snadno implementovat moderní uživatelské rozhraní? Které funkce brzdí rychlost vašeho webu? A kdy raději sami přibrzdit, abychom využitím AI nepřekročili etické principy? Debatu aktuálních dev témat rozdmýchá sedmnáctý ročník technologické konference WebExpo, která proběhne v Praze od 28. do 30. května. Který talk či workshop si rozhodně nenechat ujít? Toto je náš redakční výběr z vývojářských hroznů.

Zapřáhněte AI jako nikdy předtím. Květnová konference WebExpo přivítá hvězdy technologického světa

Od 28. do 30. května 2025 promění pražský Palác Lucerna na tři dny technologická konference WebExpo. Na programu je více než 80 přednášek a workshopů od expertů z celého světa. WebExpo tradičně propojuje vývojáře, designéry, marketéry i byznysové lídry a nabízí praktické dovednosti, strategické myšlení a přináší nejnovější trendy nejen v oblasti AI.