ISIRMT Logo

レスポンシブ対応したoffsetの構築

Next.js
Tailwind CSS
React
SVG
シリーズ『isirmt.com v2 制作メモ』

今回のテーマ

今回は,現行のisirmt.com V2のプロフィール欄↓

clipboard.png

のオレンジ枠の周りを回る線について述べます.

実装

そもそも,軌跡に沿って動くという仕様ですが

CSSのoffsetによって実現可能です.

<無題>tsx
const ORBIT_COUNT = 20;
const ORBIT_DURATION = 60;

return <>{orbit &&
  Array.from({ length: ORBIT_COUNT }).map((_, orbitIndex) => {
    const delay = -(ORBIT_DURATION * (orbitIndex / ORBIT_COUNT));
    return (
      <span
        key={orbitIndex}
        className="animate-orbit pointer-events-none absolute top-0 left-0 z-0 h-8 w-2 rounded-md bg-[#f7885c] opacity-20 [offset-anchor:0_4rem] [offset-rotate:auto]"
        style={{
          ...orbitStyle,
          animationDelay: `${delay}s`,
          animationDuration: `${ORBIT_DURATION}s`,
        }}
      />
    );
  })
}</>

見ていただいた通り,ORBIT_COUNT個だけ<span />による角丸四角形を配置し,animation-delayで位相をずらしている形になります.

animationのカスタム定義は至ってシンプル

<無題>css
@import "tailwindcss";

@theme inline {
  --animate-orbit: orbit 40s linear infinite;
}

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

(40秒ループの名残は残っていますが)非常にシンプルな定義になってるかと思われます.

これで,パスさえ決まっていれば指定個数で周りをoffset-anchorだけ離れて回り続けるアニメーションが出来上がっています.

残すはorbitStyleですね.

関連記事