calc

Cette fonction est expérimentale
Puisque cette fonction est toujours en développement dans certains navigateurs, veuillez consulter le tableau de compatibilité pour les préfixes à utiliser selon les navigateurs.
Il convient de noter qu'une fonctionnalité expérimentale peut voir sa syntaxe ou son comportement modifié dans le futur en fonction des évolutions de la spécification.

Résumé

La fonction CSS calc() peut être utilisée à n'importe quel endroit ou une <longueur>, <frequency>, <angle>, <time>, <number>, ou <integer> est nécessaire. Grâce à calc(), il est possible de réaliser des calculs pour déterminer la valeur d'une propriété CSS.

Il est possible d'utiliser calc() dans une autre fonction calc().

Syntaxe

 calc(expression)

Valeurs

expression
Une expression mathématique, donc le résultat est utilisé comme valeur.

Expressions

L'expression peut être n'importe quelle expression combinant les différents opérateurs suivants, en respectant l'ordre de priorité des opérateurs :

+
Addition
-
Soustraction
*
Multiplication. Au moins un des arguments doit être un <number>.
/
Division. Il n'est pas possible de divisier par une longueur. Ceci peut être utilisé, par exemple, pour que votre longueur soit une fraction d'une longueur existante.

L'opérande dans l'expression peut utiliser n'importe quelle syntaxe de longueur. Vous pouvez utiliser des unités différentes pour chacune des valeurs si vous le souhaitez. Vous pouvez aussi utiliser les parenthèses pour définir l'ordre des opérations.

Note : Une division par zéro aboutit à une erreur qui est générée par le parseur HTML.

Note : Les opérateurs + et - doivent toujours être entouré d'espaces. Par exemple l'opérande de calc(50% -8px) sera interprété comme une valeur en pourcentage suivie d'une longueur négative, l'expression est invalide. L'opérande de calc(50% - 8px) est une valeur en pourcentage suivie d'un signe moins et d'une longueur. Et ainsi, calc(8px + -50%) est interprété comme une longueur suivi d'un signe plus et d'un pourcentage négatif.

Les opérateurs * et / ne nécessitent pas d'espaces, mais les ajouter pour conserver la cohérence est recommandé.

Exemples

Positionner un objet sur l'écran avec une marge

calc() rend le positionnement des objets facile en définissant une marge. Dans cet exemple, le CSS créé une bannière qui s'étend sur toute la fenêtre, avec un espace de 40 pixels entre chaque bout de la bannière et les bordes de la fenêtre :

.banniere {
  position: absolute;
  left: 40px;
  width: 90%; /* valeur pour les navigateurs ne supportant pas calc() */
  width: calc(100% - 80px);
  border: solid black 1px;
  box-shadow: 1px 2px;
  background-color: yellow;
  padding: 6px;
  text-align: center;
}
<div class="banniere">C'est une bannière !</div>

Dimensionner automatiquement les champs d'un formulaire pour s'ajuster au conteneur

Un autre cas d'utilisaion de calc() est d'aider à s'assurer que les champs d'un formulaire s'adaptent à l'espace disponible, sans s'étendre au-delà de la bordure du conteneur, tout en conservant une marge appropriée.

Regardons un peu le CSS :

input {
  padding: 2px;
  display: block;
  width: 98%; /* valeur pour les navigateurs ne supportant pas calc() */
  width: calc(100% - 1em);
}

#boiteformulaire {
  width: 130px; /* valeur pour les navigateurs ne supportant pas calc() */
  width: calc(100%/6);
  border: 1px solid black;
  padding: 4px;
}

Dans ce cas, le formulaire est lui même défini pour utiliser un sixième de la taille disponible de la fenêtre. Ensuite, pour s'assurer que les champs gardent une taille appropriée, nous utilisons calc() pour définir qu'ils doivent être de la largeur de leur conteneur moins 1em. Enfin, le HTML suivant utilise le CSS défini :

<form>
  <div id="boiteformulaire">
  <label>Tapez quelque chose :</label>
  <input type="text">
  </div>
</form>

Spécifications

Spécification Statut Commentaire
CSS Values and Units Module Level 3
La définition de 'calc()' dans cette spécification.
Candidate Recommendation  

Compatibilité des navigateurs

Fonction Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Support de base 19 (WebKit 536.3) -webkit 4.0 (2) -moz
16.0 (16)
9 - 6 -webkit (buggy)
Sur les points d'arrêt des dégradés 19 (WebKit 536.3) -webkit 19 (19) 9 - 6 -webkit (buggy)
Fonction Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Support de base ? 4.0 (2) -moz
16.0 (16)
? ? <= iOS 6.1.3 non supporté
Sur les points d'arrêt des dégradés ? 19.0 (19) ? ? ?

Voir également

Étiquettes et contributeurs liés au document

Contributeurs à cette page : nhoizey, nicodel, teoli, tregagnon, FredB
Dernière mise à jour par : nhoizey,