ray()
Baseline 2022
Newly available
Since September 2022, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
Die ray()
- CSS Funktion definiert das offset-path-Liniensegment, dem ein animiertes Element folgen kann. Das Liniensegment wird als "Strahl" bezeichnet. Der Strahl beginnt bei einer offset-position
und erstreckt sich in die Richtung des angegebenen Winkels. Die Länge eines Strahls kann durch die Angabe einer Größe und die Verwendung des contain
-Schlüsselworts eingeschränkt werden.
Syntax
/* all parameters specified */
offset-path: ray(50deg closest-corner contain at 100px 20px);
/* two parameters specified, order does not matter */
offset-path: ray(contain 200deg);
/* only one parameter specified */
offset-path: ray(45deg);
Parameter
Die Parameter können in beliebiger Reihenfolge angegeben werden.
<angle>
-
Gibt die Richtung an, in die sich das Liniensegment vom Offset-Ausgangspunkt erstreckt. Der Winkel
0deg
liegt auf der y-Achse nach oben, und positive Winkel nehmen im Uhrzeigersinn zu. <size>
-
Gibt die Länge des Liniensegments an, das die Entfernung zwischen
offset-distance
0%
und100%
relativ zur umschließenden Box ist. Dies ist ein optionaler Parameter (closest-side
wird verwendet, wenn keine<size>
angegeben ist). Es werden folgende Schlüsselwortwerte akzeptiert:closest-side
: Entfernung zwischen dem Startpunkt des Strahls und der nächstgelegenen Seite des Umschließungsblocks des Elements. Liegt der Startpunkt des Strahls auf einer Kante des Umschließungsblocks, beträgt die Länge des Liniensegments null. Liegt der Startpunkt des Strahls außerhalb des Umschließungsblocks, wird die Kante des Umschließungsblocks als ins Unendliche verlängert betrachtet. Dies ist der Standardwert.closest-corner
: Entfernung zwischen dem Startpunkt des Strahls und der nächsten Ecke im Umschließungsblock des Elements. Liegt der Startpunkt des Strahls auf einer Ecke des Umschließungsblocks, beträgt die Länge des Liniensegments null.farthest-side
: Entfernung zwischen dem Startpunkt des Strahls und der entferntesten Seite des Umschließungsblocks des Elements. Liegt der Startpunkt des Strahls außerhalb des Umschließungsblocks, wird die Kante des Umschließungsblocks als ins Unendliche verlängert betrachtet.farthest-corner
: Entfernung zwischen dem Startpunkt des Strahls und der entferntesten Ecke im Umschließungsblock des Elements.sides
: Entfernung zwischen dem Startpunkt des Strahls und dem Punkt, an dem das Liniensegment die Grenze des Umschließungsblocks schneidet. Liegt der Startpunkt auf oder außerhalb der Grenze des Umschließungsblocks, beträgt die Länge des Liniensegments null. contain
-
Reduziert die Länge des Liniensegments so, dass das Element auch bei
offset-distance: 100%
innerhalb des Umschließungsblocks bleibt. Konkret wird die Länge des Segments um die Hälfte der Breite oder die Hälfte der Höhe der Border-Box des Elements reduziert, je nachdem, was größer ist, und niemals weniger als null. Dies ist ein optionaler Parameter. at <position>
-
Gibt den Punkt an, an dem der Strahl beginnt und wo das Element in seinem Umschließungsblock platziert wird. Dies ist ein optionaler Parameter. Falls angegeben, muss dem
<position>
-Wert das Schlüsselwortat
vorangestellt werden. Wenn es weggelassen wird, wird der Wert deroffset-position
des Elements verwendet. Wenn weggelassen und das Element keinenoffset-position
-Wert hat, wird für die Startposition des Strahlsoffset-position: normal
verwendet, was das Element in der Mitte (oder50% 50%
) des Umschließungsblocks platziert.
Beschreibung
Die Funktion ray()
positioniert ein Element entlang eines Pfades, indem sie seinen Ort in einem zweidimensionalen Raum durch einen Winkel und eine Entfernung von einem Referenzpunkt (Polarkoordinaten) angibt. Diese Funktion macht die ray()
Funktion nützlich für die Erstellung von zweidimensionalen räumlichen Übergängen. Zum Vergleich: Dieser Ansatz unterscheidet sich von der Methode, einen Punkt durch seine horizontale und vertikale Entfernung von einem festen Ursprung (rechtwinklige Koordinaten) zu spezifizieren, wie sie von der translate()
-Funktion verwendet wird, und davon, ein Element entlang eines definierten Pfades durch Animation zu bewegen.
Da ray()
im zweidimensionalen Raum arbeitet, ist es wichtig, sowohl die Ausgangsposition als auch die Ausrichtung des Elements zu berücksichtigen. Wenn die ray()
-Funktion als offset-path
-Wert auf ein Element angewendet wird, können Sie diese Aspekte folgendermaßen steuern:
- Das Element wird zunächst durch Verschieben des
offset-anchor
-Punkts des Elements auf die Offset-Startposition des Elements positioniert. Standardmäßig wird die Startposition des Strahls durch denoffset-position
-Wert bestimmt. Wennoffset-position
ausdrücklich alsnormal
(oder weggelassen und erlaubt, aufnormal
zu standardisieren) angegeben ist, wird das Element in der Mitte (oder50% 50%
) seines Umschließungsblocks positioniert. Die Angabe vonoffset-position: auto
setzt die Startposition in die obere linke Ecke (oder0 0
) der Elementposition. - Das Element wird anfänglich so gedreht, dass seine Inline-Achse — seine Textflussrichtung — mit dem durch
ray()
angegebenen Winkel ausgerichtet ist. Zum Beispiel wird mit demray()
-Winkel von0deg
, der auf der y-Achse nach oben liegt, die Inline-Achse des Elements vertikal gedreht, um den Winkel des Strahls zu erreichen. Das Element behält diese Drehung während seines gesamten Pfades bei. Um dieses Verhalten anzupassen, verwenden Sie dieoffset-rotate
-Eigenschaft, die es Ihnen erlaubt, einen anderen Drehwinkel oder eine andere Richtung für das Element anzugeben und so eine genauere Kontrolle über sein Erscheinungsbild zu ermöglichen, während es dem Pfad folgt. Zum Beispiel wird durch das Festlegen vonoffset-rotate: 0deg
jede vonray()
angewendete Drehung entfernt, sodass die Inline-Achse des Elements wieder mit der Textflussrichtung ausgerichtet wird.
Formale Syntax
<ray()> =
ray( <angle> &&
<ray-size>? &&
contain? &&
[ at <position> ]? )
<ray-size> =
closest-side |
closest-corner |
farthest-side |
farthest-corner |
sides
<position> =
[ left | center | right | top | bottom | <length-percentage> ] |
[ left | center | right ] && [ top | center | bottom ] |
[ left | center | right | <length-percentage> ] [ top | center | bottom | <length-percentage> ] |
[ [ left | right ] <length-percentage> ] && [ [ top | bottom ] <length-percentage> ]
<length-percentage> =
<length> |
<percentage>
Beispiele
Den Winkel und den Startpunkt eines Strahls definieren
Dieses Beispiel zeigt, wie mit der Startposition eines Elements gearbeitet wird und wie die Orientierung des Elements durch den angegebenen Strahlwinkel beeinflusst wird.
CSS
.box {
background-color: palegreen;
border-top: 4px solid black;
opacity: 20%;
}
.box:first-of-type {
position: absolute;
}
.box1 {
offset-path: ray(0deg);
}
.box2 {
offset-path: ray(150deg);
}
.box3 {
offset-rotate: 0deg;
offset-position: 20% 40%;
offset-path: ray(150deg);
}
.box4 {
offset-position: 0 0;
offset-path: ray(0deg);
}
.box5 {
offset-path: ray(60deg closest-side at bottom right);
}
Ähnlich wie bei transform-origin
ist der Standardankerpunkt im Zentrum eines Elements. Dieser Ankerpunkt kann mit der offset-anchor
-Eigenschaft geändert werden.
In diesem Beispiel werden verschiedene offset-path: ray()
-Werte auf die mit 1
bis 5
nummerierten Kästchen angewendet. Der "umschließende Block" jedes Kästchens wird mit einer gestrichelten Umrandung dargestellt. Ein verblasstes Kästchen in der oberen linken Ecke zeigt die Standardposition jedes Kästchens ohne angewendete offset-position
oder offset-path
, um einen Seitenvergleich zu ermöglichen. Die Oberseite jedes Kästchens ist mit einer solid
Umrandung hervorgehoben, um Unterschiede in den Strahlstartpunkten und Ausrichtungen zu illustrieren. Nachdem das Box an den Startpunkt des Strahls positioniert ist, stimmt es mit der Richtung des angegebenen Strahlwinkels überein. Wenn offset-position
nicht angegeben ist, liegt der Standardversatz-Startpunkt des Strahls im Zentrum (oder 50% 50%
) des umschließenden Blocks des Kästchens.
Ergebnis
-
box1
wird zunächst so positioniert, dass sein Ankerpunkt (sein Zentrum) am Standardversatz-Startpunkt (50% 50%
des umschließenden Blocks) liegt.box1
wird auch gedreht, damit es in Richtung des0deg
Winkels des Strahls ausgerichtet wird. Dies wird jetzt der Ausgangspunkt des Pfades sein. Sie können die Änderung der Position und Drehung der Box beobachten, indem Sie diese mit dem verblasstenbox0
auf der linken Seite vergleichen. Die Box wird gedreht, um den0deg
Winkel entlang der y-Achse nach oben zu erreichen. Die Drehung der Box wird durch die Orientierung der Zahl innerhalb der Box deutlich. -
In
box2
wird ein größerer positiver Winkel von150deg
auf den Strahl angewendet, um zu zeigen, wie der Strahlwinkel funktioniert. Ausgehend von der oberen linken Ecke wird die Box im Uhrzeigersinn gedreht, um den angegebenen Winkel von150deg
zu erreichen. -
box2
undbox3
haben die gleichenoffset-path
-Werte. Inbox3
wird auch eineoffset-rotate
von0deg
auf das Element angewendet. Infolgedessen bleibt das Element in diesem bestimmten Winkel auf dem Strahlweg gedreht, und das Element wird sich nicht in Richtung des Weges drehen. Beachten Sie inbox3
, dass der Strahlweg bei150deg
liegt, aber die Box-Ausrichtung sich auf dem Weg nicht ändert, weiloffset-rotate
angewandt wurde. Beachten Sie auch, dass dieoffset-path
-Eigenschaft vonbox3
keine Anfangs-<position>
angibt, sodass die Startposition des Strahls von deroffset-position
des Elements abgeleitet wird, die in diesem Falltop 20% left 40%
ist. -
Die
offset-position
vonbox4
ist auf die obere linke Ecke (0 0
) des umschließenden Blocks gesetzt, und infolgedessen fallen der Ankerpunkt des Elements und die Offset-Startposition zusammen. Der Strahlwinkel von0deg
wird auf das Element an diesem Startpunkt angewendet. -
In
box5
gibt dieoffset-path
-Eigenschaft denat <position>
Wert an, der die Box an der unteren und rechten Kante des umschließenden Blocks des Elements platziert und60deg
auf den Winkel des Strahls angewendet wird.
Ein Element entlang des Strahls animieren
In diesem Beispiel wird die erste Form als Referenz für ihre Position und Ausrichtung gezeigt. Ein Strahlenbewegungspfad wird auf die anderen Formen angewendet.
CSS
body {
display: grid;
grid-template-columns: 200px 100px;
gap: 40px;
margin-left: 40px;
}
.container {
transform-style: preserve-3d;
width: 150px;
height: 100px;
border: 2px dotted green;
}
.shape {
width: 40px;
height: 40px;
background: #2bc4a2;
margin: 5px;
text-align: center;
line-height: 40px;
clip-path: polygon(0% 0%, 70% 0%, 100% 50%, 70% 100%, 0% 100%, 30% 50%);
animation: move 5000ms infinite alternate ease-in-out;
}
.shape2 {
offset-path: ray(120deg sides contain);
}
.shape3 {
offset-rotate: 0deg;
offset-path: ray(120deg sides contain);
}
.shape4 {
offset-position: auto;
offset-path: ray(120deg closest-corner);
}
.shape5 {
offset-position: auto;
offset-path: ray(120deg farthest-corner);
}
@keyframes move {
0%, 20% {
offset-distance: 0%;
}
80%, 100% {
offset-distance: 100%;
}
Ergebnis
In den ersten beiden Beispielen, in denen offset-path
angewendet wird, beachten Sie die Orientierung der Form ohne offset-rotate
und mit offset-rotate
. Beide Beispiele verwenden den Standardwert offset-position
normal
, und daher beginnt die Pfadbewegung von 50% 50%
. Die letzten beiden offset-path
-Beispiele zeigen die Auswirkungen von Eck-<size>
-Werten: closest-corner
und farthest-corner
. Der closest-corner
-Wert erzeugt einen sehr kurzen Offset-Pfad, da die Form bereits an der Ecke (offset-position: auto
) ist. Der farthest-corner
-Wert erzeugt den längsten Offset-Pfad, der von der oberen linken Ecke des Umschließungsblocks zur unteren rechten Ecke geht.
Spezifikationen
Specification |
---|
Motion Path Module Level 1 # ray-function |
Browser-Kompatibilität
BCD tables only load in the browser