offset-rotate

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2022.

Thuộc tính CSS offset-rotate xác định hướng/góc xoay của phần tử khi nó được định vị dọc theo offset-path.

Try it

offset-rotate: auto;
offset-rotate: 90deg;
offset-rotate: auto 90deg;
offset-rotate: reverse;
<section class="default-example" id="default-example">
  <div class="transition-all" id="example-element"></div>
  <button id="playback" type="button">Play</button>
</section>
#example-element {
  width: 24px;
  height: 24px;
  background: #2bc4a2;
  offset-path: path("M-70,-40 C-70,70 70,70 70,-40");
  animation: distance 8000ms infinite linear;
  animation-play-state: paused;
  clip-path: polygon(0% 0%, 70% 0%, 100% 50%, 70% 100%, 0% 100%, 30% 50%);
}

#example-element.running {
  animation-play-state: running;
}

#playback {
  position: absolute;
  top: 0;
  left: 0;
  font-size: 1em;
}

@keyframes distance {
  0% {
    offset-distance: 0%;
  }
  100% {
    offset-distance: 100%;
  }
}

/* Provides a reference image of what path the element is following */
#default-example {
  position: relative;
  background-position: calc(50% - 12px) calc(50% + 14px);
  background-repeat: no-repeat;
  background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="-75 -45 150 140" width="150" height="140"><path d="M-70,-40 C-70,70 70,70 70,-40" fill="none" stroke="lightgrey" stroke-width="2" stroke-dasharray="4.5"/></svg>');
}
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";
  }
});

Note: Các phiên bản đầu của đặc tả gọi thuộc tính này là motion-rotation.

Cú pháp

css
/* Theo hướng đường dẫn, với góc bổ sung tùy chọn */
offset-rotate: auto;
offset-rotate: auto 45deg;

/* Theo hướng đường dẫn nhưng quay ngược chiều so với `auto` */
offset-rotate: reverse;

/* Giữ góc xoay cố định bất kể vị trí trên đường dẫn */
offset-rotate: 90deg;
offset-rotate: 0.5turn;

/* Giá trị toàn cục */
offset-rotate: inherit;
offset-rotate: initial;
offset-rotate: revert;
offset-rotate: revert-layer;
offset-rotate: unset;
auto

Phần tử được xoay theo góc của hướng offset-path, tương đối với trục x dương. Đây là giá trị mặc định.

<angle>

Phần tử có phép biến đổi xoay theo chiều kim đồng hồ cố định theo góc xoay đã chỉ định.

auto <angle>

Nếu auto được theo sau bởi một <angle>, giá trị tính toán của góc đó sẽ được cộng thêm vào giá trị tính toán của auto.

reverse

Phần tử được xoay tương tự auto, ngoại trừ nó quay mặt theo hướng ngược lại. Tương đương với việc chỉ định giá trị auto 180deg.

Định nghĩa hình thức

Initial valueauto
Applies totransformable elements
Inheritedno
Computed valueas specified
Animation typeas <angle>, <basic-shape> or <path()>

Cú pháp hình thức

offset-rotate = 
[ auto | reverse ] ||
<angle>

Ví dụ

Thiết lập hướng phần tử dọc theo đường dẫn offset

HTML

html
<div></div>
<div></div>
<div></div>

CSS

css
div {
  width: 40px;
  height: 40px;
  background: #2bc4a2;
  margin: 20px;
  clip-path: polygon(0% 0%, 70% 0%, 100% 50%, 70% 100%, 0% 100%, 30% 50%);
  animation: move 5000ms infinite alternate ease-in-out;

  offset-path: path("M20,20 C20,50 180,-10 180,20");
}
div:nth-child(1) {
  offset-rotate: auto;
}
div:nth-child(2) {
  offset-rotate: auto 90deg;
}
div:nth-child(3) {
  offset-rotate: 30deg;
}

@keyframes move {
  100% {
    offset-distance: 100%;
  }
}

Kết quả

Đặc tả

Specification
Motion Path Module Level 1
# offset-rotate-property

Tương thích trình duyệt

Xem thêm