Pfade, Formen, Zuschneiden und Maskieren

Das Rendern von HTML basiert auf dem Box-Modell, aber es gibt mehr als nur Rechtecke (im Leben und im Webdesign). CSS bietet mehrere Möglichkeiten, um zu ändern, welche Bereiche eines Elements gerendert werden. So können Entwickler Designs erstellen, die alle Formen und Größen unterstützen. Beim Zuschneiden werden geometrische Formen verwendet, während sich die Maskierung auf die Sichtbarkeit auf Pixelebene auswirkt.

Pfade und Formen

In CSS werden Funktionen verwendet, um Formen zu definieren. Allgemeine Informationen zu Funktionen finden Sie im Modul „CSS-Funktionen“. In diesem Abschnitt erfahren Sie, wie Sie Formen in CSS erstellen. In allen folgenden Beispielen werden die Formen verwendet, die Sie mit der Property clip-path erstellen. Dadurch wird der sichtbare Bereich auf das Innere der Form beschränkt. So können sich die Elemente visuell vom Rahmen des Elements unterscheiden. Wir gehen später noch genauer auf das Clipping ein.

In CSS definierte Formen können entweder einfache Formen (z. B. Kreise, Rechtecke und Polygone) oder Pfade sein, mit denen komplexe und zusammengesetzte Formen definiert werden können.

Einfache Formen

circle() und ellipse()

Mit den Funktionen circle() und ellipse() werden runde und ovale Formen mit Radien relativ zu einem Element definiert. Die Funktion circle() akzeptiert als Argument eine einzelne Größe oder einen einzelnen Prozentsatz. Standardmäßig wird die Form mit beiden Funktionen relativ zur Mitte des Elements positioniert. Beide akzeptieren eine optionale Position nach dem at-Keyword, die als Längen, Prozentsätze oder Positions-Keywords ausgedrückt werden kann.

.my-element {
  width: 60px;
  height: 60px;
  background: blue;
  clip-path: circle(50%);
}

Wenn die Funktion „circle()“ das Argument „50%“ erhält, wird ein perfekter Kreis gerendert.

Im vorherigen Beispiel wird ein kreisförmiger Beschneidungspfad mit der Funktion circle() gezeigt. Mit einem Radius von 50% wird ein Kreis mit der vollen Breite des Elements erstellt. Die Funktion ellipse() akzeptiert zwei Argumente, die die horizontalen und vertikalen Radien der Form darstellen.

.my-element {
  width: 60px;
  height: 60px;
  background: blue;
  clip-path: ellipse(50% 25%);
}

Die Funktion „ellipse()“ erzeugt eine Ellipse mit Prozentangaben. Bei Argumenten von 50% und 25% wird eine Ellipse erstellt, die sich auf der X-Achse doppelt so weit erstreckt wie auf der Y-Achse.

Im vorherigen Beispiel wird ein elliptischer Beschneidungspfad mit der Funktion ellipse() dargestellt. Bei einem Radius von 50% wird eine Ellipse mit der vollen Breite des Elements erstellt. Im folgenden Beispiel wird dieselbe Ellipse mit dem Mittelpunkt oben im Element positioniert.

.my-element {
  width: 60px;
  height: 60px;
  background: blue;
  clip-path: ellipse(50% 25% at center top);
}

rect() und inset()

Mit den Funktionen rect() und inset() können Sie ein Rechteck auf unterschiedliche Weise definieren, indem Sie die Position seiner Seiten relativ zu den Seiten eines Elements festlegen. So können Sie Rechtecke erstellen, die sich optisch vom Standardfeld des Elements unterscheiden. Sie akzeptieren optional das Keyword round, um ein Rechteck mit abgerundeten Ecken zu erstellen. Dabei wird dieselbe Syntax wie für die Kurzform border-radius verwendet.

Mit der Funktion rect() wird die Position der Ober- und Unterseite des Rechtecks relativ zum oberen Rand des Elements und die Position der linken und rechten Seite relativ zum linken Rand des Elements definiert. Diese Funktion akzeptiert vier Größen- oder Prozenteinheiten als Argumente, die die obere, rechte, untere und linke Seite definieren. Die Funktion rect() ist nützlich, wenn Sie ein Rechteck benötigen, das sich nicht skalieren lässt, wenn sich die Größe des Elements ändert, oder das die gleichen Proportionen beibehält, wenn sich das Element ändert.

