Moderní tvorba webových aplikací

O webu

Počítání v CSS pomocí calc()

Od Exploreru 9 a mimo starou Operu 12 lze přímo v CSS provádět jednoduché výpočty využitím calc().

3 minuty

Tato vlastnost se zadává jako hodnota obyčejné CSS vlastnosti:

element {width: calc(5px + 1em)}

Využití

Jak příklad výše napovídá, užitečná je možnost sčítat a odčítat (samozřejmě násobit i dělit) napříč různými jednotkami.

Lze tak elegantněji vyřešit:

  1. Problém sčítání width a paddingu v obsahovém boxmodelu (výchozí ve standardním režimu), kdy není elegantně řešitelná procentuální šířka a padding třeba v pixelech. (Musí se používat další obal jen pro padding a podobně.)
    element {width: 70%; padding: 10px}

    V prohlížeči podporující calc bude modrý a zelený pruh stejně široký.

    {width: 70%; padding: 10px}
    {width: calc(70% - 10px * 2); padding: 10px}
    {width: 70%}
  2. Vodorovné centrování absolutním posicováním vypadá nějak takto:
    element {position: absolute; left: 50%; width: 100px; margin-left: -50px}

    Využitím calc() lze rovnou zadat hodnotu left (50 % minus polovina šířky, tj. 100 px).

    element {position: absolute; left: calc(50% - 100px / 2); width: 100px}

    Obdobný způsob lze použít třeba i pro background-image.

  3. Počítání z lenosti – u nekulatých čísel je jejich ruční dopočítávání zdlouhavé a z výsledného čísla není úplně jasné, jak se k němu došlo. Tohle ale mohou už dnes nahradit CSS preprocesory, byť pochopitelně neumí počítat napříč jednotkami.

Starší prohlížeče

V nepodporovaných prohlížečích jde využít toho, že tyto prohlížeče hodnotu s calc() budou ignorovat.

Jde tedy zadat napřed nějakou přibližnou hodnotu a následně použít výpočet:

width: 33.3333%;
width: calc(100% / 3);

Tento fallback pro starší prohlížeče může jít zautomatisovat CSS postprocesorem. Pochopitelně s omezenými možnostmi, protože sčítat hodnoty s různými jednotkami jde přesně pouze v prohlížeči.

  • cssnext – CSS postprocesor umožňující používat zápisy „z budoucnosti“ už nyní

Zdroje a související odkazy

Související články

Má smysl měnit kursor tlačítek?

Tlačítka mají na webu po najetí jiný kursor než odkazy.

4 minuty

Stylování <input type=number>

Jak stylovat <input> pro zadávání čísel.

7 minut

Znázornění možnosti scrollování

Jak dát uživateli informaci, že je možné někam scrollovat.

10 minut

Plynulé scrollování na obsah

Jak vytvořit plynulé odrolování na určitou část stránky.

6 minut

Web jecas.cz píše Bohumil Jahoda, kontakt
Seznam všech článků
2013–2025