<calc-keyword> CSS-Typ
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Dezember 2022 browserübergreifend verfügbar.
Der <calc-keyword>-CSS-Datentyp repräsentiert genau definierte Konstanten wie e und pi. Damit Sie nicht mehrere Ziffern dieser mathematischen Konstanten manuell eingeben oder die Werte selbst berechnen müssen, stellt CSS einige davon direkt bereit.
Syntax
Der Typ <calc-keyword> definiert numerische Konstanten, die in mathematischen CSS-Funktionen verwendet werden können.
Werte
e-
Die Basis des natürlichen Logarithmus, ungefähr
2.7182818284590452354. pi-
Das Verhältnis des Umfangs eines Kreises zu seinem Durchmesser, ungefähr
3.1415926535897932. infinity&-infinity-
Ein unendlicher Wert, der den größt- beziehungsweise kleinstmöglichen Wert angibt.
NaN-
Ein Wert, der „Not a Number“ repräsentiert und bei dem die Groß- und Kleinschreibung festgelegt ist.
Hinweise
Die Serialisierung der Argumente innerhalb von calc() folgt dem IEEE-754-Standard für Gleitkommaarithmetik. Deshalb sind bei Konstanten wie infinity und NaN einige Sonderfälle zu beachten:
-
Eine Division durch null ergibt je nach Vorzeichen des Zählers positives oder negatives
infinity. -
Wird
infinityzu einem beliebigen Wert addiert, davon subtrahiert oder damit multipliziert, ist das Ergebnisinfinity, sofern die Operation nichtNaNergibt (siehe unten). -
Jede Operation mit mindestens einem
NaN-Argument ergibtNaN. Das bedeutet, dass0 / 0,infinity / infinity,0 * infinity,infinity + (-infinity)undinfinity - infinityalleNaNergeben. -
Positive und negative null sind mögliche Werte (
0⁺und0⁻). Das hat folgende Auswirkungen:- Eine Multiplikation oder Division, die null ergibt und genau ein negatives Argument enthält (
-5 * 0oder1 / (-infinity)), ergibt0⁻. Gleiches gilt, wenn Kombinationen in anderen mathematischen Funktionen ein negatives Ergebnis liefern, dessen Wert null ist. 0⁻ + 0⁻oder0⁻ - 0ergibt0⁻. Alle anderen Additionen oder Subtraktionen, die null ergeben, liefern0⁺.- Die Multiplikation oder Division von
0⁻mit einer positiven Zahl (einschließlich0⁺) ergibt ein negatives Ergebnis (entweder0⁻oder-infinity), während die Multiplikation oder Division von0⁻mit einer negativen Zahl ein positives Ergebnis ergibt.
- Eine Multiplikation oder Division, die null ergibt und genau ein negatives Argument enthält (
Beispiele für die Anwendung dieser Regeln finden Sie im Abschnitt Unendlichkeit, NaN und Division durch null.
Hinweis:
infinity wird nur selten als Argument in calc() benötigt. Es kann jedoch helfen, fest codierte „magische Zahlen“ zu vermeiden oder sicherzustellen, dass ein bestimmter Wert immer größer als ein anderer ist.
Außerdem kann es nützlich sein, wenn deutlich werden soll, dass eine Eigenschaft für ihren Datentyp den „größtmöglichen Wert“ hat.
Formale Syntax
<calc-keyword> =
e |
pi |
infinity |
-infinity |
NaN
Beschreibung
Mathematische Konstanten können für Berechnungen nur innerhalb von mathematischen CSS-Funktionen verwendet werden. Sie sind keine CSS-Schlüsselwörter. Werden sie jedoch außerhalb einer Berechnung verwendet, werden sie wie andere Schlüsselwörter 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. e und pi fungieren daher als numerische Konstanten.
infinity und NaN unterscheiden sich etwas davon: Sie gelten als degenerierte numerische Konstanten.
Obwohl sie technisch gesehen keine Zahlen sind, verhalten sie sich wie <number>-Werte. Um beispielsweise einen unendlichen <length>-Wert zu erhalten, ist deshalb ein Ausdruck wie calc(infinity * 1px) erforderlich.
Die Werte infinity und NaN dienen hauptsächlich dazu, die Serialisierung einfacher und verständlicher zu machen. Sie können aber auch einen „größtmöglichen Wert“ angeben, da ein unendlicher Wert auf den zulässigen Bereich begrenzt wird.
Das ist nur selten sinnvoll. Wenn Sie jedoch einen unendlichen Wert verwenden möchten, ist dies deutlich einfacher, als eine enorm große Zahl in ein Stylesheet einzutragen oder magische Zahlen fest zu codieren.
Bei allen Konstanten außer NaN spielt die Groß- und Kleinschreibung keine Rolle. Daher sind calc(Pi), calc(E) und calc(InFiNiTy) gültig:
e -e E pi -pi Pi infinity -infinity InFiNiTy NaN
Die folgenden Beispiele sind alle ungültig:
nan Nan NAN
Beispiele
>e und pi in calc() verwenden
Das folgende Beispiel zeigt, wie Sie mit e innerhalb von calc() ein Element um einen exponentiell zunehmenden Winkel drehen.
Das zweite Kästchen zeigt, wie Sie pi innerhalb einer sin()-Funktion verwenden.
<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;
});
Unendlichkeit, NaN und Division durch null
Das folgende Beispiel zeigt zunächst den berechneten Wert der Eigenschaft width bei einer Division durch null. Anschließend zeigt es, wie Ausdrücke mit verschiedenen calc()-Konstanten bei der Anzeige in der Konsole serialisiert 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
| Spezifikation |
|---|
| CSS Values and Units Module Level 4> # typedef-calc-keyword> |