Свойство CSS `offset`
Базовая поддержка Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в разных версиях браузеров. Она доступна во всех браузерах с сентября 2022 года.
offset — это CSS-свойство короткой записи, которое задаёт все свойства, необходимые для анимации элемента вдоль заданного пути. Свойства смещения в совокупности помогают задать преобразование смещения — преобразование, которое выравнивает точку элемента (offset-anchor) по позиции смещения (offset-position) на пути (offset-path) в различных точках пути (offset-distance) и, при необходимости, поворачивает элемент (offset-rotate) в направлении пути.
Примечание: В ранних версиях спецификации это свойство называлось motion.
Попробуйте
offset: path("M 20 60 L 120 60 L 70 10 L 20 60") 0% auto 90deg;
offset: path(
"M 20 210 L 74 210 L 118 140 \
L 62 140 L 20 210"
)
20% auto;
<section class="default-example" id="default-example">
<div class="wrapper">
<div id="example-element"></div>
</div>
<button id="playback" type="button">Play</button>
</section>
#example-element {
width: 24px;
height: 24px;
background: #2bc4a2;
clip-path: polygon(0% 0%, 70% 0%, 100% 50%, 70% 100%, 0% 100%, 30% 50%);
animation: distance 3000ms infinite normal ease-in-out;
animation-play-state: paused;
}
#example-element.running {
animation-play-state: running;
}
.wrapper {
height: 220px;
width: 200px;
background:
url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 150 140" width="200" height="140"><path d="M 0 60 L 100 60 L 50 10 L 0 60" fill="none" stroke="lightgrey" stroke-width="2" stroke-dasharray="4.5"/></svg>')
no-repeat,
url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -140 150 230" width="200" height="230"><path d="M 0 70 L 56 70 L 98 0 L 42 0 L 0 70" fill="none" stroke="lightgrey" stroke-width="2" stroke-dasharray="4.5"/></svg>');
}
@keyframes distance {
to {
offset-distance: 100%;
}
}
#playback {
position: absolute;
top: 0;
left: 0;
font-size: 1em;
}
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";
}
});
Составные свойства
Это свойство является короткой записью для следующих свойств CSS:
Синтаксис
/* Offset position */
offset: auto;
offset: 10px 30px;
offset: none;
/* Offset path */
offset: ray(45deg closest-side);
offset: path("M 100 100 L 300 100 L 200 300 z");
offset: url("arc.svg");
/* Offset path with distance and/or rotation */
offset: url("circle.svg") 100px;
offset: url("circle.svg") 40%;
offset: url("circle.svg") 30deg;
offset: url("circle.svg") 50px 20deg;
/* Including offset anchor */
offset: ray(45deg closest-side) / 40px 20px;
offset: url("arc.svg") 2cm / 0.5cm 3cm;
offset: url("arc.svg") 30deg / 50px 100px;
/* Global values */
offset: inherit;
offset: initial;
offset: revert;
offset: revert-layer;
offset: unset;
Формальное определение
| Начальное значение | как у каждого из свойств короткой записи: |
|---|---|
| Применяется к | трансформируемым элементам |
| Наследуется | нет |
| Проценты | как у каждого из свойств короткой записи: |
| Вычисленное значение | как у каждого из свойств короткой записи: |
| Тип анимации | как у каждого из свойств короткой записи: |
Формальный синтаксис
offset =
[ <'offset-position'>? [ <'offset-path'> [ <'offset-distance'> || <'offset-rotate'> ]? ]? ]! [ / <'offset-anchor'> ]?
Примеры
Анимация элемента вдоль пути
HTML
<div id="offsetElement"></div>
CSS
@keyframes move {
from {
offset-distance: 0%;
}
to {
offset-distance: 100%;
}
}
#offsetElement {
width: 50px;
height: 50px;
background-color: blue;
offset: path("M 100 100 L 300 100 L 200 300 z") auto;
animation: move 3s linear infinite;
}
Результат
Спецификации
| Спецификация |
|---|
| Motion Path Module Level 1 # offset-shorthand |
Совместимость с браузерами
| Компьютеры | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome для Android | Firefox для Android | Opera для Android | Safari на iOS | Samsung Internet | WebView для Android | WebView на iOS | |
offset |
55
46
|
79
79
|
72 |
42
33
|
16 |
55
46
|
79 |
42
33
|
16 |
6.0
5.0
|
55
46
|
16 |
auto |
116 |
116 |
122 |
102 |
16 |
116 |
122 |
78 |
16 |
24.0 |
116 |
16 |
border-box |
116 |
116 |
122 |
102 |
16 |
116 |
122 |
78 |
16 |
24.0 |
116 |
16 |
bottom |
116 |
116 |
122 |
102 |
16 |
116 |
122 |
78 |
16 |
24.0 |
116 |
16 |
center |
116 |
116 |
122 |
102 |
16 |
116 |
122 |
78 |
16 |
24.0 |
116 |
16 |
content-box |
116 |
116 |
122 |
102 |
16 |
116 |
122 |
78 |
16 |
24.0 |
116 |
16 |
fill-box |
116 |
116 |
122 |
102 |
16 |
116 |
122 |
78 |
16 |
24.0 |
116 |
16 |
left |
116 |
116 |
122 |
102 |
16 |
116 |
122 |
78 |
16 |
24.0 |
116 |
16 |
margin-box |
Нет |
Нет |
Нет |
Нет |
16 |
Нет |
Нет |
Нет |
16 |
Нет |
Нет |
16 |
none |
61 |
79 |
72 |
48 |
16 |
61 |
79 |
45 |
16 |
8.0 |
61 |
16 |
normal |
116 |
116 |
122 |
102 |
17 |
116 |
122 |
78 |
17 |
24.0 |
116 |
17 |
padding-box |
116 |
116 |
122 |
102 |
16 |
116 |
122 |
78 |
16 |
24.0 |
116 |
16 |
right |
116 |
116 |
122 |
102 |
16 |
116 |
122 |
78 |
16 |
24.0 |
116 |
16 |
stroke-box |
116 |
116 |
122 |
102 |
16 |
116 |
122 |
78 |
16 |
24.0 |
116 |
16 |
top |
116 |
116 |
122 |
102 |
16 |
116 |
122 |
78 |
16 |
24.0 |
116 |
16 |
view-box |
116 |
116 |
122 |
102 |
16 |
116 |
122 |
78 |
16 |
24.0 |
116 |
16 |
x-end |
Нет |
Нет |
Нет |
Нет |
26 |
Нет |
Нет |
Нет |
26 |
Нет |
Нет |
26 |
x-start |
Нет |
Нет |
Нет |
Нет |
26 |
Нет |
Нет |
Нет |
26 |
Нет |
Нет |
26 |
y-end |
Нет |
Нет |
Нет |
Нет |
26 |
Нет |
Нет |
Нет |
26 |
Нет |
Нет |
26 |
y-start |
Нет |
Нет |
Нет |
Нет |
26 |
Нет |
Нет |
Нет |
26 |
Нет |
Нет |
26 |
См. также
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/offset