Ce face calc()
calc() acceptă adunare (+), scădere (-), înmulțire (*) și împărțire (/) și poate fi folosit oriunde se așteaptă o lungime, un procent, un unghi, o durată sau un număr.
Puterea lui stă în combinarea unităților pe care browserul le cunoaște abia la afișare: calc(100% - 300px) înseamnă „tot spațiul disponibil minus lățimea barei laterale”, indiferent de mărimea ecranului.
Funcția se folosește foarte des împreună cu variabilele CSS (calc(var(--baza) * 1.5)) și poate fi imbricată: calc(100% - calc(2 * 16px)), unde al doilea calc poate fi scris și doar ca paranteză.
Valori uzuale
| Valoare | Descriere |
|---|---|
a + b / a - b |
Adunare și scădere; operatorii trebuie înconjurați de spații. |
a * n |
Înmulțire; cel puțin unul dintre termeni trebuie să fie un număr fără unitate. |
a / n |
Împărțire; împărțitorul trebuie să fie un număr fără unitate în majoritatea cazurilor. |
( ... ) |
Parantezele grupează operațiile, la fel ca în matematică. |
Exemple
Exemplul 1: Conținut lângă o bară laterală de lățime fixă
Coloana principală ocupă tot ce rămâne după bara laterală de 280px și spațiul dintre ele.
.bara-laterala {
float: left;
width: 280px;
}
.continut-principal {
float: right;
width: calc(100% - 280px - 2rem);
}
Efect vizual în browser
Pe un ecran de 1200px, bara cu categoriile magazinului are 280px, iar lista de produse are 888px (1200 - 280 - 32). Dacă fereastra se micșorează la 1000px, lista se reduce automat la 688px.
Exemplul 2: Spațieri derivate dintr-o singură variabilă
Toate distanțele sunt multipli ai aceleiași valori, deci scara rămâne coerentă când schimbi variabila.
:root {
--spatiu: 8px;
}
.card-pret {
padding: calc(var(--spatiu) * 2);
margin-bottom: calc(var(--spatiu) * 3);
gap: var(--spatiu);
}
.card-pret .eticheta {
top: calc(var(--spatiu) * -1.5);
}
Efect vizual în browser
Cardul „Abonament anual – 199 lei” are padding de 16px, 24px spațiu sub el și eticheta „Reducere” ridicată cu 12px deasupra marginii. Dacă --spatiu devine 10px, toate distanțele cresc proporțional.
Greșeli frecvente
- Lipsa spațiilor în jurul lui + și -: calc(100%-2rem) este invalid și regula este ignorată. Scrie calc(100% – 2rem).
- Înmulțirea a două valori cu unitate (calc(10px * 2px)); unul dintre termeni trebuie să fie un număr simplu.
- Folosirea calc() pentru ceva ce rezolvă mai simplu clamp(), min() sau max(), cum ar fi limitarea unei mărimi între un minim și un maxim.
Comenzi înrudite
Variabile CSS (Custom Properties: var(--nume)): Stochează valori refolosibile (culori, spațieri, fonturi) care pot fi actualizate într-un singur loc pe tot site-ul.Unități de măsură în CSS (px, %, em, rem, ch, vw): Ghid al unităților CSS: absolute (px) și relative (%, em, rem, ch, lh, vw, vh, fr, cqi) și când să o folosești pe fiecare.round(), mod(), rem(), abs() și sign(): Funcții matematice care rotunjesc o valoare la un pas dat, calculează restul împărțirii sau valoarea absolută, direct în CSS.width și height (min/max): Controlează dimensiunile orizontale și verticale ale unui element, inclusiv limitele minime și maxime permise.