Funktionen

The CSS Podcast – 020: Functions

Bisher haben Sie in diesem Kurs verschiedene CSS-Funktionen kennengelernt. Im Modul grid haben Sie bereits minmax() und fit-content() kennengelernt, mit denen Sie die Größe von Elementen festlegen können. Im Modul color haben Sie die Funktionen rgb() und hsl() kennengelernt, mit denen Sie Farben definieren können.

Wie viele andere Programmiersprachen hat auch CSS viele integrierte Funktionen, auf die Sie bei Bedarf zugreifen können.

Jede CSS-Funktion hat einen bestimmten Zweck. In dieser Lektion erhalten Sie einen allgemeinen Überblick, damit Sie besser verstehen, wo und wie sie verwendet werden.

Was ist eine Funktion?

Eine Funktion ist ein benannter, in sich geschlossener Code, der eine bestimmte Aufgabe ausführt. Eine Funktion erhält einen Namen, sodass Sie sie in Ihrem Code aufrufen und Daten an die Funktion übergeben können. Dies wird als Übergabe von Argumenten bezeichnet.

Ein Diagramm einer Funktion wie oben beschrieben

Viele CSS-Funktionen sind reine Funktionen. Wenn Sie also dieselben Argumente an sie übergeben, erhalten Sie unabhängig davon, was im restlichen Code passiert, immer dasselbe Ergebnis. Diese Funktionen werden häufig neu berechnet, wenn sich Werte in Ihrem CSS-Code ändern, ähnlich wie bei anderen Elementen in der Sprache, z. B. berechnete kaskadierte Werte wie currentColor.

In CSS können Sie nur die bereitgestellten Funktionen verwenden, anstatt eigene zu schreiben. Funktionen können jedoch in einigen Kontexten ineinander verschachtelt werden, um ihnen mehr Flexibilität zu bieten. Darauf gehen wir später in diesem Modul noch genauer ein.

Funktionsselektoren

.post :is(h1, h2, h3) {
    line-height: 1.2;
}

Sie haben im Pseudoklassenmodul mehr über Funktionsselektoren erfahren, die Funktionen wie :is() und :not() detailliert beschreiben. Die an diese Funktionen übergebenen Argumente sind CSS-Selektoren, die dann ausgewertet werden. Wenn es eine Übereinstimmung mit Elementen gibt, wird der Rest der CSS-Regel auf sie angewendet.

Benutzerdefinierte Eigenschaften und var()

:root {
    --base-color: #ff00ff;
}

.my-element {
    background: var(--base-color);
}

Eine benutzerdefinierte Eigenschaft ist eine Variable, mit der Sie Werte in Ihrem CSS-Code tokenisieren können. Benutzerdefinierte Eigenschaften werden auch von der Kaskade beeinflusst. Das bedeutet, dass sie kontextbezogen bearbeitet oder neu definiert werden können. Einem benutzerdefinierten Attribut müssen zwei Bindestriche (--) vorangestellt werden. Außerdem muss die Groß-/Kleinschreibung beachtet werden.

Für die Funktion var() ist ein erforderliches Argument erforderlich: das benutzerdefinierte Attribut, das Sie als Wert zurückgeben möchten. Im Snippet oben wurde --base-color der Funktion var() als Argument übergeben. Wenn --base-color definiert ist, gibt var() den Wert zurück.

.my-element {
    background: var(--base-color, hotpink);
}

Sie können auch einen Fallback-Deklarationswert an die var()-Funktion übergeben. Wenn --base-color nicht gefunden werden kann, wird stattdessen die übergebene deklaration verwendet, die in diesem Beispiel die Farbe hotpink ist.

Funktionen, die einen Wert zurückgeben

Die var()-Funktion ist nur eine der CSS-Funktionen, die einen Wert zurückgeben. Funktionen wie attr() und url() folgen einer ähnlichen Struktur wie var(). Sie übergeben ein oder mehrere Argumente und verwenden sie auf der rechten Seite Ihrer CSS-Deklaration.

a::after {
  content: attr(href);
}

Die Funktion attr() nimmt den Inhalt des href-Attributs des <a>-Elements an und legt ihn als content des Pseudoelements ::after fest. Wenn sich der Wert des Attributs href des <a>-Elements ändern sollte, wird dies automatisch in diesem content-Attribut berücksichtigt.

.my-element {
    background-image: url('/path/to/image.jpg');
}

Die Funktion url() verwendet eine string-URL, die zum Laden von Bildern, Schriftarten und Inhalten verwendet wird. Wenn keine gültige URL übergeben wird oder die Ressource, auf die die URL verweist, nicht gefunden wird, wird von der url()-Funktion nichts zurückgegeben.

Farbfunktionen

Sie haben alles über Farbfunktionen im Modul color gelernt. Wir empfehlen Ihnen dringend, diesen Artikel zu lesen, falls Sie ihn noch nicht gelesen haben.

In CSS sind u. a. rgb(), rgba(), hsl(), hsla(), hwb(), lab() und lch() verfügbar. Alle haben eine ähnliche Form, bei der Konfigurationsargumente übergeben und eine Farbe zurückgegeben wird.