.my-element {
  width: 80px;
  height: 60px;
  background: blue;
  clip-path: rect(15px 75px 45px 10px);
}

Die Funktion „rect()“ akzeptiert vier Argumente, um die Größe eines Rechtecks zu definieren. In diesem Fall sind die Argumente 15 px, 75 px, 45 px und 10 px.

Im vorherigen Beispiel wird ein rechteckiger Beschneidungspfad mit der Funktion rect() definiert. Die Abmessungen beziehen sich auf die oberen und linken Ränder des Elements, wie im Diagramm dargestellt.

Die Funktion inset() definiert die Position der Seiten eines Rechtecks anhand des Abstands nach innen von jeder Seite eines Elements. Diese Funktion akzeptiert ein bis vier Größen- oder Prozenteinheiten als Argumente, sodass Sie mehrere Seiten gleichzeitig definieren können. Die Funktion inset() ist nützlich, wenn Sie ein Rechteck benötigen, das mit dem Element skaliert wird, oder ein Rechteck, das einen festen Abstand zu den Rändern des Elements hat.

.my-element {
  width: 80px;
  height: 60px;
  background: blue;
  clip-path: inset(15px 5px 15px 10px);
}

Mit der Funktion „inset()“ kann die intrinsische Größe des Elements verringert werden. Die Argumente für diese Funktion in diesem Diagramm sind 15 px, 5 px, 15 px und 10 px.

Im vorherigen Beispiel wird ein rechteckiger Beschneidungspfad mit der Funktion inset() definiert. Die Abmessungen beziehen sich auf die Seiten des Elements.

Die Funktionen rect() und inset() akzeptieren optional das Schlüsselwort round, um ein Rechteck mit abgerundeten Ecken zu erstellen. Dabei wird dieselbe Syntax wie für die Kurzform-Eigenschaft border-radius verwendet. Im folgenden Beispiel sehen Sie abgerundete Versionen der zuvor gezeigten Rechtecke.

.rounded-rect {
  width: 80px;
  height: 60px;
  background: blue;
  clip-path: inset(15px 5px 15px 10px round 5px);
}

.rounded-inset {
  width: 80px;
  height: 60px;
  background: blue;
  clip-path: inset(15px 5px 15px 10px round 5px);
}

polygon()

Für andere Formen wie Dreiecke, Fünfecke oder Sterne können Sie mit der Funktion polygon() Formen erstellen, indem Sie mehrere Punkte mit geraden Linien verbinden. Die Funktion polygon() akzeptiert eine Liste von Paaren, die aus zwei Längen- oder Prozenteinheiten bestehen. Jedes Paar beschreibt einen Punkt auf dem Polygon: Der erste Wert ist der Abstand vom linken Rand des Elements, der zweite der Abstand vom oberen Rand des Elements. Sie müssen das Polygon nicht schließen, da es durch die Verbindung des letzten mit dem ersten Punkt vervollständigt wird.

.my-element {
  width: 60px;
  height: 60px;
  background: blue;
  clip-path: polygon(
    50% 0,
    0 100%,
    100% 100%
  );
}

Die Funktion „polygon()“ akzeptiert eine variable Anzahl von Argumenten, um komplexe Formen zu zeichnen. In diesem Fall werden die Argumente so erstellt, dass ein Dreieck entsteht.

Im vorherigen Beispiel wird ein dreieckiger Beschneidungspfad erstellt, indem drei Punkte definiert werden.

Standardmäßig werden überlappende Bereiche mit der Funktion polygon() als gefüllt gerendert. Sie können dieses Verhalten mit einem optionalen ersten Argument ändern, der sogenannten Füllregel. Wenn Sie zwischen gefüllten und nicht gefüllten Bereichen wechseln möchten, legen Sie die Füllregel auf evenodd fest. Wenn Sie die Standardregel für das Füllen verwenden möchten, legen Sie sie auf nonzero fest.

Im vorherigen Beispiel wird die Funktion polygon() mit trigonometrischen Funktionen verwendet, um regelmäßige Polygone und Sterne zu erstellen. Damit wird nicht das größtmögliche regelmäßige Polygon erstellt, das in ein Element passt, oder das Polygon zentriert. Das können Sie selbst versuchen. Die Sternformen in diesem Beispiel veranschaulichen auch die Füllregeln nonzero und evenodd.

