Leitfaden für CSS-Funktionen

Avatar of Eric Bailey
Wie Eric Bailey am

Wie jede andere Programmiersprache auch, besitzt CSS Funktionen. Sie können dort eingefügt werden, wo man normalerweise einen Wert platzieren würde, oder in einigen Fällen begleitend zu einer anderen Wertdeklaration.

Präsentiert von DigitalOcean

DigitalOcean bietet die Cloud-Computing-Dienste, die Sie benötigen, um Ihr Wachstum in jeder Phase zu unterstützen. Starten Sie mit einem kostenlosen Guthaben von 200 $!

Einführung

Wie jede andere Programmiersprache hat auch CSS Funktionen. Sie können dort eingefügt werden, wo Sie einen Wert einsetzen würden, oder in einigen Fällen, begleitend zu einer anderen Wertdeklaration. Einige CSS-Funktionen erlauben sogar das Verschachteln anderer Funktionen!

Mehr

In der Programmierung sind Funktionen ein benannter Codeabschnitt, der eine bestimmte Aufgabe ausführt. Ein Beispiel hierfür könnte eine in JavaScript geschriebene Funktion namens sayWoof(): sein:

function sayWoof() {
  console.log("Woof!");
}

Wir können diese Funktion später in unserem Code verwenden, nachdem wir das gewünschte Verhalten definiert haben. In diesem Beispiel wird jedes Mal, wenn Sie sayWoof() in den JavaScript Ihres Websites oder Ihrer Webanwendung eingeben, "Woof!" in die Browserkonsole ausgegeben.

Funktionen können auch Argumente verwenden, bei denen es sich um Platzhalter für Dinge wie Zahlen oder Textteile handelt, die Sie in die Logik der Funktion einspeisen können, um sie zu verändern. So funktioniert es in JavaScript:

function countDogs(amount) {
  console.log("There are " + amount + " dogs!");
}

Hier haben wir eine Funktion namens countDogs(), die ein Argument namens amount hat. Wenn für amount eine Zahl angegeben wird, nimmt sie diese Zahl und fügt sie einem vordefinierten Satz hinzu. So können wir Sätze erstellen, die uns sagen, wie viele Hunde wir gezählt haben.

countDogs(3); // There are 3 dogs!
countDogs(276); // There are 276 dogs!
countDogs("many"); // There are many dogs!

Einige Programmiersprachen verfügen über integrierte Funktionen, um zu verhindern, dass Sie für jedes neue Projekt das Rad neu erfinden müssen. Typischerweise sind diese Funktionen so konzipiert, dass sie die Arbeit mit den Stärken und Funktionen der Sprache erleichtern. 

Nehmen wir zum Beispiel Bibliotheken. Bibliotheken sind Sammlungen von "opinionated" Code, die die Entwicklung schneller und einfacher machen sollen, im Grunde nur kuratierte Funktionssammlungen — denken Sie an FitVids.js zur Erstellung flexibler Videoelemente.

Grundlagen von CSS-Funktionen

Anatomy of a CSS declaration. Inside of a selector class called .selector there is a declaration of background-image: url(‘parchment.jpg’); Arrows label the property (background-image), the function (url), and the argument (parchment.jpg).

Im Gegensatz zu anderen Programmiersprachen können wir in CSS per se keine eigenen Funktionen erstellen. Diese Art von Logik ist CSS-Selektoren vorbehalten, die es Ihnen ermöglichen, leistungsstarke bedingte Styling-Regeln zu erstellen. 

Im Gegensatz zu anderen Programmiersprachen — bei denen die Ausgabe einer Funktion typischerweise unsichtbar andere nachfolgende Logik beeinflusst — ist die Ausgabe von CSS-Funktionen visueller Natur. Diese Ausgabe wird verwendet, um sowohl das Layout als auch die Präsentation von Inhalten zu steuern. Zum Beispiel: 

