CSS Tips
テキストが上に回転するホバーエフェクト
CSS 3D Transformを使って、2つのテキストがホバーで切り替わる印象的なエフェクトを作成しましょう。
はじめに
ホバー時にテキストが回転して別のテキストに切り替わるエフェクトは、言語切り替えやメニュー項目など様々な場面で活用できます。
この記事では、CSS 3D Transformを使って、テキストがX軸方向に回転するホバーエフェクトを実装する方法を紹介します。
完成デモ
下のテキストにマウスを乗せてみてください。英語が上に回転して消え、日本語が現れます。
<div class="demo-rotate-container">
<div class="demo-rotate-wrapper">
<span class="demo-rotate-text demo-rotate-text--front">delcano</span>
<span class="demo-rotate-text demo-rotate-text--back">デルカノ</span>
</div>
</div>
.demo-rotate-container {
display: flex;
justify-content: center;
align-items: center;
padding: 2rem 0;
}
.demo-rotate-wrapper {
width: 12rem;
height: 5rem;
position: relative;
cursor: pointer;
}
.demo-rotate-text {
display: grid;
place-items: center;
position: absolute;
inset: 0;
font-size: 2rem;
font-weight: 700;
transform-style: preserve-3d;
transition: rotate 0.4s ease;
transform-origin: center 50% -1.5rem;
color: #667eea;
user-select: none;
}
.demo-rotate-text--front {
rotate: x 0deg;
}
.demo-rotate-text--back {
color: #764ba2;
rotate: x -90deg;
}
.demo-rotate-wrapper:hover .demo-rotate-text--front {
rotate: x 90deg;
}
.demo-rotate-wrapper:hover .demo-rotate-text--back {
rotate: x 0deg;
}
仕組みの解説
このエフェクトは、2つのテキストを重ねて配置し、ホバー時にそれぞれX軸方向に回転させることで実現しています。
ポイントは以下の3つです:
1. **2つのテキストを重ねて配置**
同じ位置に2つのテキストを絶対配置し、初期状態で片方を-90度回転させて見えなくします。
2. **transform-originのZ軸オフセット**
transform-origin: center 50% -1.5rem でZ軸方向にオフセットを設定することで、テキストが奥行きを持って回転し、見切れを防ぎます。
3. **rotateプロパティで簡潔に記述**
CSSの新しいrotateプロパティを使って、rotate: x 90deg のように軸を指定して回転を記述できます。
HTMLコード
<div class="rotate-wrapper">
<span class="rotate-text rotate-text--front">delcano</span>
<span class="rotate-text rotate-text--back">デルカノ</span>
</div>
CSSコード
.rotate-wrapper {
width: 12rem;
height: 5rem;
position: relative;
cursor: pointer;
}
.rotate-text {
display: grid;
place-items: center;
position: absolute;
inset: 0;
font-size: 2rem;
font-weight: 700;
transform-style: preserve-3d;
transition: rotate 0.4s ease;
transform-origin: center 50% -1.5rem;
user-select: none;
}
.rotate-text--front {
color: #667eea;
rotate: x 0deg;
}
.rotate-text--back {
color: #764ba2;
rotate: x -90deg;
}
.rotate-wrapper:hover .rotate-text--front {
rotate: x 90deg;
}
.rotate-wrapper:hover .rotate-text--back {
rotate: x 0deg;
}
各プロパティの役割
transform-origin の Z軸オフセット
transform-origin: center 50% -1.5rem でZ軸方向にオフセットを設定。これにより回転時にテキストが奥行きを持って回転し、見切れを防ぎます。
rotate プロパティ
CSSの新しい rotate プロパティを使用。rotate: x 90deg のように軸を指定して回転できます。transformより簡潔に書けます。
transform-style: preserve-3d
子要素の3D変形を保持します。これがないと、子要素は平面的に描画されてしまいます。
inset: 0
top, right, bottom, left をすべて 0 に設定するショートハンド。親要素と同じサイズで重なり合うようにします。
place-items: center
Grid内でコンテンツを縦横中央に配置するショートハンドプロパティです。
user-select: none
テキストの選択を無効にします。ホバー時に誤ってテキストが選択されるのを防ぎます。
応用例
このテクニックは様々な場面で活用できます。
**言語切り替え**
デモのように、英語と日本語を切り替えて表示するのに最適です。
**価格表示**
通常価格とセール価格をホバーで切り替える演出ができます。
**ナビゲーションメニュー**
メニュー項目のアイコンとテキストを切り替えるエフェクトに使えます。
**ボタンのラベル**
「詳細を見る」→「View Details」のような多言語対応に活用できます。
まとめ
CSS 3D Transformを使うことで、テキストがX軸方向に回転して切り替わる印象的なホバーエフェクトを作成できます。
ポイントは、transform-originとbackface-visibilityの適切な設定です。JavaScriptなしでCSSだけで実現できるため、軽量でパフォーマンスにも優れています。
言語切り替えやインタラクティブなUIに、ぜひ取り入れてみてください。