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

Převod písmen na VELKÁ a malá

Převedení textu na velká nebo malá písmena.

12 minut

Možnosti stylování <iframe>

Co lze a nelze u <iframe> ovlivnit pomocí CSS a jak na změnu textu nebo barev.

10 minut

Zvýraznění aktivní sekce při rolování

Moderní způsoby zvýraznění aktivní položky navigace podle aktuální sekce – CSS i IntersectionObserver.

5 minut

CSS funkce random()

Jak v CSS generovat náhodné hodnoty pomocí random() a kdy ji použít.

6 minut

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