Это свойство начало свою жизнь как motion-path
. Это и все другие связанные свойства motion- * в спецификации переименовываются в offset- *. Мы меняем имена здесь, в альманахе. Если вы хотите использовать его прямо сейчас, возможно, лучше всего использовать оба синтаксиса.
offset-path
Свойство в CSS определяет путь движения для элемента , чтобы следовать во время анимации. Вот пример использования синтаксиса пути 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"); )
Это свойство нельзя анимировать, оно определяет путь для анимации. Мы используем motion-offset
свойство для создания анимации. Вот простой пример анимации смещения движения с помощью анимации @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 */ ) )
См. Простой пример анимации вдоль контура с помощью CSS-приемов (@ css-tricks) на CodePen.
В этой демонстрации оранжевый кружок анимируется в соответствии с offset-path
настройками CSS. На самом деле мы нарисовали этот путь в SVG с теми же path()
данными, но это не обязательно для получения движения.
Допустим, мы нарисовали такой забавный путь в каком-то программном обеспечении для редактирования SVG:
Мы бы нашли такой путь:
Значение d
атрибута - это то, что нам нужно, и мы можем переместить его прямо в CSS и использовать как offset-path
:
См. Pen zEpLRo от CSS-Tricks (@ css-tricks) на CodePen.
Обратите внимание на безразмерные значения в синтаксисе пути. Если вы применяете CSS к элементу в SVG, эти значения координат будут использовать систему координат, установленную в этом SVG viewBox
. Если вы применяете движение к какому-либо другому элементу HTML, эти значения будут пикселями.
Также обратите внимание, что мы использовали рисунок с указанием пальца, чтобы показать, как элемент автоматически поворачивается так, что он смотрит вперед. Вы можете контролировать это с помощью 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 */ )
Значения
Как лучше всего, как мы можем сказать, path()
и none
являются только рабочие значения offset-path
.
Предполагается, что offset-path
свойство принимает все следующие значения.
path()
: Указывает путь в синтаксисе координат SVGurl
: Ссылка на идентификатор SVG-элемента, который будет использоваться в качестве пути перемещения.basic-shape
: Определяет форму в соответствии со спецификацией CSS Shapes, которая включает:circle()
ellipse()
inset()
polygon()
Кстати, Clippy - отличный инструмент для создания значений Basic Shape.
none
: Указывает, что траектория движения отсутствует
Вот несколько тестов:
См. Тест значений пути движения пера от CSS-Tricks (@ css-tricks) на CodePen.
Даже указание элементу SVG ссылаться на путь, определенный тем же SVG url()
, не работает.
С помощью API веб-анимации
Дэн Уилсон исследовал некоторые из них в книге «Использование в будущем: пути движения CSS». У вас есть доступ ко всему этому же материалу в JavaScript через API веб-анимации. Например, если вы определили a offset-path
в CSS, вы все равно можете управлять анимацией с помощью JavaScript:
См. Pen CSS MotionPath от CSS-Tricks (@ css-tricks) на CodePen.
Больше примеров
Берегись! Многие из них были созданы до перехода от наименования motion- * к offset- *. Их будет довольно легко исправить, если вы так склонны.
Смотрите Pen Whoosh! пользователя Merih Akar (@merih) на CodePen.
См. Pen pJarJO Эрика Виллигерс (@ericwilligers) на CodePen.
Посмотрите на модель Pen scalextric car on motion-path Ксесо (@Kseso) на CodePen.
См. Pen CSS Motion Path Airplane от Али Кляйна (@AliKlein) на CodePen.
См. Pen CSS Animate on SVG Path от 一丝 (@yisi) на CodePen.
Смотрите Pen Motion Path Infinity Дэна Уилсона (@danwilson) на CodePen.
См. Статью Дэна Уилсона (@danwilson), написанную Дэном Уилсоном (@danwilson), на CodePen.
Смотрите Pen zGzJYd от 一丝 (@yisi) на CodePen.
Поддержка браузера
На offset-path
момент написания этой статьи это свойство все еще считается экспериментальной функцией. Если текущее отсутствие поддержки браузера заставляет вас не решаться использовать его в проекте, тогда вы можете рассмотреть возможность использования GSAP для этого уровня анимации, который Сара также освещает в своем посте. Это предложит вам самую широкую поддержку браузера на данный момент.
Эти данные о поддержке браузером взяты из Caniuse, где есть более подробная информация. Число означает, что браузер поддерживает эту функцию в этой версии и выше.
Рабочий стол
Хром | Fire Fox | IE | Край | Сафари |
---|---|---|---|---|
46 | 72 | Нет | 79 | Нет |
Мобильный / планшет
Android Chrome | Android Firefox | Android | iOS Safari |
---|---|---|---|
88 | 85 | 81 год | Нет |
Что касается Chrome 46 и Opera 33 (и связанных с ними мобильных версий), у нас есть «начальная поддержка» в Blink (без флага).
Есть другой способ сделать это?
Наша собственная Сара Драснер писала об SMIL, собственном методе SVG для анимации, и о том, как animateMotion
он используется для анимации объектов по пути SVG. Это выглядит как:
Но SMIL устарел! Так что это не рекомендуется.
GreenSock - это другой способ, который рекомендуется. Сара рассказывает об этом в GSAP + SVG для опытных пользователей: движение по пути (SVG не требуется). Пример:
См. Демонстрацию пера для autoRotate true / false от Сары Драснер (@sdras) на CodePen.
Дополнительная информация
- Спецификация: Спецификация модуля пути движения, уровень 1
- Сборник примеров на CodePen
- Будущее использование: CSS Motion Paths от Дэна Уилсона
- Пути движения - прошлое, настоящее и будущее Кэсси Эванс
- Билет WebKit № 139128
- Билет Mozilla № 1186329
- Запрос функции Microsoft Edge
- Статус платформы Chrome: путь движения CSS и образец
- MDN: движение (ссылки на другие связанные свойства)