Firefox 4 přinese podporu CSS calc()
Nálepky:
Č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
, min
a max
.
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.
Hm, vypadá to dobře.
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?
Specifikace je ve stádiu Working Draft, takže chování
calc
není zdaleka finální. Prot ty vendor prefixy.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áží.
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%
:)
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?
Dávno to existuje v podobe expression(). Škoda, že tieto vychytávky Internet Explorera sa zvyknú ignorovať.
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…
protože to funguje v jednom jediném prohlížeči?