Funkce calc(): počítání uvnitř CSS

Funkce, která umožňuje vložit matematický výraz namísto hodnoty vlastnosti.

.el {
  width: calc(100% / 3);
  margin-bottom: calc(1em - 2px); 
}

Není to stejné jako matematika v preprocesorech?

Není. V preprocesoru se musíme spokojit s výrazy, které se mohou zkompilovat do CSS ještě předtím, než prohlížeč stránku vidí:

width: (100% / 3)
// → width: 33.33333333%

Jenže preprocesoru dochází dech v momentě, kdy potřebuji kombinovat více jednotek. Vezměme příklad třísloupcového rozvržení s vnějším okrajem o šířce 1em:

width: calc(100% / 3 - (2 * 1em))

Že se vám to někdy hodilo? Že to obcházíte podivnými hacky? Vítejte v klubu!

Podpora v prohlížečích

Funkci calc() nepodporuje hlavně Internet Explorer 8, jeho starší sourozenci a ani Android Browser. V době psaní textu mohou u průměrného českého webu tvořit maximálně něco kolem 3–4 % návštěvnosti.

Pokud funkci používáte, myslete na tyto uživatele, a pokud je to potřeba, poskytněte jim alternativu v podobě definovaného fallbacku. Může vypadat mírně jinak. Je to lepší, než když se ve starém prohlížeči rozpadnou důležité věci.

Definovaný fallback

/* IE8 a spol: */
width: 30%;
/* Moderní prohlížeče: */
width: calc(100% / 3 - (2 * 1em));

A prosím pěkně: pozor na chyby v některých nechvalně známých prohlížečích. Na této stránce doporučuji kliknout na „Known issues“ a hledat „crash“: caniuse.com/calc.

Polyfill

Vždycky říkám, že používání polyfillu na zásadní věci týkající se layoutu je dost nebezpečné. Myslete na situaci, kdy selže Javascript. Myslete na vykreslovací výkon. Myslete na svoje nervy.

Pokud je i tak použití calc ve starých prohlížečích nezbytné, z polyfillů vezměte tento: github.com/closingtag/calc-polyfill.

Detekce vlastnosti

Knihovna Modernizr umí funkci detekovat, takže směle do toho:

.no-csscalc .el {
  /* IE8 a spol: */
}
.csscalc .el {
  /* Moderní prohlížeče: */
}

Poznámka: Ukázky kódu v článku obsahují pouze standardní syntaxi podle CSS3 norem. Ve některých případech je potřeba použít vendor prefix varianty. Na aktuální situaci se podívejte na shouldiprefix.com.

Komentáře

comments powered by Disqus

Podobné články

zařazené v kategorii CSS.

BEM: Pojmenovávací konvence pro třídy v CSS

5. 6. 2017 v příručce

Block, Element, Modifier. Nově přepsaný článek o metodice pro pojmenovávání tříd v komponentách.

OOCSS: objektové psaní CSS

11. 5. 2017 v příručce

Object Oriented CSS je koncept organizace kódu, který je často vykládán mylně. Přepsal jsem proto starší článek a vezmu to do podrobna.

Veřejná školení

Dnešní webová kodéřina

Dnešní webová kodéřina

Kurz, který aktualizuje vaše znalosti webové kodéřiny. Citlivě mixuje novinky jako CSS3, Flexbox nebo SVG a osvědčené postupy. Ty nejdůležitější části si sami vyzkoušíte. Příští termín: 27. září.

14. září Mistrovský vývoj webů na WordPressu
5. října Optimalizace rychlosti načítání
19. října SVG
16. listopadu Principy Javascriptu

Cena kurzů je 4 490 Kč bez DPH. Dřívější zákazníci mají 10 % slevu.
Všechny se konají v KC Greenpoint Praha.
Můžete si je také objednat do firmy.

Vydal jsem nový e-book: „Vzhůru do (responzivního) webdesignu“

E-book „Vzhůru do (responzivního) webdesignu“

E-book „Vzhůru do (responzivního) webdesignu“
Jak navrhovat a implementovat responzivní UI?

Více informací