<calc-keyword>
Der <calc-keyword>
CSS Datentyp repräsentiert gut definierte Konstanten wie e
und pi
. Anstatt dass Autoren mehrere Stellen dieser mathematischen Konstanten manuell eintippen oder sie berechnen müssen, stellt CSS einige davon zur Bequemlichkeit direkt bereit.
Syntax
Der <calc-keyword>
-Typ definiert numerische Konstanten, die in CSS-Mathematikfunktionen verwendet werden können.
Werte
e
-
Die Basis des natürlichen Logarithmus, ungefähr gleich
2.7182818284590452354
. pi
-
Das Verhältnis des Umfangs eines Kreises zu seinem Durchmesser, ungefähr gleich
3.1415926535897932
. infinity
&-infinity
-
Ein unendlicher Wert, der den größtmöglichen/kleinmöglichsten Wert anzeigt.
NaN
-
Ein Wert, der "Not a Number" in kanonischer Groß-/Kleinschreibung repräsentiert.
Hinweise
Das Serialisieren der Argumente innerhalb von calc()
folgt dem IEEE-754-Standard für Gleitkomma-Mathematik, was bedeutet, dass es einige Fälle gibt, die im Zusammenhang mit Konstanten wie infinity
und NaN
zu beachten sind:
-
Division durch null ergibt positives oder negatives
infinity
, abhängig vom Vorzeichen des Zählers. -
Das Addieren, Subtrahieren oder Multiplizieren von
infinity
mit irgendetwas ergibtinfinity
, es sei denn, es entstehtNaN
(siehe unten). -
Jede Operation mit mindestens einem
NaN
-Argument ergibtNaN
. Das bedeutet, dass0 / 0
,infinity / infinity
,0 * infinity
,infinity + (-infinity)
undinfinity - infinity
alleNaN
zurückgeben. -
Positive und negative Null sind mögliche Werte (
0⁺
und0⁻
). Dies hat folgende Auswirkungen:- Multiplikation oder Division, die null mit genau einem negativen Argument (
-5 * 0
oder1 / (-infinity)
) ergibt, oder negative Ergebnisse aus Kombinationen in den anderen Mathematikfunktionen, geben0⁻
zurück. -
0⁻ + 0⁻
oder0⁻ - 0
ergibt0⁻
. Alle anderen Additionen oder Subtraktionen, die null ergeben würden, ergeben0⁺
. - Multiplikation oder Division von
0⁻
mit einer positiven Zahl (einschließlich0⁺
) ergibt ein negatives Ergebnis (entweder0⁻
oder-infinity
), während Multiplikation oder Division von0⁻
mit einer negativen Zahl ein positives Ergebnis ergibt.
- Multiplikation oder Division, die null mit genau einem negativen Argument (
Beispiele dafür, wie diese Regeln angewendet werden, finden Sie im Abschnitt Infinity, NaN und Division durch null.
Hinweis: Es ist selten notwendig, infinity
als Argument in calc()
zu verwenden, aber es kann genutzt werden, um harte "magische Zahlen" zu vermeiden oder sicherzustellen, dass ein bestimmter Wert immer größer als ein anderer Wert ist.
Es kann nützlich sein, um deutlich zu machen, dass eine Eigenschaft "den größtmöglichen Wert" für diesen Datentyp hat.
Formale Syntax
Beschreibung
Mathematische Konstanten können nur innerhalb von CSS-Mathematikfunktionen für Berechnungen verwendet werden. Mathematikkonstanten sind keine CSS-Schlüsselwörter, aber wenn sie außerhalb einer Berechnung verwendet werden, werden sie wie jedes andere Schlüsselwort behandelt. Zum Beispiel:
animation-name: pi;
bezieht sich auf eine Animation namens "pi", nicht auf die numerische Konstantepi
.line-height: e;
ist ungültig, aberline-height: calc(e);
ist gültig.rotate(1rad * pi);
funktioniert nicht, darotate()
keine Mathematikfunktion ist. Verwenden Sierotate(calc(1rad * pi));
In Mathematikfunktionen werden <calc-keyword>
-Werte als <number>
-Werte ausgewertet, daher verhalten sich e
und pi
wie numerische Konstanten.
Sowohl infinity
als auch NaN
sind leicht anders, sie werden als degenerierte numerische Konstanten betrachtet.
Obwohl sie technisch keine Zahlen sind, verhalten sie sich wie <number>
-Werte. Um beispielsweise eine unendliche <length>
zu erhalten, ist ein Ausdruck wie calc(infinity * 1px)
erforderlich.
Die Werte infinity
und NaN
sind hauptsächlich enthalten, um die Serialisierung einfacher und offensichtlicher zu gestalten, können jedoch verwendet werden, um einen "größtmöglichen Wert" anzuzeigen, da ein unendlicher Wert auf den erlaubten Bereich begrenzt ist.
In der Praxis ist dies selten sinnvoll, aber wenn Sie Infinity verwenden, ist es viel einfacher, als einfach eine riesige Zahl in ein Stylesheet zu setzen oder magische Zahlen hart zu codieren.
Alle Konstanten sind nicht case-sensitiv außer NaN
, was calc(Pi)
, calc(E)
und calc(InFiNiTy)
gültig macht:
e -e E pi -pi Pi infinity -infinity InFiNiTy NaN
Die folgenden sind alle ungültig:
nan Nan NAN
Beispiele
Verwendung von e und pi in calc()
Das folgende Beispiel zeigt, wie e
innerhalb von calc()
verwendet wird, um ein Element mit einem exponentiell zunehmenden Winkel zu drehen.
Die zweite Box zeigt, wie pi
innerhalb einer sin()
-Funktion verwendet wird.
<div id="wrapper">
<div class="container">
<div id="e"></div>
<input type="range" min="0" max="7" step="0.01" value="0" id="e-slider" />
<label for="e-slider">e:</label>
<span id="e-value"></span>
</div>
<div class="container">
<div id="pi"></div>
<input type="range" min="0" max="1" step="0.01" value="0" id="pi-slider" />
<label for="pi-slider">pi:</label>
<span id="pi-value"></span>
</div>
</div>
// sliders
const eInput = document.querySelector("#e-slider");
const piInput = document.querySelector("#pi-slider");
// spans for displaying values
const eValue = document.querySelector("#e-value");
const piValue = document.querySelector("#pi-value");
eInput.addEventListener("input", function () {
e.style.transform = "rotate(calc(1deg * pow(" + this.value + ", e)))";
eValue.textContent = e.style.transform;
});
piInput.addEventListener("input", function () {
pi.style.rotate = "calc(sin(" + this.value + " * pi) * 100deg)";
piValue.textContent = pi.style.rotate;
});
Infinity, NaN und Division durch null
Das folgende Beispiel zeigt den berechneten Wert der width
-Eigenschaft bei Division durch null, gefolgt davon, wie die Serialisierung mit verschiedenen calc()
-Konstanten aussieht, wenn sie in der Konsole angezeigt wird:
<div></div>
div {
height: 50px;
background-color: red;
width: calc(1px / 0);
}
const div = document.querySelector("div");
console.log(div.offsetWidth); // 17895698 (infinity clamped to largest value for width)
function logSerializedWidth(value) {
div.style.width = value;
console.log(div.style.width);
}
logSerializedWidth("calc(1px / 0)"); // calc(infinity * 1px)
logSerializedWidth("calc(1px / -0)"); // calc(-infinity * 1px)
logSerializedWidth("calc(1px * -infinity * -infinity)"); // calc(infinity * 1px)
logSerializedWidth("calc(1px * -infinity * infinity)"); // calc(-infinity * 1px)
logSerializedWidth("calc(1px * (NaN + 1))"); // calc(NaN * 1px)
Spezifikationen
No specification found
No specification data found for css.types.calc-keyword
.
Check for problems with this page or contribute a missing spec_url
to mdn/browser-compat-data. Also make sure the specification is included in w3c/browser-specs.
Browser-Kompatibilität
BCD tables only load in the browser