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ší Nejvíce hlasů
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í.

Začal jako projekt studentů Matfyzu. Český BIRD dnes pomáhá řídit provoz na největších internetových uzlech

Internet drží pohromadě i díky místům, kde se propojují sítě poskytovatelů připojení, cloudů nebo videoslužeb. S předáváním informací o tom, kudy jsou jednotlivé sítě dostupné, jim ve Frankfurtu, Londýně i Amsterdamu pomáhá český BIRD. Začal jako studentský projekt, po první verzi z roku 2000 léta spíš dřímal a soustavný vývoj obnovil až CZ.NIC. Ve své úloze uspěl tak výrazně, že největší uzly nakonec začaly platit vývoj konkurenčního softwaru, aby nebyly závislé jen na něm.

WebSocket: Jak dostat webovou aplikaci do reálného času

Chat, živé notifikace, společná úprava dokumentu nebo průběžně aktualizované kurzy. Uživatelé dnes čekají, že se webová aplikace změní ve chvíli, kdy se změní data, a ne až po stisknutí klávesy F5. Protokol WebSocket je nejrozšířenější způsob, jak mezi prohlížečem a serverem vytvořit trvalý obousměrný kanál. V článku se podíváme, jak funguje pod kapotou, jak ho použít v prohlížeči i na serveru a na co si dát pozor při nasazení do produkce.