.has-orange-glow {
  filter: drop-shadow(0.25rem 0 0.75rem #ef9035);
}

Die CSS-Filterfunktion drop-shadow() verwendet die von uns bereitgestellten Argumente, um einen orangefarbenen äußeren Schein auf alles anzuwenden, worauf sie angewendet wird.

In der folgenden Demo habe ich eine JavaScript-Funktion namens toggleOrangeGlow, die das Anwenden der Klasse .has-orange-glow auf das CSS-Tricks-Logo ein- und ausschaltet. In Kombination mit einer CSS-Transition können wir einen coolen Leuchteffekt erzeugen.

Einige CSS-Funktionen sind Ihnen vielleicht bekannt, aber die Sprache hat eine überraschend umfangreiche Liste! 

Wie bei jeder anderen Technologie im Web haben verschiedene CSS-Funktionen unterschiedliche Grade der Browserunterstützung. Stellen Sie sicher, dass Sie recherchieren und testen, um sicherzustellen, dass Ihre Erfahrung für alle funktioniert, und verwenden Sie Dinge wie @supports, um qualitativ hochwertige alternative Erfahrungen anzubieten.

Häufige CSS-Funktionen

url()

.el {
  background: url(/images/image.jpg);
}
Verwendung von url()

url() ermöglicht es Ihnen, auf andere Ressourcen zu verlinken, um sie zu laden. Dazu gehören Bilder, Schriftarten und sogar andere Stylesheets. Aus Performance-Gründen ist es gute Praxis, die Dinge, die Sie über url() laden, zu begrenzen, da jede Deklaration eine zusätzliche HTTP-Anfrage ist.

attr()

/* <div data-example="foo"> */
div {
  content: attr(data-example);
}
Verwendung von attr()

Diese Funktion ermöglicht es uns, in HTML hineinzugreifen, den Inhalt eines Attributs zu schnappen und ihn an die CSS-content-Eigenschaft zu übergeben. Sie werden attr() häufig in Print-Stylesheets sehen, wo sie verwendet wird, um die URL eines Links nach seinem Text anzuzeigen. Eine weitere großartige Anwendung dieser Funktion ist die Verwendung, um die Alt-Beschreibung eines Bildes anzuzeigen, falls es nicht geladen werden kann.

calc()

.el {
  width: calc(100vw - 80px);
}
Verwendung von calc()

Wenn es eine Funktion gibt, mit der Sie experimentieren sollten, dann ist es calc(). Wir haben einen vollständigen Leitfaden nur zu calc().

Diese Funktion nimmt zwei Argumente entgegen und berechnet ein Ergebnis aus dem Operator (+, -, *, /), den Sie angeben, vorausgesetzt, diese Argumente sind Zahlen mit oder ohne einer begleitenden Einheit.

Im Gegensatz zu CSS-Präprozessoren wie Sass kann calc() Einheiten mischen, was bedeutet, dass Sie Dinge tun können, wie 6rem von 100% zu subtrahieren. calc() wird auch "on the fly" aktualisiert, also wenn diese 100% eine Breite darstellt, funktioniert es immer noch, wenn sich diese Breite ändert. calc() kann auch CSS Custom Properties als Argumente akzeptieren, was Ihnen ein unglaubliches Maß an Flexibilität ermöglicht. 

lang()

p:lang(en) {
  quotes: "\201C" "\201D" "\2018" "\2019" "\201C" "\201D" "\2018" "\2019";
}
Verwendung von lang()

Das Hinzufügen eines lang-Attributs in Ihrem HTML ist eine sehr wichtige Sache. Wenn es in Ihrem HTML vorhanden ist, können Sie die lang()-Funktion verwenden, um den Wert des Attributs anzusprechen und bedingt Styles darauf anzuwenden. 

Eine häufige Verwendung für diesen Selektor ist das Festlegen sprachspezifischer Anführungszeichen, was großartig für Dinge wie Internationalisierung ist. 

Clevere Designer und Entwickler können es auch als Haken zum Stylen übersetzter Versionen ihrer Websites verwenden, wo kulturelle und/oder sprachliche Überlegungen bedeuten, dass es unterschiedliche Wahrnehmungen bezüglich negativen Raums gibt.

:not()

h3:not(:first-child) {
  margin-top: 0;
}
Verwendung von not()

Dieser Pseudo-Klassen-Selektor wählt alles aus, was nicht das ist, was Sie angeben. Zum Beispiel könnten Sie alles außer einem Bild mit body:not(img) ansprechen. Während dieses Beispiel gefährlich mächtig ist, kann die Eingrenzung von :not() auf fokussiertere Selektoren wie BEM-Blockklassen Ihnen große Vielseitigkeit verleihen. 

Derzeit unterstützt :not() nur einen Selektor als Argument, aber die Unterstützung für mehrere kommagetrennte Argumente (z. B. div:not(.this, .that)) wird gerade entwickelt!

CSS Custom Properties

Es gibt nur eine Funktion, die speziell für CSS Custom Properties gilt, aber sie bringt das Ganze zum Laufen!

Die Funktion var() wird verwendet, um auf eine zuvor im Dokument deklarierte benutzerdefinierte Eigenschaft zu verweisen. 

html {
  --color: orange;
}

p {
  color: var(--color);
}

Sie ist unglaublich leistungsstark in Kombination mit calc().

html {
  --scale: 1.2;
  --size: 0.8rem;
}

.size-2 {
  font-size: calc(var(--size) * var(--scale));
}
.size-2 {
  font-size: calc(var(--size) * var(--scale) * var(--scale));
}
Mehr über die Verwendung von var()

Ein weiteres Beispiel hierfür ist die Deklaration einer benutzerdefinierten Eigenschaft namens --ratio: 1.618; im Stammverzeichnis des Dokuments und deren anschließender Aufruf in unserem CSS zur Steuerung der Zeilenhöhe, wie z.B. line-height: var(--ratio);.

Hier ist var() eine Reihe von Anweisungen, die dem Browser sagen: „Geh und finde das Argument namens --ratio, das zuvor im Dokument deklariert wurde, nimm seinen Wert und wende ihn hier an.“ 

Denken Sie daran! calc() ermöglicht es uns, Dinge dynamisch anzupassen, einschließlich des Arguments, das Sie über var() bereitstellen.

Dies ermöglicht es uns, Dinge wie modulare Skalierungssysteme direkt in CSS mit nur wenigen Codezeilen zu erstellen. Wenn Sie den Wert von --ratio ändern, wird das gesamte modulare Skalierungssystem aktualisiert, um dazu zu passen.

Im folgenden CodePen-Demo habe ich genau das getan. Ändern Sie den Wert von --scale im CSS des Pens zu einer anderen Zahl, um zu sehen, was ich meine.

Es ist auch erwähnenswert, dass die setProperty-Methode von JavaScript benutzerdefinierte Eigenschaften in Echtzeit aktualisieren kann. Dies ermöglicht es uns, schnell und effizient dynamische Änderungen an Dingen vorzunehmen, die zuvor viel komplizierten Code erfordert hätten. 

Farbfunktionen

Ein weiterer häufiger Ort, an dem CSS-Funktionen anzutreffen sind, ist die Arbeit mit Farben.

rgb() und rgba()

.el {
  color: rgb(255, 0, 0);
  color: rgba(255, 0, 0, 0.5);
  color: rgb(255 0 0 / 0.5);
}
Verwendung von rgb() und rgba()

Diese Funktionen ermöglichen es Ihnen, Zahlen zu verwenden, um die Rot- (r), Grün- (g), Blau- (b) und Alphawerte (a) einer Farbe zu beschreiben. Zum Beispiel könnte eine rote Farbe mit einem Hex-Wert von #fb1010 auch als rgba(251, 16, 16, 1) beschrieben werden. Der Rotwert, 251, ist weitaus höher als die Grün- und Blauwerte (16 und 16), da die Farbe hauptsächlich aus roten Informationen besteht. 

Der Alphawert von 1 bedeutet, dass er vollständig undurchsichtig ist und nichts hinter der Farbe anzeigt, auf die er angewendet wird. Wenn wir den Alphawert auf 0,5 ändern, ist die Farbe zu 50 % transparent. Wenn Sie eine rgb()-Funktion anstelle von rgba() verwenden, müssen Sie keinen Alphawert angeben. Früher bedeutete dies, dass Sie keinen Alphawert angeben konnten, aber diese Funktion nimmt ihn jetzt entgegen, egal ob Sie die alte Komma-Syntax oder die neue Schrägstrich-Syntax verwenden.

hsl() und hsla()

.el {
  background: hsl(100, 100%, 50%);
  background: hsla(100, 100%, 50%, 0.5);
  background: hsl(100 100% 50% / 0.5);
}
Verwendung von hsl() und hsla()

Ähnlich wie rgb() und rgba() sind hsl() und hsla() Funktionen, die es Ihnen ermöglichen, Farbe zu beschreiben. Anstelle von Rot, Grün und Blau verwenden sie Farbton (h), Sättigung (s) und Helligkeit (l). 

Ich ziehe es vor, hsla() gegenüber rgba() zu verwenden, weil sein Modell zur Beschreibung von Farben sehr gut mit systematisierten Farbsystemen funktioniert. Jeder der Farbwerte für diese Funktionen kann eine CSS Custom Property sein, was Ihnen leistungsstarken, dynamischen Code ermöglicht.

Neue Farbfunktionen

In der kommenden Spezifikation CSS Color Module Level 4 können wir den a-Teil von rgba() und hsla() sowie die Kommas ignorieren. Nun werden Leerzeichen verwendet, um die rgb- und hsl-Argumente zu trennen, mit einem optionalen /, um einen Alphawert anzuzeigen.

Wir werden auch neue Funktionen wie lab() und lch() sehen, die dieses neue Format verwenden werden.

Pseudo-Klassen-Selektor-Funktionen

Diese Selektoren verwenden spezialisierte Argumentnotation, die Muster für die Auswahl angibt. Dies ermöglicht es Ihnen, jedes zweite Element, jedes fünfte Element, jedes dritte Element nach dem siebten Element usw. auszuwählen.

Pseudo-Klassen-Selektoren sind unglaublich vielseitig, werden aber oft übersehen und unterschätzt. Oft kann eine durchdachte Anwendung von ein paar dieser Selektoren die Arbeit eines oder mehrerer Node-Pakete erledigen. 

:nth-child()

.el:nth-child(3n) {
  background-color: #eee;
}

nth-child() ermöglicht es Ihnen, ein oder mehrere Elemente aus einer Gruppe von Elementen auszuwählen, die sich auf derselben Ebene im Document Object Model (DOM) befinden.

In den richtigen Händen ist :nth-child() unglaublich leistungsstark. Sie können damit sogar FizzBuzz lösen! Wenn Sie nach einem guten Einstieg suchen, hat Chris eine Sammlung nützlicher Pseudo-Selektor-Rezepte.

:nth-last-child()

.el:nth-last-child(2) {
  opacity: 0.75;
}
.el:last-child {
  opacity: 0.5;
}

Dieser Pseudo-Klassen-Selektor zielt auf Elemente in einer Gruppe von einem oder mehreren Elementen ab, die sich auf derselben Ebene im DOM befinden. Er beginnt vom letzten Element der Gruppe zu zählen und arbeitet sich rückwärts durch die Liste der verfügbaren DOM-Knoten.

Demo

:nth-of-type()

h2:nth-of-type(odd) {
  text-indent: 3rem;
}

:nth-of-type() wählt eine bestimmte Sammlung von Elementen eines bestimmten Typs aus. Zum Beispiel würde eine Deklaration von img:nth-of-type(5) das fünfte Bild auf einer Seite ansprechen.

Demo

:nth-last-of-type()

section:nth-last-of-type(3) {
  background-color: darkorchid;
}

Dieser Pseudo-Klassen-Selektor kann ein Element in einer Gruppe von Elementen eines ähnlichen Typs ansprechen. Ähnlich wie bei :nth-last-child() beginnt er beim letzten Element der Gruppe zu zählen. Im Gegensatz zu :nth-last-child überspringt er Elemente, die nicht zutreffen, während er rückwärts zählt. 

Demo

Animationsfunktionen

Animation ist ein wichtiger Bestandteil, um Ihrer Website oder Webanwendung das gewisse Etwas zu verleihen. Denken Sie nur daran, die Bedürfnisse Ihrer Benutzer an erste Stelle zu setzen und deren Animationspräferenzen zu respektieren.

Das Erstellen von Animationen erfordert auch die Steuerung des Zustands von Dingen über die Zeit hinweg, daher sind Funktionen eine natürliche Ergänzung, um dies zu ermöglichen.

cubic-bezier()

.el {
  transition-timing-function: 
    cubic-bezier(0.17, 0.67, 0.83, 0.67);
}

Anstelle von Schlüsselwortwerten wie ease, ease-in-out oder linear können Sie cubic-bezier() verwenden, um eine benutzerdefinierte Timing-Funktion für Ihre Animation zu erstellen. Während Sie die Mathematik hinter kubischen Bézier-Kurven lesen können, ist es meiner Meinung nach viel spaßiger, damit herumzuspielen.

A custom cubic bezier curve created on cubic-bezier.com. There are also options to preview and compare your curve with CSS’s ease, linear, ease-in, ease-out, and ease-in-out transitions.
Lea Veroucubic-bezier.com.

path()

.clip-me {
  clip-path: path('M0.5,1 C0.5,1,0,0.7,0,0.3 A0.25,0.25,1,1,1,0.5,0.3 A0.25,0.25,1,1,1,1,0.3 C1,0.7,0.5,1,0.5,1 Z');
}
.move-me {
  offset-path: path("M56.06,227 ...");
}

Diese Funktion ist mit der offset-path-Eigenschaft (oder eventuell mit der clip-path-Eigenschaft) gekoppelt. Sie ermöglicht es Ihnen, einen SVG-Pfad zu „zeichnen“, dem andere Elemente animiert folgen können.

Demo

Sowohl Michelle Barker als auch Dan Wilson haben hervorragende Artikel veröffentlicht, die sich detaillierter mit diesem Animationsansatz befassen.

steps()

.el {
  animation: 2s infinite alternate steps(10);
}

Diese relativ neue Funktion ermöglicht es Ihnen, die Easing-Zeit über eine Animation einzustellen, was mehr Kontrolle darüber gibt, welcher Teil der Animation wann stattfindet. Dan Wilson hat einen weiteren hervorragenden Artikel darüber, wie sie sich in die bestehende Landschaft des Animations-Easing einfügt. 

Größen- & Skalierungs- (Transformations-) Funktionen

Eine häufige Sache, die wir bei Animationen tun, ist Dinge zu strecken und zu quetschen. Die folgenden Funktionen ermöglichen Ihnen genau das. Es gibt jedoch einen Haken: Diese CSS-Funktionen sind eine spezielle Teilmenge, da sie nur mit der transform-Eigenschaft funktionieren können.

scaleX(), scaleY(), scaleZ(), scale3d() und scale()

.double {
  transform: scale(2);
}

Skalierungsfunktionen ermöglichen es Ihnen, die Größe von etwas entlang einer oder mehrerer Achsen zu vergrößern oder zu verkleinern. Wenn Sie scale3d() verwenden, können Sie dies sogar in drei Dimensionen tun!

translateX(), translateY(), translateZ(), translate3d() und translate()

.center {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

Translate-Funktionen ermöglichen es Ihnen, ein Element entlang einer oder mehrerer Achsen neu zu positionieren. Ähnlich wie bei Skalierungsfunktionen können Sie diese Manipulation auch in drei Dimensionen erweitern.

perspective()

.cube {
  transform: perspective(50em) rotateY(50deg)
}

Diese Funktion lässt Sie das Erscheinungsbild eines Objekts anpassen, sodass es aussieht, als ob es sich von seinem Hintergrund abhebt und nach vorne projiziert.

rotateX(), rotateY(), rotateZ(), rotate3d() und rotate()

.avatar {
  transform: rotate(25deg);
}

Rotate-Funktionen ermöglichen es Ihnen, ein Element entlang einer oder mehrerer Achsen zu drehen, ähnlich wie beim Greifen eines Balls und dem Drehen in der Hand.

skewX(), skewY() und skew()

.header {
  transform: skew(25deg, 15deg);
}

Skew-Funktionen unterscheiden sich geringfügig von Skalierungs- und Rotationsfunktionen, da sie einen Verzeichnungseffekt relativ zu einem einzigen Punkt anwenden. Der Verzeichnungsbetrag ist proportional zum angegebenen Winkel und Abstand, was bedeutet, dass je weiter der Effekt in eine Richtung fortschreitet, desto ausgeprägter wird er. 

Jorge Moreno hat uns allen einen Gefallen getan und ein großartiges Tool namens CSS Transform Functions Visualizer entwickelt. Es ermöglicht Ihnen, Größen und Skalierungen in Echtzeit anzupassen, um besser zu verstehen, wie all diese Funktionen zusammenarbeiten.

Als verantwortungsbewusste Webprofis sollten wir die Bedürfnisse unserer Benutzer berücksichtigen und die Tatsache, dass sie möglicherweise keine neuen oder leistungsstarken Geräte zur Anzeige unserer Inhalte verwenden. Große und komplizierte Animationen können die Erfahrung verlangsamen oder in extremen Fällen sogar zum Absturz des Browsers führen.

Um dies zu verhindern, können wir Techniken wie will-change verwenden, um den Browser auf das Kommende vorzubereiten, und die update Media Feature, um Animationen auf Geräten zu entfernen, die keine schnelle Bildwiederholrate unterstützen. 

Filterfunktionen

CSS-Filterfunktionen sind eine weitere spezielle Teilmenge von CSS-Funktionen, da sie nur mit der filter-Eigenschaft funktionieren können. Filter sind Spezialeffekte, die auf ein Element angewendet werden und Funktionen von Grafikbearbeitungsprogrammen wie Photoshop nachahmen.

Mit CSS-Filterfunktionen können Sie wirklich wilde Dinge tun, wie zum Beispiel Effekte nachbilden, die Sie auf Ihre Instagram-Posts anwenden können!

brightness()

.avatar:hover {
  filter: brightness(150%);
}

Diese Funktion passt an, wie, ähm, hell etwas erscheint. Wenn sie auf einen niedrigen Wert eingestellt ist, sieht es so aus, als ob ein Schatten darüber geworfen wurde. Wenn sie auf einen hohen Wert eingestellt ist, wird sie überbelichtet, wie bei einem überbelichteten Foto.

Demo

blur()

.ghost {
  filter: blur(50%);
}

Wenn Sie mit dem Gaußschen Weichzeichner-Filter von Photoshop vertraut sind, wissen Sie, wie blur() funktioniert. Je mehr davon Sie anwenden, desto unschärfer wird das Ding, auf das Sie es anwenden.

Demo

contrast()

.wow {
  filter: contrast(200%);
}

contrast() passt den Unterschied zwischen den hellsten und dunkelsten Teilen des angewendeten Objekts an.

Demo

grayscale()

.no-color {
  filter: grayscale(100%);
}

grayscale() entfernt die Farbinformationen von dem, worauf es angewendet wird. Denken Sie daran, dass dies kein Alles-oder-Nichts-Angelegenheit ist! Sie können einen teilweisen Graustufen-Effekt anwenden, um etwas verwittert oder ausgewaschen aussehen zu lassen.

Eine interessante Anwendung von grayscale() könnte leichte Anwendung auf Bilder sein, wenn der Dunkelmodus aktiviert ist, um die allgemeine Farbbrillanz in einer Situation zu verringern, in der der Benutzer weniger Augenbelastung wünscht.

Demo

invert()

Während invert() verwendet werden kann, um etwas wie ein Negativ eines Fotos aussehen zu lassen, ist meine Lieblingstechnik, es in einer Media Query für invertierte Farben zu verwenden, um invertierte Bilder und Videos umzukehren.

@media (inverted-colors: inverted) {
  img,
  video {
    filter: invert(100%);
  }
}

Dies stellt sicher, dass Bilder und Videos so aussehen, wie sie sollten, unabhängig von den vom Benutzer ausgedrückten Browsermodus-Präferenzen. 

opacity()

.filter-visibility {
  filter: opacity(0);
}

Diese Funktion steuert, wie viel vom Hintergrund durch das Element (und seine Kindelemente) sichtbar ist, auf das die Funktion angewendet wird. 

Demo

Ein Element mit 0 % Opazität ist vollständig transparent, obwohl es immer noch im DOM vorhanden ist. Wenn Sie ein Objekt vollständig entfernen müssen, verwenden Sie andere Techniken wie das hidden-Attribut.

saturate()

.full-color {
  filter: saturate(100%);
}

Das Anwenden dieses Filters kann die Intensität der Farbe des angewendeten Objekts verstärken oder verringern. Die Erhöhung der Sättigung eines Bildes ist eine gängige Technik, die Fotografen verwenden, um unterbelichtete Fotos zu korrigieren.

Demo

sepia()

.is-old-timey {
  filter: sepia(1);
}

Es gibt ausgefallenere Möglichkeiten, dies zu beschreiben, aber realistisch ist es eine Funktion, die etwas wie ein altes Foto aussehen lässt.

Demo

drop-shadow()

.fit-shape-shadow {
  filter: drop-shadow(3rem 0 0.5rem #e486da);
}

Ein Schlagschatten ist ein visueller Effekt, der auf ein Objekt angewendet wird und es so aussehen lässt, als würde es von der Seite schweben. Es gibt einen kleinen Trick, denn CSS erlaubt es Ihnen auch, Schlagschatteneffekte auf Text und Elemente anzuwenden. Es unterscheidet sich auch von der box-shadow-Eigenschaft darin, dass es Schlagschatten auf die Form eines Elements anwendet und nicht auf den eigentlichen Kasten eines Elements.

Geschickte Designer und Entwickler können dies nutzen, um komplizierte visuelle Effekte zu erzielen.

Demo

hue-rotate()

.change-color {
  filter: hue-rotate(180deg);
}

Wenn eine Klasse mit einer Deklaration, die hue-rotate() enthält, auf ein Element angewendet wird, wird jeder Pixel, der zum Zeichnen dieses Elements verwendet wird, um den von Ihnen angegebenen Betrag in seinem Farbtonwert verschoben. Der Effekt von hue-rotate() wird auf jeden einzelnen Pixel angewendet, sodass sich alle Farben relativ zum Ausgangspunkt ihres Farbtonwerts ändern.

Dies kann einen wirklich psychedelischen Effekt erzeugen, wenn es auf Dinge angewendet wird, die viele Farbinformationen enthalten, wie z. B. Fotos.

Demo

SVG-Filter

filter() ermöglicht es uns auch, SVG-Filter zu importieren, um spezialisierte visuelle Effekte zu erzielen. Das Thema ist zu komplex, um es in diesem Artikel vollständig zu behandeln – wenn Sie nach einem guten Ausgangspunkt suchen, empfehle ich „The Art Of SVG Filters And Why It Is Awesome” von Dirk Weber.

The word “West!” rendered in a Wild West-style font, with layered teal drop shadows giving it a 3D effect. Behind it is a purple starburst pattern. Screenshot.
Dieser Effekt wurde durch gekonnte Anwendung von SVG-Filtereffekten erzielt.

Vergleichsfunktionen

Die Idee hinter diesen Funktionen ist, dass wir mehrere Werte vergleichen und die Werte anwenden (oder, wie die Spezifikation sagt, darstellen) können, wenn sie ausgewertet werden.

clamp()

.page-wrap {
  width: clamp(320px, 80%, 1200px);
}
body {
  font-size: clamp(12px, 1rem + 2vw, 18px);
}

Wenn Sie minimale, maximale und bevorzugte Werte als Argumente angeben, hält sich clamp() an den bevorzugten Wert, solange er die Mindest- und Höchstgrenzen nicht überschreitet. 

clamp() ermöglicht es uns, Dinge wie Komponenten zu erstellen, deren Größe sich mit der Größe des Viewports skaliert, aber nicht über eine bestimmte Größe hinaus schrumpft oder wächst. Dies wird besonders nützlich sein, um CSS-Locks zu erstellen, bei denen Sie sicherstellen können, dass eine responsive Schriftgröße nicht so klein wird, dass sie nicht mehr lesbar ist.

max() und min()

.minimum-of-these {
  width: max(500px, 50%);
}
.maximum-of-these {
  width: min(320px, 90%);
}

Diese Funktionen ermöglichen es Ihnen, entweder den maximalen oder minimalen Wert aus einer von Ihnen angegebenen Wertebereich auszuwählen. Ähnlich wie clamp() ermöglichen uns diese Funktionen, Dinge bis zu einem bestimmten Punkt responsiv zu gestalten. 

Logische Kombinationen

Die Spezifikation fasst diese Funktionen unter der Überschrift "Logical Combinations" zusammen, aber es ist vielleicht einfacher, sie als Funktionen zum Abgleichen von Selektoren zu betrachten.

:is() und :where()

:is() hatte eine Identitätskrise. Früher wurde es sowohl als matches() bezeichnet als auch herstellerseitig mit Präfixen wie :-webkit-any/:-moz-any. Jetzt hat es einen standardisierten, vereinbarten Namen. Es ist ein Pseudo-Klassen-Selektor, der eine Reihe von Selektoren als Argument akzeptiert. 

Dies ermöglicht es einem Autor, eine breite Palette von Selektoren effizient zu gruppieren und anzusprechen. :where() ist ähnlich wie :is(), nur hat es eine Spezifität von Null, während die Spezifität von :is() auf die höchste Spezifität in der bereitgestellten Selektorliste gesetzt ist. 

:is(section, article, aside, nav) :is(h1, h2, h3, h4, h5, h6) {
  color: #BADA55;
}

/* ... which is equivalent to: */
section h1, section h2, section h3, section h4, section h5, section h6, 
article h1, article h2, article h3, article h4, article h5, article h6, 
aside h1, aside h2, aside h3, aside h4, aside h5, aside h6, 
nav h1, nav h2, nav h3, nav h4, nav h5, nav h6 {
  color: #BADA55;
}

:is() und :where() bieten uns ein hohes Maß an Flexibilität bei der Auswahl von Elementen zum Stylen, insbesondere für Situationen, in denen wir möglicherweise nicht so viel Kontrolle über das Stylesheet der Website oder Webanwendung haben (z. B. Integrationen von Drittanbietern, Anzeigen usw.).

Farbverlaufsfunktionen

Farbverläufe werden erstellt, wenn ein Farbverlauf von einer Farbe zu einer oder mehreren anderen Farben übergeht. Sie sind Arbeitspferde moderner Benutzeroberflächen — geschickte Designer und Entwickler verwenden sie, um ihrer Arbeit ein Gefühl von Glanz und Raffinesse zu verleihen.

Farbverlaufsfunktionen ermöglichen es Ihnen, eine ganze Reihe von Eigenschaften anzugeben, einschließlich

  • Farbwerte,
  • Die Position im Farbverlaufsbereich, an der diese Farbe einfließt,
  • In welchem Winkel der Farbverlauf positioniert ist.

Und ja, Sie haben es erraten: Die Farben, die wir in einem Farbverlauf verwenden, können mit CSS-Farbfunktionen beschrieben werden!

linear-gradient() und repeating-linear-gradient()

Lineare Farbverläufe wenden die Farbtransformation in einer geraden Linie von einem Punkt zu einem anderen an — diese Linie kann auch in einem Winkel eingestellt werden. In Fällen, in denen mehr Fläche als Farbverlauf vorhanden ist, wird die Verwendung von repeating-linear-gradient() den beschriebenen Farbverlauf wiederholen, bis die gesamte verfügbare Fläche gefüllt ist.

Demo

radial-gradient() und repeating-radial-gradient()

Radiale Farbverläufe ähneln linearen Farbverläufen, nur dass sich die Farbtransformationen nicht in einer geraden Linie, sondern von einem Mittelpunkt ausstrahlen. Sie werden oft verwendet, um einen semitransparenten Bildschirm zu erstellen, der ein Modal vom Hintergrund trennt, auf dem es platziert ist.

Demo

conic-gradient() und repeating-conical-gradient

Konische Farbverläufe unterscheiden sich von radialen Farbverläufen dadurch, dass die Farbe sich um einen Kreis dreht. Aus diesem Grund können wir coole Dinge tun, wie Donut-Diagramme erstellen. Leider ist die Unterstützung für konische Farbverläufe weiterhin schlecht, also verwenden Sie sie mit Vorsicht.

A teal and red donut chart set to 36%. To the right of the chart is a range slider, also set to 36%. Screenshot.
Ein anpassbares konisches Farbverlauf-Donut-Diagramm von Ana Tudor

Grid-Funktionen

CSS Grid ist eine relativ neue Funktion der Sprache. Sie ermöglicht es uns, effizient adaptive, robuste Layouts für mehrere Bildschirmgrößen zu erstellen. 

Es lohnt sich, unsere Wurzeln anzuerkennen. Vor Grid war das Layout in CSS weitgehend eine Reihe von kodifizierten Hacks, um mit einer Sprache zu arbeiten, die ursprünglich zur Formatierung akademischer Dokumente entwickelt wurde. Die Einführung von Grid ist eine weitere Bestätigung dafür, dass sich die Absicht der Sprache geändert hat. 

Modernes CSS ist eine effiziente, fehlertolerante Sprache zur Steuerung von Präsentation und Layout über eine Vielzahl von Geräteformfaktoren hinweg. Ausgestattet mit Grid und anderen Eigenschaften wie Flexbox können wir Layouts erstellen, die in früheren Versionen von CSS unmöglich zu erstellen gewesen wären. 

Grid führt die folgenden CSS-Funktionen ein, um Ihnen bei der Verwendung zu helfen.

fit-content()

Diese Funktion "klemmt" die Größe von Grid-Zeilen oder -Spalten und ermöglicht es Ihnen, eine maximale Größe für eine Grid-Spur anzugeben, bis zu der sie erweitert werden kann. fit-content() akzeptiert eine Reihe von Werten, die bemerkenswertesten davon sind jedoch min-content und max-content. Diese Werte ermöglichen es Ihnen, Ihr Layout an den Inhalt zu binden, den es enthält. Beeindruckend!

Demo

minmax()

minmax() ermöglicht es Ihnen, die minimale und maximale gewünschte Höhe und Breite Ihrer Grid-Zeilen und -Spalten festzulegen. Diese Funktion kann auch min-content und max-content verwenden, was uns ein großes Maß an Leistung und Flexibilität verleiht.

Demo

repeat()

Sie können Muster von Grid-Spalten und -Zeilen mit repeat() durchlaufen. Dies ist großartig für zwei Szenarien: 

  1. Wenn Sie wissen, wie viele Zeilen oder Spalten Sie benötigen, aber deren Tippen mühsam wäre. Ein gutes Beispiel hierfür wäre die Erstellung des Grids für einen Kalender.
  2. Wenn Sie nicht wissen, wie viele Zeilen oder Spalten Sie benötigen. Hier können Sie ein Muster angeben, das der Browser ehrt, während er Inhalte in Ihr Layout einfügt.
Demo

Formfunktionen

Wie filter() und transform() funktionieren Form-CSS-Funktionen nur mit einer Eigenschaft: clip-path. Diese Eigenschaft wird verwendet, um Teile von etwas zu maskieren, was es Ihnen ermöglicht, alle Arten von coolen Effekten zu erzielen.

circle()

Diese Funktion erstellt eine kreisförmige Maske, die es Ihnen ermöglicht, ihren Radius und ihre Position anzugeben.

Demo

ellipse()

Wie circle() zeichnet ellipse() eine runde Form. Nur dass ellipse() anstelle eines perfekten Kreises die Konstruktion einer länglichen Maske ermöglicht.

Demo

polygon()

Mit polygon() können Sie eine beliebige Anzahl von Punkten angeben und so komplexe Formen zeichnen. polygon() nimmt auch ein optionales Argument fill-rule entgegen, das angibt, welcher Teil der Form der innere Teil ist.

Demo

inset()

Diese Funktion maskiert ein Rechteck innerhalb des Elements, auf das sie angewendet wird.

Demo

Sonstige Funktionen

Dies sind die CSS-Funktionen, die nicht gut kategorisiert werden können, Dinge, die nicht sauber an anderer Stelle passen.

element()

Haben Sie jemals eine Kamera auf ihren eigenen Video-Feed gerichtet? So ähnlich macht das element(). Es ermöglicht Ihnen, die ID eines anderen Elements anzugeben, um ein "Bild" davon zu erstellen, wie dieses Element aussieht. Sie können dann andere CSS auf dieses Bild anwenden, einschließlich Dingen wie CSS-Filtern!

Es mag etwas dauern, bis man das Konzept verstanden hat – und es gibt einige Bedenken hinsichtlich der Unterstützung – aber element() ist in den richtigen Händen potenziell sehr mächtig.

Preethi Sams Artikel „Using the Little-Known CSS element() Function to Create a Minimap Navigator“ zeigt, wie man sie verwendet, um eine Code-Minimap zu erstellen, und ist eine ausgezeichnete Lektüre.

Hier hat sie eine Minimap erstellt, um einen langen Artikel zu lesen.

image-set()

.responsive-background {
  background-image: 
    image-set("image.png" 1x,
              "image-2x.png" 2x,
              "image-print.png" 600dpi
    );
}

Diese Funktion ermöglicht es Ihnen, eine Liste von Bildern anzugeben, aus denen der Browser für ein Hintergrundbild auswählen kann, basierend auf seinen Kenntnissen über die Fähigkeiten seines Displays und seine Verbindungsgeschwindigkeit. Sie ist analog zu dem, was Sie mit der srcset-Eigenschaft tun würden.

::slotted()

::slotted(.marker) {
  background: lightyellow;
}

Dies ist ein Pseudo-Element-Selektor, der verwendet wird, um Elemente anzusprechen, die in einen Slot innerhalb einer HTML-Vorlage eingefügt wurden. ::slotted() ist für die Verwendung mit Web Components vorgesehen, die benutzerdefinierte, von Entwicklern definierte HTML-Elemente sind.

Noch nicht bereit für die Hauptsendezeit

Wie jede andere lebende Programmiersprache enthält CSS Funktionen und Funktionalitäten, an denen aktiv gearbeitet wird. 

Diese Funktionen können manchmal in Browsern, die Zugang zum Neuesten haben, vorschauartig genutzt werden. Firefox Nightly und Chrome Canary sind zwei solcher Browser. Andere Funktionen und Funktionalitäten sind so neu, dass sie nur noch in dem, was vom W3C aktiv diskutiert wird, existieren.

annotation()

Diese Funktion ermöglicht alternative Annotationsformen, Zeichen, die für die Markierung von Notationen und Annotationen reserviert sind. Diese Zeichen werden typischerweise mit einem Kreis, Quadrat oder einer Raute umrandet.

Nicht viele Schriftarten enthalten alternative Annotationsformen, daher ist es gut zu prüfen, ob die von Ihnen verwendete Schriftart diese enthält, bevor Sie versuchen, annotation() zum Laufen zu bringen. Tools wie Wakamai Fondue können dabei helfen.

he numbers 1 and 2 enclosed in hollow and solid-filled circles. Following them are the letters B and R enclosed in hollow and solid-filled squares. Screenshot.Stylistic Alternates.
Beispiele für Annotationsglyphen aus Jonathan Harrells Beitrag „Better Typography with Font Variants“

counter() und counters()

Wenn Sie eine geordnete Liste in HTML erstellen, generiert der Browser automatisch Zahlen für Sie und platziert sie vor dem Inhalt Ihres Listenelements. Diese browsergenerierten Listenelemente werden als Zähler (counters) bezeichnet. 

Durch die Verwendung einer Kombination aus dem Pseudo-Element-Selektor ::marker, der content-Eigenschaft und der Funktion counter() können wir den Inhalt und die Darstellung der Zähler einer geordneten Liste steuern. Für Browser, die counter() oder counters() noch nicht unterstützen, erhalten Sie trotzdem eine brauchbare Darstellung, da der Browser automatisch auf seine generierten Inhalte zurückfällt.

Für verschachtelte geordnete Listen ermöglicht die Funktion counters() einer untergeordneten geordneten Liste den Zugriff auf ihre Elternliste. Dies ermöglicht uns, deren Inhalt und Darstellung zu steuern. Wenn Sie mehr über die Leistungsfähigkeit von ::marker, counter() und counters() erfahren möchten, können Sie „CSS Lists, Markers, And Counters“ von Rachel Andrew lesen.

cross-fade()

Diese Funktion ermöglicht es Ihnen, ein Hintergrundbild in ein oder mehrere andere Hintergrundbilder zu überblenden. Ihre vorgeschlagene Syntax ähnelt Gradientfunktionen, bei denen Sie die Punkte angeben können, an denen Bilder beginnen und enden.

dir()

Diese Funktion ermöglicht es Ihnen, die Ausrichtung der Leserichtung einer Sprache umzukehren. Für Englisch bedeutet dies, dass eine Links-nach-rechts (ltr)-Leserichtung in Rechts-nach-links (rtl) umgewandelt wird. Nur Firefox unterstützt derzeit dir(), aber Sie können denselben Effekt in Chromium-basierten Browsern erzielen, indem Sie einen Attributselektor wie [dir="rtl"] verwenden.

Demo

env()

body {
  padding: 
    env(safe-area-inset-top) 
    env(safe-area-inset-right) 
    env(safe-area-inset-bottom) 
    env(safe-area-inset-left);
}

env(), kurz für Environment, ermöglicht es Ihnen, bedingte Logik zu erstellen, die ausgelöst wird, wenn der User Agent des Geräts übereinstimmt. Sie wurde durch das iPhone X als Methode zur Arbeit mit seiner Notch populär gemacht. 

Das heißt, das Erkennen von Geräten ist eine fehlerhafte Angelegenheit – Sie sollten env() nicht als Möglichkeit betrachten, sich daran vorbeizumogeln. Verwenden Sie es stattdessen wie vorgesehen: um sicherzustellen, dass Ihr Design für Geräte funktioniert, die einzigartige Hardwarebeschränkungen für den Viewport auferlegen.

has()

has() ist eine relationale Pseudo-Klasse, die ein Element auswählt, das ein anderes Element enthält, vorausgesetzt, es gibt mindestens eine Übereinstimmung im HTML-Quelltext. Ein Beispiel dafür ist a:has(> img), was dem Browser sagt, dass er jeden Link auswählen soll, der ein Bild enthält. 

A diagram showing how the CSS selector a:has(> img) targets only links that contain images in a collection of links that contain either images or paragraphs.

Interessanterweise wird has() derzeit als CSS vorgeschlagen, das nur in JavaScript geschrieben werden kann. Wenn ich eine Vermutung anstellen müsste, warum das so ist, dann um den Selektor aus Performancegründen einzuschränken. Mit diesem Ansatz wird has() nur ausgelöst, nachdem der Browser angewiesen wurde, bedingte Logik zu verarbeiten und somit den Zustand der Dinge abzufragen.

image()

.help::before {
  content: image("try.webp", "try.svg", "try.gif");
}

Diese Funktion ermöglicht es Ihnen, entweder ein statisches Bild einzufügen (referenziert mit url()) oder es dynamisch über Farbverläufe und element() zu zeichnen. 

Trigonometrische Funktionen

Diese Funktionen ermöglichen uns, fortgeschrittenere mathematische Operationen durchzuführen: 

  • Sinus: sin()
  • Kosinus: cos()
  • Tangens: tan()
  • Arkuskosinus: acos()
  • Arkussinus: asin()
  • Arkustangens: atan()
  • Arkustangens: atan2()
  • Quadratwurzel: sqrt()
  • Die Quadratwurzel der Summe der Quadrate ihrer Argumente: hypot()
  • Potenz: pow()

Ich bin besonders gespannt, was Leute, die klüger sind als ich, mit diesen Funktionen machen werden, besonders für Dinge wie Animationen!

:host() und :host-context()

Ehrlich gesagt, bin ich mir der spezifischen Fachbegriffe und Mechanismen, die das Shadow DOM antreiben, nicht ganz sicher. Hier ist wie MDN host() beschreibt.

Die CSS Pseudo-Klassenfunktion :host() wählt den Shadow Host des Shadow DOM aus, der das CSS enthält, das darin verwendet wird (sodass Sie ein benutzerdefiniertes Element aus seinem Shadow DOM heraus auswählen können) – aber nur, wenn der als Parameter der Funktion angegebene Selektor mit dem Shadow Host übereinstimmt.

Und hier ist das, was sie über :host-context() zu sagen haben.

Die CSS-Pseudo-Klassenfunktion :host-context() wählt den Shadow Host des Shadow DOM aus, der das CSS enthält, das darin verwendet wird (sodass Sie ein benutzerdefiniertes Element aus seinem Shadow DOM heraus auswählen können) – aber nur, wenn der als Parameter der Funktion angegebene Selektor mit dem Vorfahren des Shadow Hosts in der Stelle übereinstimmt, an der er sich in der DOM-Hierarchie befindet.

:nth-col() und :nth-last-col()

Diese Pseudo-Klassen ermöglichen es Ihnen, eine oder eine bestimmte Serie von Spalten in einem CSS-Grid auszuwählen, um ihnen Stile zuzuweisen. Ein gutes mentales Modell dafür, wie diese Funktionen funktionieren werden, ist, wie CSS-Pseudo-Klassen-Selektoren funktionieren. Im Gegensatz zu Pseudo-Klassen-Selektoren sollten :nth-col() und :nth-last-col() in der Lage sein, implizite Grid-Spalten anzusprechen.

symbols()

Diese Funktion ermöglicht es Ihnen, eine Liste verschiedener Zeichentypen für Listenzeichen anzugeben. Ähnlich wie bei annotation() sollten Sie sicherstellen, dass die von Ihnen verwendete Schriftart eine Glyphe enthält, die Sie als Symbol verwenden möchten, bevor Sie versuchen, symbols() zum Funktionieren zu bringen.

Veraltete Funktionen

Manchmal funktionieren Dinge einfach nicht wie erwartet. Obwohl veraltete CSS-Funktionen aus Gründen der Abwärtskompatibilität möglicherweise noch im Browser gerendert werden, wird empfohlen, sie nicht mehr zu verwenden.

matrix() und matrix3d()

Diese Funktionen wurden zu diskreteren Funktionen für Größe und Skalierung umgewandelt.

rect()

Diese Funktion war Teil der veralteten clip-Eigenschaft. Verwenden Sie stattdessen die clip-path-Eigenschaft und ihre Werte.

target-counter(), target-counters() und target-text()

Diese Funktionen waren dazu gedacht, mit Fragment-URLs für paginierte (gedruckte) Medien zu arbeiten. Sie können mehr darüber in der Dokumentation des W3C zu CSS Generated Content for Paged Media Module lesen.

Typografie

Das Web ist Typografie, daher ist es sinnvoll, Ihrer Schrift die Sorgfalt und Aufmerksamkeit zukommen zu lassen, die sie verdient. Während CSS einige Funktionen bietet, die speziell dafür entwickelt wurden, das Potenzial der ausgewählten Schriftarten Ihrer Website oder Web-App freizusetzen, wird geraten, die folgenden Funktionen **nicht** zu verwenden, um auf diese erweiterten Funktionen zuzugreifen. 

Verwenden Sie stattdessen eine Low-Level-Syntax über font-feature-settings. Sie können herausfinden, ob die von Ihnen verwendete Schriftart diese Funktionen unterstützt, indem Sie ein  Tool wie Wakamai Fondue verwenden.

character-variant(), styleset() und stylistic()

Viele von professionellen Foundries hergestellte Schriftarten enthalten alternative Behandlungen für bestimmte Buchstaben oder Buchstabenkombinationen. Ein Anwendungsbeispiel sind unterschiedliche Variationen von häufig verwendeten Buchstaben für Schriftarten, die wie Handschrift aussehen sollen, um sie natürlicher wirken zu lassen.

Two examples of the sentence, “Easy Sunday morning & my fox. The first sentence does not have Stylistic Alternates enabled. The second sentence does, with the alternate characters (a, “un”, “m, “rn” g, &, m, f, and x) highlighted in green. Screenshot.
Beispiel für stilistische Alternativen von Tunghsiao Lius Artikel „OpenType Features in CSS“

Die Nutzung dieser Funktionen aktiviert diese speziellen alternativen Zeichen, sofern sie im Glyphenbestand der Schriftart vorhanden sind. 

Leider ist dies kein standardisiertes Angebot. Verschiedene Schriftarten haben unterschiedliche Unterstützungsbereiche, je nachdem, was der Typograf einschließen wollte. Es wäre ratsam zu prüfen, ob die von Ihnen verwendete Schriftart diese speziellen Funktionen unterstützt, bevor Sie Code schreiben.

format()

Wenn Sie eine Schriftart über die Funktion url() importieren, ist die Funktion format() ein optionaler Hinweis, mit dem Sie das Dateiformat der Schriftart manuell angeben können. Wenn dieser Hinweis gegeben wird, lädt der Browser die Schriftart nicht herunter, wenn er das angegebene Dateiformat nicht erkennt.

@font-face {
  font-family: 'MyWebFont';
  src: url('mywebfont.woff2') format('woff2'), /* Cutting edge browsers */
       url('mywebfont.woff') format('woff'), /* Most modern Browsers */
       url('mywebfont.ttf') format('truetype'); /* Older Safari, Android, iOS */
}

leader()

Sie wissen, wenn Sie in einem Restaurant eine Speisekarte lesen und eine Reihe von Punkten steht, die Ihnen helfen, den Preis herauszufinden, der zu welchem Menüpunkt gehört? Das sind Anführer (leaders). 

Das W3C hatte Pläne dafür mit seinem CSS Generated Content for Paged Media Module, aber es scheint leider, dass leader() nie wirklich durchgestartet ist. Glücklicherweise bietet das W3C auch ein Beispiel, wie dieser Effekt mit einer cleveren Anwendung der content-Eigenschaft erzielt werden kann erreicht werden kann.

local()

local() ermöglicht es Ihnen, eine lokal installierte Schriftart anzugeben, d. h. sie ist auf dem Gerät vorhanden. Lokale Schriftarten sind entweder auf dem Gerät vorinstalliert oder können manuell installiert werden. 

Darauf zu wetten, dass jemand eine Schriftart installiert, damit Dinge so aussehen, wie Sie es möchten, ist sehr riskant! Aus diesem Grund wird empfohlen, keine lokale Schriftart anzugeben, die manuell installiert werden muss. Ihre Website wird nicht so aussehen, wie sie beabsichtigt ist, selbst wenn Sie keine Fallback-Schriftart angeben.

@font-face {
  font-family: 'FeltTipPen';
  src: local('Felt Tip Pen Web'), /* Full font name */
       local('FeltTipPen-Regular'); /* Postscript name */
}

ornaments()

Spezielle Dingbats können mit dieser Funktion aktiviert werden. Seien Sie vorsichtig, da nicht alle Dingbat-Zeichen richtig kodiert sind, so dass sie gut funktionieren, wenn ein Benutzer etwas tut, wie z. B. die Schriftart zu ändern oder einen spezialisierten Browser-Modus zu verwenden.

swash()

Swashes sind alternative visuelle Behandlungen für Buchstaben, die ihnen einen besonders verzierten Schwung verleihen. Sie sind häufig in kursiven und Schreibschrift-Schriftarten zu finden.

An example of a swash being applied to a script-style typeface. There’s two versions of the phrase, “Fred And Ginger”. The first version doesn’t have swashes activated. The second example does. In the second example, the letter F, and, and the letter G are highlighted to demonstrate them being activated. Screenshot.
Beispiel für Swashes von Tunghsiao Lius „OpenType Features in CSS“

Warum so viele?

CSS wird genauso oft kritisiert wie missverstanden. Der Leitgedanke, um zu verstehen, warum all diese Funktionen uns zur Verfügung stehen, ist zu wissen, dass CSS nicht vorschreibend ist – nicht jede Website muss wie ein Microsoft Word-Dokument aussehen. 

Die Technologien, die das Web antreiben, sind so konzipiert, dass jemand mit genügend Interesse alles bauen kann, was er will. Es ist ein mächtiges, revolutionäres Konzept, ein großer Teil dessen, warum das Web so allgegenwärtig wurde.