--- title: calc slug: Web/CSS/calc() tags: - CSS - Fonction - Reference - Web translation_of: Web/CSS/calc() ---
La fonction calc()
peut être utilisée à n'importe quel endroit où une {{cssxref("<length>")}}, {{cssxref("<frequency>")}}, {{cssxref("<angle>")}}, {{cssxref("<time>")}}, {{cssxref("<number>")}}, {{cssxref("<percentage>")}} ou {{cssxref("<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.
/* property: calc(expression) */ width: calc(100% - 80px);
Il est aussi possible d'utiliser calc()
dans une autre fonction calc()
et ainsi d'imbriquer les fonctions les unes dans les autres.
Une fonction qui prend comme seul argument une expression mathématique et dont le résultat est utilisé comme valeur de retour. L'expression peut être n'importe quelle expression combinant les différents opérateurs suivants, en respectant l'ordre de priorité des opérateurs :
+
-
*
/
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.
+
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.*
et /
ne nécessitent pas d'espaces, mais les ajouter pour conserver la cohérence est recommandé.auto
qui avait été utilisé.calc()
, auquel cas, les appels « internes » sont considérés comme des parenthèses.calc()
rend le positionnement des objets facile en définissant une marge. Dans cet exemple, le CSS crée 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 bords de la fenêtre :
.banniere { position: absolute; left: 40px; width: calc(100% - 80px); border: solid black 1px; box-shadow: 1px 2px; background-color: yellow; padding: 6px; text-align: center; box-sizing: border-box; }
<div class="banniere">C'est une bannière !</div>
{{EmbedLiveSample("Positionner_un_objet_sur_l’écran_avec_une_marge", '100%', '60')}}
Un autre cas d'utilisation 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: calc(100% - 1em); } #boiteformulaire { 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>
{{EmbedLiveSample("Dimensionner_automatiquement_les_champs_d’un_formulaire_pour_s’ajuster_au_conteneur", '100%', '80')}}
calc()
grâce aux variables CSSPrenons la feuille de style suivante :
.toto { --largeurA: 100px; --largeurB: calc(var(--largeurA) / 2); --largeurC: calc(var(--largeurB) / 2); width: var(--largeurC); }
Une fois que toutes les variables sont développées, largeurC
aura la valeur calc( calc( 100px / 2) / 2)
et sera ensuite affectée à la propriété {{cssxref("width")}} des éléments de la classe toto
. Tous les calc()
imbriqués, quel que soit leur nombre, seront convertis en parenthèses, la valeur sera donc calculée comme calc( ( 100px / 2) / 2)
(soit 25px). En résumé, utiliser des calc()
imbriqués revient à utiliser des parenthèses.
Lorsque vous utilisez calc()
pour définir la taille d'un texte, assurez-vous d'inclure une unité de longueur relative. Par exemple :
h1 { font-size: calc(1.5rem + 3vw); }
De cette façon, la taille du texte s'adaptera si le lecteur zoome/dézoome.
Spécification | État | Commentaires |
---|---|---|
{{SpecName('CSS3 Values', '#calc-notation', 'calc()')}} | {{Spec2('CSS3 Values')}} | Définition initiale. |
{{Compat("css.types.calc")}}