offset-path
Baseline Widely available *
This feature is well established and works across many devices and browser versions. It’s been available across browsers since March 2022.
* Some parts of this feature may have varying levels of support.
Die offset-path
CSS Eigenschaft legt einen Pfad fest, dem ein Element folgen soll, und bestimmt die Positionierung des Elements innerhalb des Elterncontainers des Pfades oder des SVG-Koordinatensystems. Der Pfad ist eine Linie, eine Kurve oder eine geometrische Form, entlang der das Element positioniert wird oder sich bewegt.
Die offset-path
Eigenschaft wird in Kombination mit den Eigenschaften offset-distance
, offset-rotate
und offset-anchor
verwendet, um die Position und Ausrichtung des Elements entlang eines Pfades zu steuern.
Probieren Sie es aus
offset-path: path("M-70,-40 C-70,70 70,70 70,-40");
offset-path: path("M0,0 L60,70 L-60,30z");
#example-element {
width: 24px;
height: 24px;
background: #2bc4a2;
animation: distance 8000ms infinite linear;
animation-play-state: paused;
clip-path: polygon(0% 0%, 70% 0%, 100% 50%, 70% 100%, 0% 100%, 30% 50%);
}
#example-element.running {
animation-play-state: running;
}
#playback {
position: absolute;
top: 0;
left: 0;
font-size: 1em;
}
@keyframes distance {
0% {
offset-distance: 0%;
}
100% {
offset-distance: 100%;
}
}
#default-example {
position: relative;
}
window.addEventListener("load", () => {
const example = document.getElementById("example-element");
const button = document.getElementById("playback");
button.addEventListener("click", () => {
if (example.classList.contains("running")) {
example.classList.remove("running");
button.textContent = "Play";
} else {
example.classList.add("running");
button.textContent = "Pause";
}
});
});
Syntax
/* Default */
offset-path: none;
/* Line segment */
offset-path: ray(45deg closest-side contain);
offset-path: ray(contain 150deg at center center);
offset-path: ray(45deg);
/* URL */
offset-path: url(#myCircle);
/* Basic shape */
offset-path: circle(50% at 25% 25%);
offset-path: ellipse(50% 50% at 25% 25%);
offset-path: inset(50% 50% 50% 50%);
offset-path: polygon(30% 0%, 70% 0%, 100% 50%, 30% 100%, 0% 70%, 0% 30%);
offset-path: path("M 0,200 Q 200,200 260,80 Q 290,20 400,0 Q 300,100 400,200");
offset-path: rect(5px 5px 160px 145px round 20%);
offset-path: xywh(0 5px 100% 75% round 15% 0);
/* Coordinate box */
offset-path: content-box;
offset-path: padding-box;
offset-path: border-box;
offset-path: fill-box;
offset-path: stroke-box;
offset-path: view-box;
/* Global values */
offset-path: inherit;
offset-path: initial;
offset-path: revert;
offset-path: revert-layer;
offset-path: unset;
Werte
Die offset-path
Eigenschaft nimmt als Wert ein
Wert, einen
Wert, oder beides, oder das Schlüsselwort none
an. Der
Wert ist eine ray()
Funktion, ein
Wert oder ein
Wert.
none
-
Gibt an, dass das Element keinem Offset-Pfad folgt. Der
none
Wert entspricht dem, dass das Element keine offset transform hat. Die Bewegung des Elements wird in diesem Fall durch seine Standardpositionseigenschaften bestimmt, wietop
undleft
, anstatt durch einen Offset-Pfad. Dies ist der Standardwert. -
Eine
ray()
Funktion, ein
Wert oder ein
Wert, der den geometrischen Offset-Pfad angibt. Wird dieser Wert weggelassen, ist die Pfadform für den
Wertinset(0 round X)
, wobeiX
der Wert desborder-radius
des Elements ist, das den containing block festlegt.ray()
-
Definiert eine Linie, die an einer bestimmten Position beginnt, eine bestimmte Länge hat und in einem bestimmten Winkel verläuft. Die
ray()
Funktion akzeptiert bis zu vier Parameter – einen
, einen optionalen Größenwert, das optionale Schlüsselwortcontain
, und ein optionalesat
. -
Gibt die ID eines SVG-Formelements an. Der Pfad ist die Form des SVG
,
,
,
,
,
, oder
Elements, das durch seineid
in derurl()
Funktion referenziert wird. Wenn die URL kein Formelement referenziert oder anderweitig ungültig ist, ist der aufgelöste Wert für den Offset-Pfadpath("M0,0")
(was ein gültiger
Wert ist). -
Gibt den Offset-Pfad als den äquivalenten Pfad einer CSS-Basisform-Funktion an, wie
circle()
,ellipse()
,inset()
,path()
,polygon()
,rect()
, oderxywh()
. Wenn zum Beispiel das
eineellipse()
Funktion ist, dann ist der Pfad der Umriss der Ellipse, beginnend am rechten Punkt der Ellipse, im Uhrzeigersinn durch eine volle Rotation fortschreitend. Fürellipse()
undcircle()
, die den Parameterat
akzeptieren, wenn die
weggelassen wird, ist die Position standardmäßigcenter
, es sei denn, das Element hat einenoffset-position
angegeben. In diesem Fall wird deroffset-position
Wert für denat
Parameter verwendet. Komplexere Formen können mit dershape()
Funktion definiert werden.
-
Gibt die Größeninformationen des Referenzkastens an, der den Pfad enthält. Der Referenzkasten wird vom Element abgeleitet, das den containing block für dieses Element festlegt. Dieser Parameter ist optional. Wenn nicht angegeben, ist der Standardwert
border-box
in CSS-Kontexten. In SVG-Kontexten wird der Wert alsview-box
behandelt. Wennray()
oder
verwendet wird, um den Offset-Pfad zu definieren, liefert der
Wert den Referenzkasten für den Strahl oder das
, jeweils. Wenn
verwendet wird, um den Offset-Pfad zu definieren, liefert der
Wert das Ansichtsfenster und das Benutzerkoordinatensystem für das Formelement, mit dem Ursprung (0 0
) in der oberen linken Ecke und einer Größe von1px
.
Beschreibung
Die offset-path
Eigenschaft definiert einen Pfad, dem ein animiertes Element folgen kann. Ein Offset-Pfad ist entweder ein spezifizierter Pfad mit einem oder mehreren Unterpfaden oder die Geometrie einer nicht gestalteten Basisform. Die genaue Position des Elements auf dem Offset-Pfad wird durch die Eigenschaft offset-distance
bestimmt. Jede Form oder jeder Pfad muss eine Anfangsposition für den berechneten Wert von 0
für offset-distance
und eine Anfangsrichtung definieren, die die Rotation des Objekts zur Anfangsposition angibt.
Frühe Versionen der Spezifikation nannten diese Eigenschaft motion-path
. Sie wurde in offset-path
umbenannt, weil die Eigenschaft statische Positionen beschreibt, nicht Bewegungen.
Formale Definition
Anfangswert | none |
---|---|
Anwendbar auf | transformierbare Elemente |
Vererbt | Nein |
Berechneter Wert | wie angegeben |
Animationstyp | by computed value type |
Erstellt Stapelkontext | Ja |
Formale Syntax
offset-path =
none |
|| =
|
|
=
|
view-box=
ray(&&
? &&
contain? &&
[ at]? ) =
|
=
|
fill-box |
stroke-box=
closest-side |
closest-corner |
farthest-side |
farthest-corner |
sides=
[ left | center | right | top | bottom |] |
[ left | center | right ] && [ top | center | bottom ] |
[ left | center | right |] [ top | center | bottom | ] |
[ [ left | right ]] && [ [ top | bottom ] ] =
url(* ) |
=
src(* ) =
content-box |
padding-box |
border-box=
|
Beispiele
Erstellen eines offset-path mit box-edge Positionierung
Dieses Beispiel zeigt die Verwendung verschiedener
Werte in der offset-path
Eigenschaft.
.box {
width: 40px;
height: 20px;
animation: move 8000ms infinite ease-in-out;
}
.blueBox {
background-color: blue;
offset-path: border-box;
offset-distance: 5%;
}
.greenBox {
background-color: green;
offset-path: padding-box;
offset-distance: 8%;
}
.redBox {
background-color: red;
offset-path: content-box;
offset-distance: 12%;
}
@keyframes move {
0%,
20% {
offset-distance: 0%;
}
80%,
100% {
offset-distance: 100%;
}
}
In diesem Beispiel wurden absichtlich große Werte für Außenabstand, Rahmen und Füllung festgelegt, um die Platzierung der blauen, grünen und roten Rechtecke auf ihren jeweiligen
Rändern zu demonstrieren: border-box, padding-box und content-box.
Ergebnis
Erstellen eines offset-path mit path()
In diesem Beispiel erstellt das Element ein Haus mit einem Schornstein und definiert auch zwei Hälften einer Schere. Das Haus und der Schornstein bestehen aus Rechtecken und Polygonen, und die Scherenhälften werden durch zwei verschiedene Path-Elemente dargestellt. Im CSS-Code wird die
offset-path
Eigenschaft verwendet, um einen Pfad für die beiden Scherenhälften festzulegen. Dieser im CSS definierte Pfad ist identisch mit dem, der durch das
Element im SVG dargestellt wird, das ist der Umriss des Hauses einschließlich des Schornsteins.
.scissorHalf {
offset-path: path(
"M900,190 L993,245 V201 A11,11 0 0,1 1004,190 H1075 A11,11 0 0,1 1086,201 V300 L1294,423 H1216 A11,11 0 0,0 1205,434 V789 A11,11 0 0,1 1194,800 H606 A11,11 0 0,1 595,789 V434 A11,11 0 0,0 584,423 H506 L900,190"
);
animation: follow-path 4s linear infinite;
}
@keyframes follow-path {
to {
offset-distance: 100%;
}
}
Ergebnis
Ohne die offset-path
Eigenschaft würden die beiden Hälften der Schere standardmäßig in der oberen linken Ecke der Leinwand landen. Mithilfe von offset-path
sind die beiden Scherenhälften jedoch mit dem Startpunkt des SVG-Pfades ausgerichtet, wodurch sie sich entlang desselben bewegen können.
Erstellen eines offset-path mit url()
Dieses Beispiel veranschaulicht, wie auf eine SVG-Form verwiesen wird, um die Form des Pfades zu definieren, dem ein Element folgen kann. Der grüne Kreis (definiert durch .target
) folgt dem Pfad eines Rechtecks, das durch Übergabe der ID der SVG-Form (svgRect
) an die offset-path
Eigenschaft mit url()
definiert wird.
Das SVG-Rechteck, das die Pfadform definiert, wird hier nur gezeigt, um visuell zu demonstrieren, dass der grüne Kreis tatsächlich dem Pfad folgt, der durch dieses Rechteck definiert ist.
.target {
width: 50px;
height: 50px;
border-radius: 50%;
background-color: green;
offset-path: url(#svgRect);
offset-anchor: auto;
animation: move 5s linear infinite;
}
#svgRect {
fill: antiquewhite;
stroke: black;
stroke-width: 2;
}
@keyframes move {
0% {
offset-distance: 0%;
}
100% {
offset-distance: 100%;
}
}
Spezifikationen
Specification |
---|
Motion Path Module Level 1 # offset-path-property |
Browser-Kompatibilität
Siehe auch
offset
offset-distance
offset-rotate
- SVG
path()
- Weitere Demos:
- Beispiele mit verschiedenen shapes Werten auf CodePen von CSS-Tricks
- Bewegung eines Dreiecks entlang eines gekrümmten Pfads auf CodePen von Eric Willigers
- Bewegung eines Paares Scheren entlang der Form eines Hauses auf CodePen von Eric Willigers
- Bewegung mehrerer Augenpaare auf JSFiddle von Eric Willigers