Esta propriedade começou como motion-path
. Esta, e todas as outras propriedades de motion- * relacionadas, estão sendo renomeadas para offset- * na especificação. Estamos mudando os nomes aqui no almanaque. Se você deseja usá-lo agora, provavelmente é melhor usar as duas sintaxes.
A offset-path
propriedade em CSS define um caminho de movimento para um elemento seguir durante a animação. Aqui está um exemplo usando a sintaxe de caminho SVG:
.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"); )
Esta propriedade não pode ser animada, mas define o caminho da animação. Usamos a motion-offset
propriedade para criar a animação. Aqui está um exemplo simples de animação de deslocamento de movimento com uma animação @keyframes:
.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 */ ) )
Veja o exemplo simples de caneta de animação ao longo de um caminho por CSS-Tricks (@ css-tricks) no CodePen.
Nesta demonstração, o círculo laranja está sendo animado ao longo do offset-path
que definimos no CSS. Na verdade, traçamos esse caminho em SVG com exatamente os mesmos path()
dados, mas isso não é necessário para obter o movimento.
Digamos que desenhamos um caminho estranho como este em algum software de edição SVG:
Encontraríamos um caminho como:
O d
valor do atributo é o que buscamos e podemos movê-lo diretamente para o CSS e usá-lo como offset-path
:
Veja o Pen zEpLRo por CSS-Tricks (@ css-tricks) no CodePen.
Observe os valores sem unidade na sintaxe do caminho. Se você estiver aplicando CSS a um elemento dentro de SVG, esses valores de coordenadas usarão o sistema de coordenadas configurado nesse SVG viewBox
. Se você estiver aplicando o movimento a algum outro elemento HTML, esses valores serão pixels.
Observe também que usamos um gráfico de um dedo apontando para mostrar como o elemento é girado automaticamente para que fique voltado para frente. Você pode controlar isso com 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 */ )
Valores
Tanto quanto podemos dizer, path()
e none
são os únicos valores de trabalho para offset-path
.
A offset-path
propriedade deve aceitar todos os valores a seguir.
path()
: Especifica um caminho na sintaxe de coordenadas SVGurl
: Faz referência ao ID de um elemento SVG a ser usado como um caminho de movimentobasic-shape
: Especifica uma forma de acordo com a especificação CSS Shapes, que inclui:circle()
ellipse()
inset()
polygon()
Clippy é uma ferramenta incrível para gerar valores de formas básicas, aliás.
none
: Não especifica nenhum caminho de movimento
Aqui estão alguns testes:
Veja o teste de valores de caminho de movimento da caneta por CSS-Tricks (@ css-tricks) em CodePen.
Até mesmo dizer a um elemento SVG para fazer referência a um caminho definido pelo mesmo SVG via url()
não parece funcionar.
Com a API Web Animations
Dan Wilson explorou um pouco disso em Uso futuro: CSS Motion Paths. Você tem acesso a todas essas mesmas coisas em JavaScript por meio da API Web Animations. Por exemplo, digamos que você tenha definido um offset-path
em CSS, você ainda pode controlar a animação por meio de JavaScript:
Veja o Pen CSS MotionPath por CSS-Tricks (@ css-tricks) no CodePen.
Mais exemplos
Atenção! Muitos deles foram criados antes da mudança de motion- * naming para offset- *. Deve ser muito fácil consertá-los se você quiser.
Veja a Caneta Whoosh! por Merih Akar (@merih) em CodePen.
Veja o Pen pJarJO de Eric Willigers (@ericwilligers) no CodePen.
Veja o Pen scalextric car on motion-path por Kseso (@Kseso) no CodePen.
Veja o Pen CSS Motion Path Airplane de Ali Klein (@AliKlein) no CodePen.
Veja o Pen CSS Animate no caminho SVG por 一丝 (@yisi) no CodePen.
Veja o Pen Motion Path Infinity de Dan Wilson (@danwilson) na CodePen.
Veja o Pen CSS Motion Path Spiral de Dan Wilson (@danwilson) no CodePen.
Veja a Caneta zGzJYd de 一丝 (@yisi) no CodePen.
Suporte de navegador
A offset-path
propriedade ainda é considerada um recurso experimental no momento da redação deste artigo. Se a atual falta de suporte do navegador faz você hesitar em usá-lo em um projeto, então você pode querer considerar o uso do GSAP para este nível de animação, que Sarah também aborda em seu post. Isso oferecerá a você o suporte de navegador mais amplo no momento.
Os dados de suporte deste navegador são do Caniuse, que tem mais detalhes. Um número indica que o navegador oferece suporte ao recurso nessa versão e superior.
Área de Trabalho
cromada | Raposa de fogo | IE | Beira | Safári |
---|---|---|---|---|
46 | 72 | Não | 79 | Não |
Celular / Tablet
Android Chrome | Android Firefox | Android | iOS Safari |
---|---|---|---|
88 | 85 | 81 | Não |
A partir do Chrome 46 e Opera 33 (e as versões móveis relacionadas), temos “suporte inicial” no Blink (sem bandeira).
Há outra maneira de fazer isso?
Nossa própria Sarah Drasner escreveu sobre SMIL, o método nativo de SVG para animações, e como animateMotion
é usado para animar objetos ao longo de um caminho SVG. Parece:
Mas SMIL está sendo descontinuado! Portanto, isso não é recomendado.
GreenSock é uma outra maneira, que é recomendada. Sarah fala sobre isso no GSAP + SVG para usuários avançados: movimento ao longo de um caminho (SVG não obrigatório). Exemplo:
Veja a demonstração da caneta para autoRotate true / false por Sarah Drasner (@sdras) em CodePen.
Informações adicionais
- Especificações: Especificações de nível 1 do módulo de caminho de movimento
- Coleção de exemplos no CodePen
- Uso futuro: CSS Motion Paths de Dan Wilson
- Motion Paths - Past, Present and Future por Cassie Evans
- WebKit Ticket # 139128
- Mozilla Ticket # 1186329
- Solicitação de recurso do Microsoft Edge
- Chrome Platform Status: CSS Motion Path e amostra
- MDN: movimento (links para outras propriedades relacionadas)