Mathematische Ausdrücke

Wie viele andere Programmiersprachen bietet CSS nützliche mathematische Funktionen zur Unterstützung verschiedener Berechnungsarten.

calc()

Unterstützte Browser

  • 26
  • 12
  • 16
  • 7

Quelle

Die Funktion calc() verwendet einen einzelnen mathematischen Ausdruck als Parameter. Dieser mathematische Ausdruck kann eine Mischung aus Typen sein, z. B. Länge, Zahl, Winkel und Frequenz. Einheiten können auch gemischt werden.

.my-element {
    width: calc(100% - 2rem);
}

In diesem Beispiel wird mit der Funktion calc() die Breite eines Elements auf 100% des übergeordneten Elements festgelegt, in dem das Element enthalten ist. Dann wird 2rem von diesem berechneten Wert entfernt.

:root {
  --root-height: 5rem;
}

.my-element {
  width: calc(calc(10% + 2rem) * 2);
  height: calc(var(--root-height) * 3);
}

Die calc()-Funktion kann in einer anderen calc()-Funktion verschachtelt sein. Sie können auch benutzerdefinierte Eigenschaften in einer var()-Funktion als Teil eines Ausdrucks übergeben.

min() und max()

Unterstützte Browser

  • 79
  • 79
  • 75
  • 11.1

Quelle

Die Funktion min() gibt den kleinsten berechneten Wert eines oder mehrerer übergebener Argumente zurück. Die Funktion max() bewirkt das Gegenteil: Sie ruft den größten Wert von einem oder mehreren übergebenen Argumenten ab.

.my-element {
  width: min(20vw, 30rem);
  height: max(20vh, 20rem);
}

In diesem Beispiel sollte die Breite der kleinste Wert zwischen 20vw (20% der Breite des Darstellungsbereichs) und 30rem sein. Die Höhe sollte der größte Wert zwischen 20vh (20% der Höhe des Darstellungsbereichs) und 20rem sein.

Clamp()

Unterstützte Browser

  • 79
  • 79
  • 75
  • 13.1

Quelle

Die Funktion clamp() verwendet drei Argumente: die Mindestgröße, die ideale Größe und das Maximum.

h1 {
  font-size: clamp(2rem, 1rem + 3vw, 3rem);
}

In diesem Beispiel ist font-size basierend auf der Breite des Darstellungsbereichs fließend. Die vw-Einheit wird einer rem-Einheit hinzugefügt, um das Zoomen des Bildschirms zu erleichtern, da eine vw-Einheit unabhängig von der Zoomstufe dieselbe Größe hat. Durch die Multiplikation mit einer rem-Einheit basierend auf der Stammschriftgröße erhält die Funktion clamp() einen relativen Berechnungspunkt.

Weitere Informationen zu den Funktionen min(), max() und clamp() finden Sie in diesem Artikel.

Formen

Bei den CSS-Eigenschaften clip-path, offset-path und shape-outside werden Formen verwendet, um das Rechteck visuell abzugrenzen oder eine Form für den Inhalt bereitzustellen.

Es gibt Formfunktionen, die mit beiden Eigenschaften verwendet werden können. Bei einfachen Formen wie circle(), ellipse() und inset() wird die Größe mithilfe von Konfigurationsargumenten festgelegt. Bei komplexeren Formen wie polygon() werden durch Kommas getrennte Paare aus X- und Y-Achsenwerten verwendet, um benutzerdefinierte Formen zu erstellen.

.circle {
  clip-path: circle(50%);
}

.polygon {
  clip-path: polygon(0% 0%, 100% 0%, 100% 75%, 75% 75%, 75% 100%, 50% 75%, 0% 75%);
}

Wie polygon() gibt es auch eine path()-Funktion, die eine SVG-Füllregel als Argument verwendet. Dies ermöglicht hochkomplexe Formen, die in einem Grafiktool wie Illustrator oder Inkscape gezeichnet und dann in Ihren CSS-Code kopiert werden können.

Transformationen

In dieser Übersicht über CSS-Funktionen stellen wir Ihnen noch die Transformationsfunktionen vor, mit denen sich Elemente verzerren, vergrößern oder verkleinern lassen. Alle der folgenden Funktionen werden mit dem Attribut transform verwendet.

Rotation

Unterstützte Browser

  • 1
  • 12
  • 3,5
  • 3.1

Quelle

Sie können ein Element mit der Funktion rotate() drehen. Damit wird ein Element um seine Mittelachse gedreht. Sie können stattdessen auch die Funktionen rotateX(), rotateY() und rotateZ() verwenden, um ein Element um eine bestimmte Achse zu drehen. Sie können Grad, Drehung und Bogenmaß übergeben, um die Drehung zu bestimmen.

.my-element {
  transform: rotateX(10deg) rotateY(10deg) rotateZ(10deg);
}

Die Funktion rotate3d() verwendet vier Argumente.