Komplexe Formen

Wenn die grundlegenden Formfunktionen nicht ausreichen, um eine komplexe Form zu beschreiben, bietet CSS Funktionen, die eine komplexere Syntax verwenden, um Merkmale wie Kurven und Linien zu beschreiben. Diese Funktionen sind auch für zusammengesetzte Formen nützlich, die aus mehreren Formen bestehen, z. B. ein Kreis mit einem Loch.

path()

Die Funktion path() akzeptiert einen String mit SVG-Pfadsyntax, um eine Form zu beschreiben. So können komplexe Formen mithilfe von Anweisungen erstellt werden, die die Linien und Kurven beschreiben, aus denen die Form besteht. Das direkte Bearbeiten der SVG-Syntax kann kompliziert sein. Wir empfehlen daher, einen speziellen visuellen Editor zu verwenden, der die Syntax beim Erstellen von Formen mit der Funktion path() exportieren kann.

Die Funktion path() verwendet keine CSS-Größeneinheiten und alle Werte werden als Pixel interpretiert. Das bedeutet, dass Formen, die mit der Pfadfunktion erstellt wurden, nicht auf die Größe des Elements oder Containers reagieren. Wir empfehlen, path() nur für Formen mit festen Abmessungen zu verwenden.

shape()

Die Funktion shape() verwendet eine Befehlssyntax zum Beschreiben einer Form, ähnlich wie die Funktion path(). Die Befehle der Funktion shape() sind jedoch natives CSS und können CSS-Größeneinheiten verwenden. So können Formen, die mit der Funktion shape() definiert wurden, responsiv skaliert werden.

Im vorherigen Beispiel werden die Funktionen path() und shape() verwendet, um eine Herzform und einen Kreis mit einem Loch in der Mitte zu definieren. Im Beispiel wird für beide Funktionen derselbe Wert in Pixeln verwendet. Für die shape()-Funktionen könnten aber auch andere CSS-Größeneinheiten wie Prozentsätze oder containerbezogene Einheiten verwendet werden.

Clipping

Durch Beschneiden wird festgelegt, welche Bereiche eines Elements sichtbar sind. Das ist vergleichbar mit dem Ausschneiden eines Bildes aus einer Zeitschrift. Mit der Eigenschaft clip-path wird der Pfad festgelegt, der zum Definieren des Clip-Bereichs verwendet wird.

Wie Sie in den Beispielen im vorherigen Abschnitt gesehen haben, kann jede der grundlegenden Form- oder Pfadfunktionen als clip-path verwendet werden. Das Attribut clip-path unterstützt auch Pfade, die in einem SVG-Element clipPath definiert sind. Diese können entweder eingebettet oder in einer separaten Datei enthalten sein.

So kann das Zuschneiden ein Bild beeinflussen: Auf diesem Bild wird ein Foto eines Kätzchens sowohl mit einem Kreis als auch mit einem komplexen Beschneidungspfad zugeschnitten, der das Kätzchen vollständig umreißt.

Das vorherige Diagramm zeigt, wie sich der sichtbare Bereich eines Bildes ändert, wenn einem Bildelement ein clip-path hinzugefügt wird. Der obere Beschneidungspfad verwendet die Funktion circle(), der untere ein SVG-clipPath. Der mit der Funktion circle() erstellte Kreis wird standardmäßig mittig auf dem Element positioniert.

Das Attribut clip-path akzeptiert nur einen einzelnen Pfad. Wenn Sie ein Element mit mehreren Formen beschneiden möchten, die sich nicht überschneiden, verwenden Sie die Funktionen path() oder shape(), um einen zusammengesetzten Pfad zu definieren, oder verwenden Sie ein SVG-clipPath. Eine weitere Option für komplexe Szenarien ist die Verwendung von Maskierung anstelle von Clipping. Dies wird in einem späteren Abschnitt behandelt.

Mit Formen zuschneiden

Wenn Sie einen Clip mit einer einfachen Form oder Pfadfunktion erstellen möchten, legen Sie die clip-path-Eigenschaft auf den von der Funktion zurückgegebenen Wert fest, wie in den vorherigen Beispielen. Bei jeder Funktion wird die Beschneidungsform anders relativ zum Element positioniert. Sehen Sie sich daher die Referenz für jede Funktion an.

