offset
======

Baseline 2023
-------------

Newly availableSince August 2023, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.

* Learn more
* See full compatibility
* Report feedback
The **`offset`** CSS shorthand property sets all the properties required for animating an element along a defined path. The offset properties together help to define an *offset transform*, a transform that aligns a point in an element (offset-anchor) to an *offset position* (offset-position) on a path (offset-path) at various points along the path (offset-distance) and optionally rotates the element (offset-rotate) to follow the direction of the path.

**Note:** Early versions of the spec called this property `motion`.

Try it
------

Constituent properties
----------------------

This property is a shorthand for the following CSS properties:

* `offset-anchor`
* `offset-distance`
* `offset-path`
* `offset-position`
* `offset-rotate`
Syntax
------


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

Formal definition
-----------------

|  |  |
| --- | --- |
| Initial value | as each of the properties of the shorthand:* `offset-position`: `normal`
* `offset-path`: `none`
* `offset-distance`: `0`
* `offset-anchor`: `auto`
* `offset-rotate`: `auto`
 |
| Applies to | transformable elements |
| Inherited | no |
| Percentages | as each of the properties of the shorthand:* `offset-position`: refer to the size of containing block
* `offset-distance`: refer to the total path length
* `offset-anchor`: relative to the width and the height of the element's reference box
 |
| Computed value | as each of the properties of the shorthand:* `offset-position`: for `<length>` the absolute value, otherwise a percentage
* `offset-path`: as specified
* `offset-distance`: for `<length>` the absolute value, otherwise a percentage
* `offset-anchor`: for `<length>` the absolute value, otherwise a percentage
* `offset-rotate`: as specified
 |
| Animation type | as each of the properties of the shorthand:* `offset-position`: a position
* `offset-path`: by computed value type
* `offset-distance`: a length, percentage or calc();
* `offset-anchor`: a position
* `offset-rotate`: as <angle>, <basic-shape> or <path()>
 |
| Creates stacking context | yes |

Formal syntax
-------------
```

offset =   
  [ <'offset-position'>? [ <'offset-path'> [ <'offset-distance'> || <'offset-rotate'> ]? ]? ]! [ / <'offset-anchor'> ]?    
  
```

Examples
--------

### Animating an element along a path

#### HTML


```html
<div id="offsetElement"></div>
```


#### CSS


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


#### Result

Specifications
--------------

| Specification |
| --- |
| Motion Path Module Level 1 # offset-shorthand |

Browser compatibility
---------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

See also
--------

* `offset-anchor`
* `offset-distance`
* `offset-path`
* `offset-position`
* `offset-rotate`