Unterstützte Browser

  • 12
  • 12
  • 10
  • 4

Quelle

Die ersten 3 Argumente sind Zahlen, die die X-, Y- und Z-Koordinaten definieren. Das vierte Argument ist die Rotation, bei der wie bei den anderen Rotationsfunktionen Grad, Winkel und Drehungen akzeptiert werden.

.my-element {
  transform: rotate3d(1, 1, 1, 10deg);
}

Skalieren

Unterstützte Browser

  • 1
  • 12
  • 3,5
  • 3.1

Quelle

Sie können die Skalierung eines Elements mit transform und der Funktion scale() ändern. Die Funktion akzeptiert eine oder zwei Zahlen als Wert, die eine positive oder negative Skalierung bestimmen. Wenn Sie nur ein Zahlenargument definieren, werden die X- und die Y-Achse gleich skaliert und die Definition beider ist eine Abkürzung für X und Y. Genau wie bei rotate() gibt es die Funktionen scaleX(), scaleY() und scaleZ(), um ein Element auf einer bestimmten Achse zu skalieren.

.my-element {
  transform: scaleX(1.2) scaleY(1.2);
}

Außerdem gibt es wie die rotate-Funktion die scale3d()-Funktion. Dies ähnelt scale(), erfordert aber drei Argumente: den Skalierungsfaktor X, Y und Z.

Übersetzer

Unterstützte Browser

  • 1
  • 12
  • 3,5
  • 3.1

Quelle

Mit den translate()-Funktionen wird ein Element verschoben, während es seine Position im Dokumentablauf beibehält. Als Argumente werden Längen- und Prozentwerte akzeptiert. Die translate()-Funktion übersetzt ein Element entlang der X-Achse, wenn ein Argument definiert ist, und ein Element entlang der X- und der Y-Achse, wenn beide Argumente definiert sind.

.my-element {
  transform: translatex(40px) translatey(25px);
}

Sie können – wie bei anderen Transformationsfunktionen – mit translateX, translateY und translateZ spezifische Funktionen für eine bestimmte Achse verwenden. Sie können auch translate3d verwenden, um die X-, Y- und Z-Übersetzung in einer Funktion zu definieren.

Verzerren

Unterstützte Browser

  • 1
  • 12
  • 3,5
  • 3.1

Quelle

Zum Verzerren eines Elements können Sie die skew()-Funktionen verwenden, die Winkel als Argumente akzeptieren. Die skew()-Funktion ähnelt der von translate(). Wenn Sie nur ein Argument definieren, wirkt sich dies nur auf die X-Achse aus. Wenn Sie beides definieren, wirkt sich dies auf die X- und die Y-Achse aus. Sie können auch skewX und skewY verwenden, um jede Achse unabhängig zu beeinflussen.

.my-element {
  transform: skew(10deg);
}

Nutzerperspektive

Unterstützte Browser

  • 36
  • 12
  • 16
  • 9

Quelle

Schließlich können Sie die Property perspective verwenden, die Teil der Transformationsfamilie von Attributen ist, um die Entfernung zwischen dem Nutzer und der Z-Ebene zu ändern. Dies erzeugt ein Gefühl von Distanz und kann verwendet werden, um in Ihren Designs eine Schärfentiefe zu erzeugen.

Das Beispiel von David Desandro aus einem sehr nützlichen Artikel zeigt, wie sich damit zusammen mit den Properties perspective-origin-x und perspective-origin-y echte 3D-Erlebnisse schaffen lassen.

Animationsfunktionen, Farbverläufe und Filter

CSS bietet auch Funktionen, mit denen Sie Elemente animieren, Verläufe auf sie anwenden und ihr Aussehen mithilfe grafischer Filter anpassen können. Damit dieses Modul so prägnant wie möglich bleibt, werden sie in den verknüpften Modulen behandelt. Alle Funktionen haben eine ähnliche Struktur wie die in diesem Modul gezeigten Funktionen.

Wissen testen

Testen Sie Ihr Wissen über Funktionen

Mit welchen Zeichen können CSS-Funktionen identifiziert werden?

[]
Diese Zeichen stehen für Arrays in JavaScript.
{}
Diese Zeichen werden in CSS umgebrochen.
()
Funktionen verwenden diese Zeichen, um Argumente zu verpacken.
::
Diese Zeichen stehen für Pseudoelemente in CSS.
:
Diese Zeichen stehen für Pseudoklassen in CSS.

CSS hat integrierte mathematische Funktionen.

Wahr
Das sind viele davon – und für Spezifikationen und Browser kommen immer mehr hinzu.
Falsch
Versuch es noch einmal.

Eine calc()-Funktion kann in einen anderen calc() wie font-size: calc(10px + calc(5px * 3)); eingefügt werden

Wahr
🎉
Falsch
Versuch es noch einmal.

Bei welchen der folgenden Optionen handelt es sich um CSS-Formfunktionen?

ellipse()
🎉
square()
Versuch es noch einmal.
circle()
🎉
rect()
Versuch es noch einmal.
inset()
🎉
polygon()
🎉