Im vorherigen Beispiel haben zwei Elemente ein kreisförmiges clip-path, das mit der Klasse .clipped angewendet wird. Beachten Sie, dass die clip-path relativ zu den einzelnen Elementen positioniert wird und der Text in der clip-path nicht umgebrochen wird, um der Form zu folgen.

Referenzrahmen eines Beschneidungspfads

Standardmäßig wird der Rahmen eines Elements in den Beschneidungspfad einbezogen. Wenn Sie eine der grundlegenden Formfunktionen verwenden, können Sie den Referenzrahmen des Clip-Pfads so festlegen, dass er nur den Bereich des Elements innerhalb des Rahmens enthält. Gültige Werte für das Referenzfeld sind stroke-box (Standard) und fill-box (um nur den Bereich innerhalb des Rahmens einzuschließen).

Im vorherigen Beispiel werden Elemente mit einem großen (20px-Rahmen) gezeigt, bei denen jeweils die Funktion inset() verwendet wird, um die clip-path festzulegen. Das Element, das relativ zum Rahmen des Elements abgeschnitten wird, zeigt weiterhin einen Teil des Rahmens an. Die Elemente, die relativ zum Bereich innerhalb des Rahmens beschnitten werden, haben keinen Rahmen und sind kleiner, auch wenn der Inset-Wert derselbe ist.

Clipping mit Grafiken

Ein Beschneidungspfad kann in einem SVG-Dokument definiert werden, das entweder in das HTML-Dokument eingebettet oder extern referenziert wird. Das kann nützlich sein, um komplexe Beschneidungspfade zu definieren, die in Grafikprogrammen erstellt wurden, oder Beschneidungspfade, die mehrere Formen kombinieren.

<img id="kitten" src="kitten.png">

<svg>
  <defs>
    <clipPath id="kitten-clip-shape">
      <circle cx="130" cy="175" r="100" />
    </clipPath>
  </defs>
</svg>

<style>
  #kitten {
    clip-path: url(#kitten-clip-shape);
  }
</style>

