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

Zdroják » Zprávičky » Firefox 4 přinese podporu CSS calc()

Firefox 4 přinese podporu CSS calc()

Zprávičky Webdesign

Článek popisuje funkci calc(), zavedenou v CSS3. Tato funkce zatím není k dispozici v žádné vývojové větvi Firefoxu, ale na její implementaci se pracuje.

Firefox bude podporovat CSS hodnotu calc() (viz specifikace), která umožňuje vyjádřit hodnoty rozměrů pomocí aritmetických výrazů. To znamená, že pomocí této funkce můžete definovat rozměry DIVů, velikosti okrajů, šířku rámečků atd.

Zde je příklad layoutu, který je velmi těžké navrhnout bez  calc():

/*
* Dva zarovnané DIVy, oddělené 1em okrajem
*/
#a {
  width:75%;
  margin-right: 1em;
}
#b {
  width: -moz-calc(25% - 1em);
}

Dalčí příklad ukazuje, jak zajistit, že textové pole nebude větší než rodičovský element:

input {
  padding:2px;
  border:1px solid black;
  display:block;
  width: -moz-calc(100% - 2 * 3px);
}

Velmi zajímavá možnost, kterou calc() nabízí, je kombinace různých jednotek v jednom výrazu:

width: -moz-calc(3px + 50%/3 - 3em + 1rem);

Současná implementace podporuje operátory +, -, *, /, mod, minmax.

V plánu je rovněž podpora funkcí min() a max(), které mohou být použity např. takto:

div {
  height: -moz-min(36pt, 2em);
  width: -moz-max(50%, 18px);
}

Další podrobnosti naleznete na následujících stránkách:

Článek je překladem textu Firefox 4: CSS3 calc() z webu Mozilla Hacks. Tento text je k dispozici pod licencí Creative Commons BY-SA 3.

Komentáře

Subscribe
Upozornit na
guest
9 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
jo

Hm, vypadá to dobře.

mamlasek

ve specifikaci, na kterou je ve zpravicce odkaz, ale neni nikde zminka o „-moz-calc()“ … kdy sakra prestanou s tim -moz*, -webkit* ? pokud je to dle specifikace, proc to proste neni „calc()“ ?!
takovahle featura je pak naprosto k ho* … webkit si udela svuj calc, ktery bude mit jine parametry, a pro IE budeme mit zase nejaky ten „filter()“ … vysledkem bude nevalidni cssko, ktere se bude muset stejne pro kazdy prohlizec upravovat zvlast… takze – cim si pomuzeme?

Aleš Roubíček

Specifikace je ve stádiu Working Draft, takže chování calc není zdaleka finální. Prot ty vendor prefixy.

MCZ

Ono u těch nových implementací, které ještě nejsou „prověřeny“ nebo jejichž specifikace nemusí být úplně finální, to prefixování má docela smysl.
Přinejmenším u webkitu pak dochází po čase k přejmenování na obecný název (v nových verzích Chrome funguje -webkit-border-radius i border-radius).
Je to také mnohem lepší, než přístup Opery, která když se k nějaké implementaci CSS3 konečně dobelhá, použije standardní název a implementaci nedotáhne dokonce (viz tento bug http://www.ubervu.com/conversations/blog.attrakt.se/2010/04/annoying-opera-css3-bug-input-border.html , který v současné době stále není opraven), což použitelnost obecného pojmenování (tj. „border-radius“) samozřejmě sráží.

Rado

Prvy aj druhy priklad sa da pomocou box-sizing: border-box riesit uz teraz a netreba cakat.
V prvom staci definovat neviditelny ramcek o sirke 1em
V druhom jednoducho staci nastavit border-box a sirku 100%
:)

pas

Ano. Užitečnější by bylo, kdyby se deklarativně v CSS šlo ve výpočtu odkázat na aktuální rozměry nějakého jiného konkrétního boxu… Nechystá se to?

juraj

Dávno to existuje v podobe expression(). Škoda, že tieto vychytávky Internet Explorera sa zvyknú ignorovať.

pas

No, to není úplně ono, to je mix CSS a JavaScriptu, je to tudíž závislé na JS a navíc neefektivní z hlediska výkonu. Lepší je pak použít čistý JS.
No možná to, co si představuju, je nesmysl, nevím… inspiruju se Flexem, ovšem tam se deklarativní zápis nakonec přeloží do ActionScriptu, takže možná je rozumnější zaměřit se na JS frameworky a nekomplikovat CSS…

VfB

protože to funguje v jednom jediném prohlížeči?

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.