Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

<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 wohl definierte Konstanten wie e und pi. Anstatt dass Autoren mehrere Stellen dieser mathematischen Konstanten manuell eingeben oder berechnen müssen, werden einige direkt von CSS bereitgestellt, um Bequemlichkeit zu bieten.

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ößten/kleinsten möglichen Wert anzuzeigen.

NaN

Ein Wert, der "Not a Number" in kanonischer Schreibweise darstellt.

Hinweise

Die Serialisierung der Argumente innerhalb von calc() folgt dem IEEE-754-Standard für Gleitkomma-Mathematik, was bedeutet, dass es einige Fälle gibt, die in Bezug auf Konstanten wie infinity und NaN zu beachten sind:

  • Division durch null ergibt positive oder negative infinity, abhängig vom Vorzeichen des Zählers.

  • Addieren, Subtrahieren oder Multiplizieren von infinity mit irgendetwas ergibt infinity, es sei denn, es erzeugt NaN (siehe unten).

  • Jede Operation mit mindestens einem NaN-Argument ergibt NaN. Das bedeutet, dass 0 / 0, infinity / infinity, 0 * infinity, infinity + (-infinity) und infinity - infinity alle NaN zurückgeben.

  • Positive und negative Null sind mögliche Werte (0⁺ und 0⁻). Dies hat folgende Effekte:

    • Eine Multiplikation oder Division, die null mit genau einem negativen Argument (-5 * 0 oder 1 / (-infinity)) oder einem negativen Ergebnis aus Kombinationen in den anderen mathematischen Funktionen ergibt, liefert 0⁻.
    • 0⁻ + 0⁻ oder 0⁻ - 0 ergibt 0⁻. Alle anderen Additionen oder Subtraktionen, die null ergeben würden, ergeben 0⁺.
    • Eine Multiplikation oder Division von 0⁻ mit einer positiven Zahl (einschließlich 0⁺) ergibt ein negatives Ergebnis (entweder 0⁻ oder -infinity), während eine Multiplikation oder Division von 0⁻ mit einer negativen Zahl ein positives Ergebnis liefern.

Beispiele dafür, wie diese Regeln angewendet werden, sind im Abschnitt Infinity, NaN und Division durch null gezeigt.

Hinweis: Es ist selten erforderlich, infinity als Argument in calc() zu verwenden, aber es kann verwendet werden, um festcodierte "magische Zahlen" zu vermeiden oder sicherzustellen, dass ein bestimmter Wert immer größer als ein anderer ist. Es kann nützlich sein, wenn Sie deutlich machen möchten, dass eine Eigenschaft "den größten mö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. 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 mit dem Namen "pi", nicht auf die numerische Konstante pi.
  • line-height: e; ist ungültig, aber line-height: calc(e); ist gültig.
  • rotate(1rad * pi); funktioniert nicht, da rotate() keine Mathematikfunktion ist. Verwenden Sie rotate(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 etwas anders, sie werden als degenerierte numerische Konstanten angesehen. Obwohl sie technisch keine Zahlen sind, verhalten sie sich wie <number> Werte, sodass zum Beispiel eine unendliche <length> 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 beschränkt ist. Es ist selten, dass dies vernünftig ist, aber bei der Verwendung von Infinity ist es viel einfacher, als nur eine riesige Zahl in ein Stylesheet zu schreiben oder magische Zahlen fest zu codieren.

Alle Konstanten sind nicht groß-/klein-schreibungsempfindlich, 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()

Im folgenden Beispiel wird gezeigt, wie e innerhalb von calc() verwendet wird, um ein Element mit einem exponentiell zunehmenden Winkel zu rotieren. Die zweite Box zeigt, wie pi in einer sin()-Funktion verwendet wird.

html
<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>
js
// 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 betrachtet werden:

html
<div></div>
css
div {
  height: 50px;
  background-color: red;
  width: calc(1px / 0);
}
js
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

Siehe auch