Denne eiendommen begynte livet som motion-path
. Dette og alle andre relaterte bevegelses- * egenskaper omdøpes forskjøvet- * i spesifikasjonen. Vi endrer navnene her i almanakken. Hvis du vil bruke den akkurat nå, er det sannsynligvis best å bruke begge syntaksen.
Den offset-path
egenskap i CSS avgrenser en bevegelsesbane for et element å følge i løpet animasjon. Her er et eksempel på SVG-bane-syntaksen:
.thing-that-moves ( /* "Old" syntax. Available in Blink browsers as of ~October 2015 */ motion-path: path("M 5 5 m -4, 0 a 4,4 0 1,0 8,0 a 4,4 0 1,0 -8,0"); /* Currently spec'd syntax. Should be in stable Chrome as of ~December 2016 */ offset-path: path("M 5 5 m -4, 0 a 4,4 0 1,0 8,0 a 4,4 0 1,0 -8,0"); )
Denne egenskapen kan ikke animeres, men definerer banen for animasjon. Vi bruker motion-offset
eiendommen til å lage animasjonen. Her er et enkelt eksempel på animering av bevegelsesforskyvning med en @keyframes-animasjon:
.thing-that-moves ( offset-path: path('M 5 5 m -4, 0 a 4,4 0 1,0 8,0 a 4,4 0 1,0 -8,0'); animation: move 3s linear infinite; ) @keyframes move ( 100% ( motion-offset: 100%; /* Old */ offset-distance: 100%; /* New */ ) )
Se pennens enkle eksempel på animering langs en bane av CSS-Tricks (@ css-tricks) på CodePen.
I denne demoen animeres den oransje sirkelen langs det offset-path
vi setter i CSS. Vi tegnet faktisk den veien i SVG med nøyaktig samme path()
data, men det er ikke nødvendig for å få bevegelsen.
Si at vi tegnet en funky vei som dette i noen SVG-redigeringsprogramvare:


Vi vil finne en sti som:
Den d
attributtverdien er det vi er ute etter, og vi kan flytte den rett til CSS og bruke den som offset-path
:
Se pennen zEpLRo av CSS-Tricks (@ css-tricks) på CodePen.
Legg merke til de enhetsløse verdiene i banesyntaks. Hvis du bruker CSS på et element i SVG, vil disse koordinatverdiene bruke koordinatsystemet som er satt opp innenfor SVG-ene viewBox
. Hvis du bruker bevegelsen til et annet HTML-element, vil disse verdiene være piksler.
Vær også oppmerksom på at vi brukte en grafikk av en finger som peker for å vise hvordan elementet roteres automatisk slik at det ganske vender fremover. Du kan kontrollere det med offset-rotate
:
.mover ( offset-rotate: auto; /* default, faces forward */ offset-rotate: reverse; /* faces backward */ offset-rotate: 30deg; /* set angle */ offset-rotate: auto 30deg; /* combine auto behavior with a set rotation */ )
Verdier
Så godt vi kan fortelle, path()
og none
er de eneste arbeidsverdiene for offset-path
.
Den offset-path
Eiendommen er ment å godta alle disse verdiene.
path()
: Spesifiserer en bane i SVG-koordinatsyntaksurl
: Henviser IDen til et SVG-element som skal brukes som bevegelsesstibasic-shape
: Spesifiserer en form i samsvar med CSS Shapes-spesifikasjonen, som inkluderer:circle()
ellipse()
inset()
polygon()
Clippy er forresten et fantastisk verktøy for å generere Basic Shape-verdier.
none
: Spesifiserer ingen bevegelsesbane i det hele tatt
Her er noen tester:
Se pennenes bevegelsesverditest av CSS-Tricks (@ css-tricks) på CodePen.
Selv å fortelle et SVG-element å referere til en sti som definerte den samme SVG via, url()
ser ikke ut til å fungere.
Med Web Animations API
Dan Wilson utforsket noe av dette i Future Use: CSS Motion Paths. Du har tilgang til alle disse samme tingene i JavaScript via Web Animations API. Si for eksempel at du har definert en offset-path
i CSS, men du kan fremdeles kontrollere animasjonen via JavaScript:
Se pennen CSS MotionPath av CSS-Tricks (@ css-tricks) på CodePen.
Flere eksempler
Heads up! Mange av disse ble opprettet før skiftet fra bevegelse- * navngivning til forskyvning- *. Bør være ganske enkelt å fikse dem hvis du er så tilbøyelig.
Se pennen Whoosh! av Merih Akar (@merih) på CodePen.
Se pennen pJarJO av Eric Willigers (@ericwilligers) på CodePen.
Se Pen Scalextric bil på bevegelsesbane av Kseso (@Kseso) på CodePen.
Se Pen CSS Motion Path Airplane av Ali Klein (@AliKlein) på CodePen.
Se Pen CSS Animate på SVG Path av 一丝 (@yisi) på CodePen.
Se Pen Motion Path Infinity av Dan Wilson (@danwilson) på CodePen.
Se Pen CSS Motion Path Spiral av Dan Wilson (@danwilson) på CodePen.
Se pennen zGzJYd av 一丝 (@yisi) på CodePen.
Nettleserstøtte
Den offset-path
egenskapen er fortsatt betraktet som en eksperimentell funksjon på tidspunktet for dette skriftlig. Hvis den nåværende mangelen på nettleserstøtte gjør deg nølende med å bruke den på et prosjekt, vil du kanskje vurdere å bruke GSAP til dette animasjonsnivået, som Sarah også dekker i sitt innlegg. Dette gir deg den bredeste nettleserstøtten for øyeblikket.
Disse nettleserstøttedataene er fra Caniuse, som har flere detaljer. Et tall indikerer at nettleseren støtter funksjonen i den versjonen og oppover.
Desktop
Chrome | Firefox | DVS | Kant | Safari |
---|---|---|---|---|
46 | 72 | Nei | 79 | Nei |
Mobil / nettbrett
Android Chrome | Android Firefox | Android | iOS Safari |
---|---|---|---|
88 | 85 | 81 | Nei |
Fra og med Chrome 46 og Opera 33 (og relaterte mobilversjoner) har vi "første støtte" i Blink (uten flagg).
Er det en annen måte å gjøre dette på?
Vår egen Sarah Drasner skrev om SMIL, SVGs opprinnelige metode for animasjoner, og hvordan animateMotion
brukes til å animere objekter langs en SVG-bane. Det ser ut som:
Men SMIL blir utfaset! Så dette anbefales ikke.
GreenSock er en annen måte, men det anbefales. Sarah snakker om dette i GSAP + SVG for kraftbrukere: Bevegelse langs en bane (SVG ikke påkrevd). Eksempel:
Se pennedemoen for autoRotate true / false av Sarah Drasner (@sdras) på CodePen.
Tilleggsinformasjon
- Spesifikasjon: Bevegelsesmodul Nivå 1 Spes
- Samling av eksempler på CodePen
- Fremtidig bruk: CSS Motion Paths av Dan Wilson
- Motion Paths - Past, Present and Future av Cassie Evans
- WebKit-billett # 139128
- Mozilla-billett # 1186329
- Microsoft Edge-funksjonsforespørsel
- Chrome-plattformsstatus: CSS bevegelsessti og prøve
- MDN: bevegelse (lenker til andre relaterte egenskaper)