≪ Today I learned. RSS購読
公開日
タグ
CSS
著者
ダーシノ

CSSでワードアート風3Dテキストを表示する

テキスト用の要素を複数個用意し、1つずつtranslateZ()で奥方向(Z軸方向)にずらしていくことで、CSSだけでワードアートのような3Dテキスト表現が実現できる。

<section clas="scene">
  <div class="layered">
    <span>Hello World!!</span>

    <div class="layers" aria-hidden="true">
      <div style="--i: 1;">Hello World!!</div>
      <div style="--i: 2;">Hello World!!</div>
      <div style="--i: 3;">Hello World!!</div>
      ...
      <div style="--i: 19;">Hello World!!</div>
      <div style="--i: 20;">Hello World!!</div>
    </div>
  </div>
</section>
.scene {
  * {
    perspective: 400px;
    transform-style: preserve-3d;
  }

  .layered {
    position: relative;
    animation: wobble 12s infinite linear;
  }
  .layers, .layers > div {
    position: absolute;
    inset: 0;
  }
  .layers > div {
    --n: calc(var(--i) / 20);

    /* translateZで奥行きを出す */
    transform: translateZ(calc(var(--i) * 3px));
    color: hsl(100 50% calc(var(--n) * 100%));
  }
}

@keyframes wobble {
  from { transform: rotate(0deg) rotateX(30deg) rotate(360deg); }
  to { transform: rotate(360deg) rotateX(30deg) rotate(0deg); }
}

デモ

Hello World!!

参考