<calc-keyword>
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. It’s been available across browsers since Dezember 2022.
* Some parts of this feature may have varying levels of support.
Der <calc-keyword> CSS Datentyp repräsentiert klar definierte Konstanten wie e und pi. Anstatt von Autoren zu verlangen, dass sie diese mathematischen Konstanten manuell mit mehreren Stellen eingeben oder berechnen, stellt CSS einige von ihnen direkt zur Verfügung, um den Komfort zu erhöhen.
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 verwendet wird, um den größtmöglichen bzw. kleinstmöglichen Wert anzuzeigen.
NaN-
Ein Wert, der "Nicht eine Zahl" im kanonischen Fall darstellt.
Anmerkungen
Das Serialisieren der Argumente innerhalb von calc() folgt dem IEEE-754-Standard für Gleitkommazahlen, was bedeutet, dass es einige Fälle gibt, die im Hinblick auf Konstanten wie infinity und NaN zu beachten sind:
-
Division durch null gibt je nach Vorzeichen des Zählers positive oder negative
infinityzurück. -
Addition, Subtraktion oder Multiplikation von
infinitymit allem 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 - infinityalleNaNzurü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 * 0oder1 / (-infinity)) oder negativem Ergebnis aus Kombinationen in den anderen mathematischen Funktionen ergibt, gibt0⁻zurück. 0⁻ + 0⁻oder0⁻ - 0geben0⁻zurück. Alle anderen Additionen oder Subtraktionen, die Null ergeben würden, geben0⁺zurück.- 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 über Infinity, NaN und Division durch null.
Hinweis:
Es ist selten, dass infinity als Argument in calc() verwendet werden muss, aber es kann verwendet werden, um festkodierte "magische Zahlen" zu vermeiden oder sicherzustellen, dass ein gewisser Wert immer größer als ein anderer Wert ist.
Es kann nützlich sein, wenn Sie deutlich machen müssen, dass eine Eigenschaft den "größtmöglichen Wert" für diesen Datentyp hat.
Formale Syntax
<calc-keyword> =
e |
pi |
infinity |
-infinity |
NaN
Beschreibung
Mathematische Konstanten können nur innerhalb von CSS-Mathematikfunktionen für Berechnungen verwendet werden. Mathematische Konstanten 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, weilrotate()keine mathematische Funktion ist. Verwenden Sierotate(calc(1rad * pi));
In mathematischen Funktionen werden <calc-keyword>-Werte als <number>-Werte ausgewertet, daher verhalten sich e und pi wie numerische Konstanten.
Sowohl infinity als auch NaN sind leicht unterschiedlich; sie werden als degenerierte numerische Konstanten betrachtet.
Obwohl sie technisch gesehen keine Zahlen sind, verhalten sie sich wie <number>-Werte, sodass ein unendliches <length>, zum Beispiel, einen Ausdruck wie calc(infinity * 1px) erfordert.
Die Werte infinity und NaN sind hauptsächlich enthalten, um die Serialisierung einfacher und offensichtlicher zu machen, können aber verwendet werden, um einen "größtmöglichen Wert" anzuzeigen, da ein unendlicher Wert auf den erlaubten Bereich begrenzt wird.
Es ist selten, dass dies vernünftig ist, aber wenn man Unendlichkeit verwendet, ist es viel einfacher, als einfach eine riesige Zahl in ein Stylesheet zu schreiben oder magische Zahlen fest zu kodieren.
Alle Konstanten sind nicht zwischen Groß- und Kleinschreibung unterscheidend, 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 ansteigenden Winkel zu drehen.
Das zweite Feld 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 der Division durch null, gefolgt davon, wie die Serialisierung mit verschiedenen calc() Konstanten aussieht, wenn sie in der Konsole betrachtet werden:
<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
| Specification |
|---|
| CSS Values and Units Module Level 4> # typedef-calc-keyword> |
Browser-Kompatibilität
Loading…