<basic-shape>
Baseline Widely available *
This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.
* Some parts of this feature may have varying levels of support.
Der <basic-shape>
CSS Datentyp repräsentiert eine Form, die in den Eigenschaften clip-path
, shape-outside
und offset-path
verwendet wird.
Probieren Sie es aus
clip-path: inset(22% 12% 15px 35px);
clip-path: circle(6rem at 12rem 8rem);
clip-path: ellipse(115px 55px at 50% 40%);
clip-path: polygon(
50% 2.4%,
34.5% 33.8%,
0% 38.8%,
25% 63.1%,
19.1% 97.6%,
50% 81.3%,
80.9% 97.6%,
75% 63.1%,
100% 38.8%,
65.5% 33.8%
);
clip-path: path("M 50,245 A 160,160 0,0,1 360,120 z");
<section class="default-example" id="default-example">
<div class="transition-all" id="example-element"></div>
</section>
#default-example {
background: #fe9;
}
#example-element {
background: linear-gradient(to bottom right, #f52, #05f);
width: 100%;
height: 100%;
}
Syntax
Der <basic-shape>
Datentyp wird verwendet, um grundlegende Formen zu erstellen, einschließlich Rechtecke durch Behälterinset, durch Koordinatenabstand oder durch festgelegte Dimensionen, Kreise, Ellipsen, Polygone, Pfade und vom Autor erstellte Formen. Diese grundlegenden Formen werden durch eine <basic_shape>
CSS-Funktion definiert, wobei jeder Wert einen Parameter erfordert, der der funktionsspezifischen Syntax der Form folgt.
Gemeinsame Parameter
Die gemeinsamen Parameter, die in der Syntax einiger grundlegender Formfunktionen verwendet werden, umfassen:
round <'border-radius'>
-
Definiert abgerundete Ecken für Rechtecke durch Behälterinset, Rechtecke durch Abstand und Rechtecke mit Dimensionen unter Verwendung der gleichen Syntax wie die CSS-Kurzformeigenschaft
border-radius
. <shape-radius>
-
Definiert den Radius für einen Kreis oder eine Ellipse. Gültige Werte sind
<length>
,<percentage>
,closest-side
(der Standard) undfarthest-side
. Negative Werte sind ungültig.Der Schlüsselwortwert
closest-side
verwendet die Länge vom Mittelpunkt der Form zur nächsten Seite des Referenzrahmens, um die Radiuslänge zu erstellen. Der Schlüsselwortwertfarthest-side
verwendet die Länge vom Mittelpunkt der Form zur entferntesten Seite des Referenzrahmens. <position>
-
Definiert die Mitte der
<position>
eines Kreises oder einer Ellipse. Es ist standardmäßigcenter
, wenn es ausgelassen wird. <fill-rule>
-
Legt die
fill-rule
fest, die verwendet wird, um zu bestimmen, wie der Innenraum der durch die grundlegenden Formen definierte Form Polygon, Pfad und Form gefüllt werden soll. Mögliche Werte sindnonzero
(der Standard) undevenodd
.Hinweis:>
<fill-rule>
wird inoffset-path
nicht unterstützt und führt zur Ungültigkeit der Eigenschaft, wenn es verwendet wird.
Syntax für Rechtecke durch Behälterinset
Die inset()
Funktion erstellt ein Inset-Rechteck, dessen Größe durch den Abstand jeder der vier Seiten seines Behälters und, optional, durch abgerundete Ecken definiert ist.
inset( <length-percentage>{1,4} [ round <'border-radius'> ]? )
Wenn alle vier ersten Argumente bereitgestellt werden, repräsentieren sie die oberen, rechten, unteren und linken Versätze vom Referenzrahmen nach innen, die die Position der Kanten des Inset-Rechtecks definieren. Diese Argumente folgen der Syntax der Kurzform margin
, die es erlaubt, alle vier Insets mit einem, zwei, drei oder vier Werten festzulegen.
Wenn ein Paar von Insets einer Dimension mehr als 100% dieser Dimension ausmacht, werden beide Werte proportional reduziert, sodass ihre Summe 100% ergibt. Zum Beispiel wird der Wert inset(90% 10% 60% 10%)
mit einem oberen Inset von 90%
und einem unteren Inset von 60%
proportional zu inset(60% 10% 40% 10%)
reduziert. Solche Formen, die keinen Bereich umschließen und keinen shape-margin
haben, beeinflussen das Umfließen nicht.
Syntax für Rechtecke durch Abstand
Die rect()
Funktion definiert ein Rechteck unter Verwendung der festgelegten Abstände von den oberen und linken Kanten des Referenzrahmens mit optionalen abgerundeten Ecken.
rect( [ <length-percentage> | auto ]{4} [ round <'border-radius'> ]? )
Wenn die rect()
Funktion verwendet wird, definieren Sie nicht die Breite und Höhe des Rechtecks. Stattdessen geben Sie vier Werte an, um das Rechteck zu erstellen, wobei seine Dimensionen durch die Größe des Referenzrahmens und die vier Versatzwerte bestimmt werden. Jeder Wert kann entweder eine <length>
, ein <percentage>
oder das Schlüsselwort auto
sein. Das Schlüsselwort auto
wird als 0%
für die oberen und linken Werte und als 100%
für die unteren und rechten Werte interpretiert.
Syntax für Rechtecke mit Dimensionen
Die xywh()
Funktion definiert ein Rechteck, das zu den angegebenen Abständen von den linken (x
) und oberen (y
) Kanten des Referenzrahmens positioniert ist und durch die angegebenen Breiten- (w
) und Höhen- (h
) Werte des Rechtecks, in dieser Reihenfolge, dimensioniert wird, mit optionalen abgerundeten Ecken.
xywh( <length-percentage>{2} <length-percentage [0,∞]>{2} [ round <'border-radius'> ]? )
Syntax für Kreise
Die circle()
Funktion definiert einen Kreis unter Verwendung eines Radius und einer Position.
circle( <shape-radius>? [ at <position> ]? )
Das <shape-radius>
Argument repräsentiert den Radius des Kreises, definiert entweder als <length>
oder als <percentage>
. Ein Prozentwert wird hier aus der verwendeten Breite und Höhe des Referenzrahmens als sqrt(width^2+height^2)/sqrt(2)
aufgelöst. Wenn er weggelassen wird, wird der Radius durch closest-side
definiert.
Syntax für Ellipsen
Die ellipse()
Funktion definiert eine Ellipse durch zwei Radien und eine Position.
ellipse( [ <shape-radius>{2} ]? [ at <position> ]? )
Die <shape-radius>
Argumente repräsentieren rx und ry, die Radien der x-Achse und der y-Achse der Ellipse, in dieser Reihenfolge. Diese Werte sind entweder als <length>
oder als <percentage>
angegeben. Prozentwerte werden hier gegen die verwendete Breite (für den rx-Wert) und die verwendete Höhe (für den ry-Wert) des Referenzrahmens aufgelöst. Wenn nur ein Radiuswert angegeben ist, ist die ellipse()
-Formfunktion ungültig. Wenn kein Wert angegeben wird, wird 50% 50%
verwendet.
Syntax für Polygone
Die polygon()
Funktion definiert ein Polygon unter Verwendung einer SVG fill-rule
und einer Reihe von Koordinaten.
polygon( <'fill-rule'>? , [ <length-percentage> <length-percentage> ]# )
Die Funktion nimmt eine Liste von durch Kommas getrennten Koordinatenpaaren an, wobei jedes Paar aus zwei durch Leerzeichen getrennten <length-percentage>
Werten als xi und yi Paar besteht. Diese Werte repräsentieren die x- und y-Achse-Koordinaten des Polygons an Position i (der Eckpunkt, an dem sich zwei Linien treffen).
Syntax für Pfade
Die path()
Funktion definiert eine Form unter Verwendung einer SVG fill-rule
und einer SVG Pfaddefinition.
path( <'fill-rule'>? , <string> )
Der erforderliche <string>
ist ein SVG-Pfad als Zeichenkette. Die path()
Funktion ist kein gültiger Wert für die shape-outside
Eigenschaft.
Syntax für Formen
Die shape()
Funktion definiert eine Form mit einem anfänglichen Startpunkt und einer Reihe von Formbefehlen.
shape( <'fill-rule'>? from <coordinate-pair> , <shape-command># )
Der from <coordinate-pair>
Parameter repräsentiert den Startpunkt für den ersten Formbefehl, und <shape-command>
definiert einen oder mehrere Formbefehle, die den SVG-Pfadbefehlen ähnlich sind. Die shape()
Funktion ist kein gültiger Wert für die shape-outside
Eigenschaft.
Beschreibung
Bei der Erstellung einer Form wird der Referenzrahmen durch die Eigenschaft definiert, die <basic-shape>
Werte verwendet. Das Koordinatensystem für die Form hat seinen Ursprung standardmäßig in der oberen linken Ecke der Margin-Box des Elements, wobei die x-Achse nach rechts und die y-Achse nach unten verläuft. Alle in Prozent angegebenen Längen werden von den Dimensionen des Referenzrahmens aufgelöst.
Der Standard-Referenzrahmen ist die margin-box
, wie im Bild unten dargestellt. Das Bild zeigt einen Kreis, der mit shape-outside: circle(50%)
erstellt wurde, und die verschiedenen Teile des Box-Modells, wie sie in den Entwicklerwerkzeugen eines Browsers zu sehen sind. Die Form hier ist in Bezug auf die margin-box definiert.
Berechnete Werte grundlegender Formen
Die Werte in einer <basic-shape>
Funktion werden wie angegeben berechnet, mit den folgenden zusätzlichen Überlegungen:
- Für alle ausgelassenen Werte werden deren Standardwerte verwendet.
- Ein
<position>
Wert incircle()
oderellipse()
wird als Paar von Versätzen von der oberen linken Ecke des Referenzrahmens berechnet: der erste Versatz ist horizontal, und der zweite ist vertikal. Jeder Versatz wird als<length-percentage>
Wert angegeben. - Ein
<border-radius>
Wert ininset()
wird in eine Liste von acht Werten expandiert, die jeweils entweder eine<length>
oder ein<percentage>
sind. inset()
,rect()
, undxywh()
Funktionen berechnen sich zur äquivalenteninset()
Funktion.
Interpolation grundlegender Formen
Beim Animieren zwischen zwei <basic-shape>
Funktionen werden die unten aufgeführten Interpolationsregeln befolgt. Die Parameterwerte jeder <basic-shape>
Funktion bilden eine Liste. Damit eine Interpolation zwischen zwei Formen stattfinden kann, müssen beide Formen den gleichen Referenzrahmen verwenden, und die Anzahl und der Typ der Werte in beiden <basic-shape>
Listen müssen übereinstimmen.
Jeder Wert in den Listen der beiden <basic-shape>
Funktionen wird basierend auf seinem berechneten Wert als <number>
, <length>
, <percentage>
, <angle>
, oder calc()
interpoliert, soweit möglich. Eine Interpolation kann immer noch stattfinden, wenn die Werte nicht einer dieser Datentypten sind, aber zwischen den beiden interpolierenden grundlegenden Formfunktionen identisch sind, wie z.B. nonzero
.
-
Beide Formen sind vom Typ
ellipse()
oder Typcircle()
: Die Interpolation wird zwischen jedem entsprechenden Wert angewendet, wenn ihre Radien entweder als<length>
oder als<percentage>
angegeben sind (anstatt als Schlüsselwörter wieclosest-side
oderfarthest-side
). -
Beide Formen sind vom Typ
inset()
: Die Interpolation wird zwischen jedem entsprechenden Wert angewendet. -
Beide Formen sind vom Typ
polygon()
: Die Interpolation wird zwischen jedem entsprechenden Wert angewendet, wenn sie die gleiche<fill-rule>
haben und die gleiche Anzahl von durch Kommas getrennten Koordinatenpaaren besitzen. -
Beide Formen sind vom Typ
path()
: Die Interpolation wird auf jeden Parameter als<number>
angewendet, wenn die Pfadzeichenfolgen in beiden Formen die gleiche Anzahl, Art und Reihenfolge Pfadebefehle entsprechen. -
Beide Formen sind vom Typ
shape()
: Die Interpolation wird zwischen jedem entsprechenden Wert angewendet, wenn sie das identische Befehls-Schlüsselwort und das gleiche<by-to>
Schlüsselwort verwenden. Wennshape()
in derclip-path
Eigenschaft verwendet wird, interpolieren die beiden Formen, wenn sie auch die gleiche<fill-rule>
haben.-
Wenn sie das
<curve-command>
oder das<smooth-command>
verwenden, muss die Anzahl der Kontrollpunkte für die Interpolation übereinstimmen. -
Wenn sie das
<arc-command>
mit unterschiedlichen<arc-sweep>
Richtungen verwenden, geht das interpolierte Ergebnis im Uhrzeigersinn (cw
). Wenn sie unterschiedliche<arc-size>
Schlüsselwörter verwenden, wird die Größe unter Verwendung deslarge
Wertes interpoliert.
-
-
Eine Form ist vom Typ
path()
und die andere ist vom Typshape()
: Die Interpolation wird zwischen jedem entsprechenden Wert angewendet, wenn die Liste der Pfadebefehle sowohl in der Anzahl als auch in der Reihenfolge identisch ist. Die interpolierte Form ist eineshape()
Funktion, die die gleiche Liste von Pfadebefehlen beibehält.
In allen anderen Fällen erfolgt keine Interpolation und die Animation ist diskret.
Beispiele
Animiertes Polygon
In diesem Beispiel verwenden wir die @keyframes At-Regel, um einen Clip-Pfad zwischen zwei Polygonen zu animieren. Beachten Sie, dass beide Polygone die gleiche Anzahl von Eckpunkten haben, was für diese Art der Animation notwendig ist.
HTML
<div></div>
CSS
div {
width: 300px;
height: 300px;
background: repeating-linear-gradient(red, orange 50px);
clip-path: polygon(
50% 0%,
60% 40%,
100% 50%,
60% 60%,
50% 100%,
40% 60%,
0% 50%,
40% 40%
);
animation: 4s poly infinite alternate ease-in-out;
margin: 10px auto;
}
@keyframes poly {
from {
clip-path: polygon(
50% 0%,
60% 40%,
100% 50%,
60% 60%,
50% 100%,
40% 60%,
0% 50%,
40% 40%
);
}
to {
clip-path: polygon(
50% 30%,
100% 0%,
70% 50%,
100% 100%,
50% 70%,
0% 100%,
30% 50%,
0% 0%
);
}
}
Ergebnis
Spezifikationen
Specification |
---|
CSS Shapes Module Level 1 # basic-shape-functions |
Browser-Kompatibilität
Siehe auch
- Eigenschaften, die diesen Datentyp verwenden:
clip-path
,offset-path
,shape-outside
, - CSS Formen Modul
- Überblick über CSS Formen
- Formpfade in CSS bearbeiten — Firefox Developer Tools