offset CSS 简写属性设置了沿定义的路径为元素设置动画所需的所有属性。

[!NOTE] 规范的早期版本称此属性为 motion

{{InteractiveExample("CSS Demo: offset")}}

```css interactive-example-choice offset: path("M 20 60 L 120 60 L 70 10 L 20 60") 0% auto 90deg;


```css interactive-example-choice offset: path( "M 20 210 L 74 210 L 118 140 \ L 62 140 L 20 210" ) 20% auto;

```html interactive-example


```css interactive-example #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; }

```js interactive-example window.addEventListener("load", () => { 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 属性的简写: - {{cssxref("offset-anchor")}} - {{cssxref("offset-distance")}} - {{cssxref("offset-path")}} - {{cssxref("offset-position")}} - {{cssxref("offset-rotate")}} ## 语法 ```css /* 偏移位置 */ offset: auto; offset: 10px 30px; offset: none; /* 偏移路径 */ offset: ray(45deg closest-side); offset: path("M 100 100 L 300 100 L 200 300 z"); offset: url(arc.svg); /* 使用距离和/或旋转偏移路径 */ offset: url(circle.svg) 100px; offset: url(circle.svg) 40%; offset: url(circle.svg) 30deg; offset: url(circle.svg) 50px 20deg; /* 包括偏移锚点 */ offset: ray(45deg closest-side) / 40px 20px; offset: url(arc.svg) 2cm / 0.5cm 3cm; offset: url(arc.svg) 30deg / 50px 100px; /* 全局值 */ offset: inherit; offset: initial; offset: revert; offset: revert-layer; offset: unset;

形式定义

{{cssinfo}}

形式语法

{{csssyntax}}

示例

让元素在路径上运动

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;
}

结果

{{EmbedLiveSample("让元素在路径上运动", 350, 350)}}