Im obigen Beispiel wird die clipPath mit einem id von kitten-clip-shape auf das <img>-Element angewendet. In diesem Fall ist das SVG-Dokument in das HTML eingebettet. Wenn das SVG-Dokument eine externe Datei mit dem Namen kitten-clipper.svg ist, wird stattdessen auf clipPath als url(kitten-clipper.svg#kitten-clip-shape) verwiesen.

Maskieren

Die Maskierung ist eine weitere Methode, um festzulegen, welche Bereiche eines Elements angezeigt oder ausgeblendet werden. Beim Zuschneiden werden einfache Formen oder Pfade verwendet, bei der Maskierung werden die Pixel eines Bildes oder eines Verlaufs verwendet, um die Sichtbarkeit zu bestimmen. Im Gegensatz zum Zuschneiden können Bereiche eines Elements bei der Maskierung teilweise transparent sein. Auf ein Element können mehrere Maskenbilder angewendet werden, um verschiedene Effekte zu erzielen.

Um eine Maske anzuwenden, legen Sie das Attribut mask-image fest. Diese Property akzeptiert ein oder mehrere Bilder, Verläufe oder Verweise auf <mask>-Elemente in einem SVG-Dokument. Sie können mehrere Maskenbilder anwenden, indem Sie sie durch Kommas trennen.

.my-element {
  mask-image: url(my-mask.png),
              linear-gradient(black 0%, transparent 100%);
}

Im vorherigen Beispiel wird .my-element zuerst mit einem PNG-Bild und dann mit einem linearen Farbverlauf maskiert. Standardmäßig werden mehrere Masken addiert, um die endgültige Maske zu erstellen.

Das vorherige Beispiel zeigt ein Bild, auf das eine oder mehrere Masken angewendet wurden. Aktivieren und deaktivieren Sie die einzelnen Masken, um zu sehen, wie sie zusammenwirken und den endgültigen Effekt erzeugen.

Alpha- und Luminanzmaskierung

Sie können eine Maske entweder mit dem alpha oder dem luminance des Bildes anwenden. Wenn Sie die Maskierung auf Grundlage von alpha vornehmen, wird die Transparenz jedes Pixels im Maskierungsbild auf das Element angewendet. Dabei werden alle Farbinformationen des Pixels ignoriert. Wenn Sie die Maskierung auf luminance basieren, werden sowohl die Transparenz als auch der Wert jedes Pixels (wie hell oder dunkel) auf das Element angewendet. Bei der Maskierung nach Luminanz werden hellere Farben als sichtbar und dunklere Farben als unsichtbar behandelt.

Verwenden Sie das Attribut mask-mode, um den Maskierungsmodus festzulegen. Standardmäßig ist die mask-mode-Property auf match-source festgelegt. Dadurch wird ein Modus basierend auf dem Typ des Maskenbildes festgelegt. Bei Bildern und Verläufen ist der Standardwert alpha. Bei SVG-Masken wird standardmäßig entweder der Wert der mask-type-Eigenschaft des <mask>-Elements oder luminance verwendet, wenn keine mask-type-Eigenschaft definiert ist.

Im vorherigen Beispiel wird ein Testmuster mit verschiedenen Farb- und Alphawerten als Maske verwendet. Wenn Sie mask-mode ein- und ausschalten, sehen Sie, dass der alpha-Modus auf Transparenz basiert, während der luminance-Modus sowohl auf der Helligkeit als auch auf der Transparenz der Farbe basiert.

Zusätzliche Maskierungseigenschaften

CSS bietet zusätzliche Eigenschaften, mit denen Sie das Verhalten Ihrer Masken optimieren können. Für jede der Eigenschaften kann eine durch Kommas getrennte Liste von Werten angegeben werden, die mit der Liste der Masken abgeglichen werden, die durch die Eigenschaft mask-image festgelegt wird. Wenn es weniger Werte als Masken gibt, wird die Liste wiederholt, bis für jede Maske ein Wert festgelegt wurde. Wenn es mehr Werte als Masken gibt, werden alle überschüssigen Werte verworfen.

Attribut Beschreibung
mask-clip

Legt fest, auf welche Referenzbox der Elementmasken die Masken angewendet werden. Die Standardeinstellung ist border-box..

mask-composite

Legt die Interaktion zwischen Masken fest, wenn mehrere Masken auf dasselbe Element angewendet werden. Die Standardeinstellung ist add.

mask-origin

Legt das Referenzfeld fest, das als Ursprung einer Maske dient. Die Standardeinstellung ist border-box. Das Verhalten ist ähnlich wie bei background-origin und es werden dieselben Keywords akzeptiert.

mask-position

Legt die Position einer Maske relativ zum mask-origin fest. Akzeptiert Positions-Keyword-Werte wie top oder center, Prozentsätze, Größeneinheiten oder Werte relativ zu einem Positions-Keyword. Das Verhalten ist ähnlich wie bei background-position und es werden dieselben Argumenttypen akzeptiert.

mask-repeat

Legt fest, wie eine Maske wiederholt wird, wenn das maskierte Element größer als die Maske ist. Die Standardeinstellung ist repeat. Das Verhalten ist ähnlich wie bei background-repeat und es werden dieselben Argumenttypen akzeptiert.

mask-size

Legt fest, wie eine Maske in Bezug auf die Größe des maskierten Elements skaliert wird. Die Standardeinstellung ist auto. Das Verhalten ist ähnlich wie bei background-size und es werden dieselben Argumenttypen akzeptiert.

Die Maskenkürzel

Mit der Kurzschreibweise für Masken können Sie mehrere Maskeneigenschaften gleichzeitig festlegen. Dadurch kann das Festlegen mehrerer Masken vereinfacht werden, da alle Eigenschaften jeder Maske gruppiert werden. Die Maskenkürzel entsprechen dem Festlegen dieser Attribute in der folgenden Reihenfolge: mask-image, mask-mode, mask-position, mask-size, mask-repeat, mask-origin, mask-clip und mask-composite. Nicht jede Property muss enthalten sein. Alle nicht enthaltenen Properties werden auf ihren ursprünglichen Wert zurückgesetzt. Da bis zu acht Properties pro Maske unterstützt werden, kann es hilfreich sein, eine vollständige Referenz zur Verfügung zu haben.

.longhand {
  mask-image: linear-gradient(white, black),
              linear-gradient(90deg, black, transparent);
  mask-mode: luminance, alpha;
  mask-position: bottom left, top right;
  mask-size: 50% 50%, 30% 30%;
}

.shorthand {
  mask: linear-gradient(white, black) luminance bottom left / 50% 50%,
        linear-gradient(90deg, black, transparent) alpha top right / 30% 30%;
}

Im vorherigen Beispiel werden auf jede Klasse zwei Masken angewendet. Im ersten Fall werden einzelne Eigenschaften verwendet, im zweiten die mask-Kurzschreibweise. Beide Stile sind gleichwertig.

Dynamische Textanpassung um schwebende Elemente

Wenn Sie ein Element beschneiden oder maskieren, ändern Sie nur den sichtbaren Bereich innerhalb des Rechtecks, das Rechteck selbst bleibt jedoch unverändert. Das bedeutet, dass sich ein schwebendes Element basierend auf seinem ursprünglichen Begrenzungsrahmen auf den Dokumentfluss auswirkt, nicht auf die sichtbaren Teile des Elements. Verwenden Sie das Attribut shape-outside zusammen mit dem Clip-Pfad, um den Fluss um ein Element herum zu definieren.

Mit dem Attribut shape-outside wird die Form definiert, um die herum der Inhalt eines Elements fließen soll. Diese Form kann eine der grundlegenden Formfunktionen sein, aber keine Formen, die mit den Funktionen path() oder shape() definiert wurden, oder ein clipPath, das in einem SVG-Dokument definiert ist.

Die shape-outside-Property akzeptiert auch ein Bild oder einen Farbverlauf. Wie beim Maskieren werden die Grenzen der Form durch die Transparenz des Bilds oder Farbverlaufs bestimmt. Mit der Eigenschaft shape-image-threshold wird festgelegt, welche Transparenzstufen innerhalb der Form berücksichtigt werden.

Formen in Animationen

„clip-path“ animieren

Sie können das Attribut clip-path animieren, um einen Übergang zwischen Formen zu schaffen. Sie müssen für jeden Keyframe dieselbe Formfunktion verwenden, um flüssige Animationen zu erstellen. Wenn Sie die Funktionen polygon() oder shape() verwenden, muss in jedem Keyframe dieselbe Anzahl von Punkten verwendet werden.

Im vorherigen Beispiel wird die clip-path eines Elements zwischen einem Fünfeck und einem Stern, der mit der Funktion polygon() definiert wurde, animiert. In diesem Beispiel wird die Füllregel evenodd verwendet, um zu zeigen, wie durch die animierten Punkte überlappende Bereiche entstehen.

Mit „offset-path“ animieren

Sie können auch Elemente entlang der Pfade animieren, die mit diesen Formfunktionen erstellt wurden. Mit der offset-path-Property wird die Form festgelegt, die als Pfad verwendet werden soll, und mit der offset-distance-Property die Position auf diesem Pfad. Sie können die ray()-Funktion auch mit dem Attribut offset-path verwenden, um eine Animation entlang einer geraden Linie zu erstellen.

Im vorherigen Beispiel wird dasselbe Polygon sowohl für eine clip-path als auch für eine offset-path verwendet. In der Animation wird offset-distance verwendet, um die kleineren Sterne entlang desselben Polygons zu bewegen, das der große Stern als clip-path verwendet.

Wissen testen

Welche der folgenden Optionen sind gültige Formfunktionen?

circle()
Richtig!
square()
Falsch.
hexagon()
Falsch.
polygon()
Richtig!
rectangle()
Falsch.
inset()
Richtig!

Richtig oder falsch: Formen, die mit der Funktion path() definiert werden, können mit Prozentangaben definiert werden.

Richtig
Falsch.
Falsch
Richtig!

Wahr oder falsch: Wenn Sie den Beschneidungspfad eines Elements festlegen, ändert sich der Textfluss um das Element nicht.

Richtig
Richtig!
Falsch
Falsch.

Welche der folgenden Optionen können als Beschneidungspfad verwendet werden?

Eine einfache Form
Richtig!
Ein SVG-clipMask-Element
Richtig!
Bitmapbild
Falsch.
Ein Farbverlauf
Falsch.

Welche der folgenden Optionen können als Maske verwendet werden?

Bitmapbild
Richtig!
Ein Farbverlauf
Richtig!
Ein SVG-Maskenelement
Richtig!
Eine einfache Form wie circle() oder rect()
Falsch.