Calc() - Fonction CSS
Résumé des caractéristiques de la fonction calc()
Description de la fonction calc()
.
La fonction calc()
effectue un calcul dont le résultat peut être utilisé comme valeur d'une propriété.
Le calcul peut faire appel aux quatre opérations de base, comporter des parenthèses, ou utiliser d'autres fonctions mathématiques ou des fonctions trigonométriques.
Mais, à l'heure actuelle (2022), peu de ces fonctions sont reconnues par les navigateurs (2022).
Les quatre opérateurs de base sont :
+
: addition
-
: soustraction
*
: multiplication
/
: division
Les chaînes de calculs sont effectuées suivant l'ordre de priorité habituelles :
- Tout d'abord les calculs entre parenthèses,
- Ensuite les multiplications et les divisions,
- Enfin les additions et soustractions.
La fonction calc()
peut également faire appel à la fonction var()
, ce qui donne la possibilité intéressante
d'insérer la valeur d'une variable dans le calcul.
L'expression à calculer peut mélanger les unités, ce qui n'est pas correct au sens mathématique mais bien pratique dans notre cas.
Cependant l'expression doit rester cohérente : on peut additionner ou soustraire des unités différentes mais qui correspondent à un même
type de grandeur physique : par exemple il est possible d'ajouter des pixels (px
) et des centimètres (cm
),
mais pas des pixels et des angles (deg
).
Les multiplications et les divisions doivent comporter au moins un opérande sans unité.
D'autre part, le résultat de l'expression doit être d'un type conforme à ce qu'attend la propriété.
Par exemple, la propriété width
attend une dimension, l'expression calculée doit donc renvoyer une dimension si elle
est utilisée avec cette propriété.
Exemples d'expressions correctes :
width:calc(100% - 100px);
width:calc(100% / 2);
width:calc(100 * 1px);
Exemples d'expressions incorrectes :
width:calc(100px - 100);
100
est un nombre sans dimension, qui ne peut s'ajouter à une dimension.width:calc(100px - 0);
0
doit comporter une unité, même si la plupart des propriétés acceptent 0
sans unité.width:calc(45deg - 50px);
width:calc(20px * 20px);
width
n'attend pas une surface mais une dimension.
De façon générale, la multiplication et la division doivent comporter au moins un nombre sans unité.
Remarque : les espaces avant et après les opérateurs +
et -
sont nécessaires pour que l'expression soit correctement évaluée.
Sans espaces les opérateurs +
et -
sont considérés comme étant le signe de la valeur qui les suit.
Les opérateurs *
et /
peuvent s'écrire sans espace, ni avant ni après.
10px - 2px
-10px - 2px
10px + -2px
10px-2px
Améliorer la lisibilité du code CSS.
calc()
peut être utilisé simplement pour rendre plus évidentes les intentions de l'auteur.
Par exemple, si on souhaite faire tourner un élément de 1/12ème de tour, on peut écrire rotate:30deg
mais la syntaxe
rotate:calc(1turn / 12)
fait mieux ressortir le fait qu'il s'agit d'une rotation d'un douzième de tour.
calc()
et les couleurs.
A l'heure actuelle, la fonction calc()
ne sait pas calculer avec des couleurs, mais en utilisant des fonctions comme rgb()
ou hsl()
, il est possible de faire des calculs sur chacune des composantes d'une couleur.
Exemple :
color:rgb(calc(255 - 41), calc(255 - 120), calc(255 - 18));
La valeur calc()
peut être utilisée avec les propriétés suivantes :
- A la place de n'importe quelle valeur numérique, à condition qu'il y ait correspondance entre le type attendu à cet endroit et le type du résultat obtenu par la fonction calc().
Syntaxes de la fonction calc()
.
- <propriété>: calc(75% + 30px);
La fonction
calc()
accepte n'importe quelle combinaison de valeurs et d'opérateurs algébriques (+ - * /
). Les opérateurs doivent être précédés et suivis d'un espace (ils ne doivent pas être collés à la valeur qui précède, ni à celle qui suit). - <propriété>: calc(2 * min(300px, 30%, 500px));
D'autres fonctions de calcul peuvent être insérées dans l'expression fournie à
calc()
. Mais à l'heure actuelle, peu de ces fonctions sont prises en charge par les navigateurs.
Exemples d'utilisation de la fonction calc()
.
Positionner un dégradé.
L'exemple ci-dessous montre un élément avec un dégradé linéaire sur sa droite et sur sa gauche. On a souhaité que ce dégradé fasse 10 pixels de large, quelque soit la largeur totale de l'élément.
Calcul de l'emplacement des éléments en position fixée ou absolue.
Centrer un bloc positionné en absolu (position:absolute;
) ou en fixé (position:fixed;
)
n'est pas évident car la position du bloc ne dépend plus de ses marges, mais uniquement de ses
quatre propriétés top
, right
, bottom
et left
.
Le bloc bleu avec le mot "Exemple2", a été positionné en absolu.
Il reste pourtant toujours centré dans la largeur de la fenêtre du navigateur.
Observez comment la valeur pour sa propriété left
a été déterminée avec calc()
.
Quant au bloc rose (exemple3), positionné en fixe sur la gauche de l'écran, il reste centré dans le sens vertical,
grâce à l'utilisation de la fonction calc()
et de l'unité vh
(Viewport Height).
Simulateur avec la fonction calc()

Support de la fonction calc()
.
La fonction calc()
est maintenant bien prise en charge par les navigateurs.
calc()
pour évaluer une expression.calc()
lorsqu'elles sont imbriquées.calc()
utilisée dans une directive @media
.Remarques :
(1) La fonction calc()
est bogguée dans Internet Explorer.
calc()
calc()
imbriquées
calc()
dans
@media
Navigateurs sur ordinateurs :
Navigateurs sur mobiles :
Navigateurs obsolètes ou marginaux :

Internet Explorer

KaiOS Browser

Samsung Internet

Edge

Firefox

Androïd Brower

Chrome pour Androïd

Baidu Browser

QQ Browser

Safari

Safari sur IOS

Chrome

Opéra

Opéra Mobile

UC Browser pour Androïd

Firefox pour Androïd

Opéra mini
Support de la fonction calc()
.
-
Module CSS - Valeurs et unités - Niveau 3
Première présentation de la fonctioncalc()
, introduisant ainsi la possibilité d'évaluer des expressions mathématiques en CSS.13 Juillet 2001Document de travail.28 Août 2012Candidat à la recommandation. -
Module CSS - Valeurs et unités - Niveau 4
Pas de changement concernant la fonctioncalc()
.14 Août 2018Document de travail. -
Module CSS - Valeurs et unités - Niveau 5
Pas de changement concernant la fonctioncalc()
.03 Septembre 2024Document de travail.
Voir aussi : autres fonctions de calcul.
Les fonctions de calcul disponibles en CSS sont de plus en plus nombreuses. Elles couvrent les calculs mathématiques et trigonométriques courants. En voici la liste pour faciliter vos recherches. Vous pouvez également vous reporter à la spécification du W3C CSS Values and Units Module.
Fonctions :
Valeurs:
e
(base des logarithmes naturels), soit environ 2,7182818284590452354.pi
(environ 3,1415926535897932).