CSSでテキストをワイプ表示(スライドアニメーション)する
以下のGIF画像のように、テキストをワイプ表示する方法です。
ソース
HTML
<div class="box">
<div class="text">
サンプル文章です。サンプル文章です。
</div>
</div>
CSS(SCSS)
.box {
width: 300px;
overflow: hidden;
transform: translateX(-100%);
transition: transform 3s;
.text {
transform: translateX(100%);
transition: transform 3s;
}
&.visible {
transform: translateX(0);
.text {
transform: translateX(0);
}
}
}
使用方法
テキストを表示したいタイミングで、<div class="box">
にvisible
クラスを追加します(つまり、<div class="box visible">
に変更)。
これにより、自動的にテキストがワイプ表示されます。
CSSの解説
ポイントは、CSSのtransform
です。
まず初期状態(テキスト非表示状態)ですが、
.box
は、transform: translateX(-100%);
(4行目)により、左に300px移動します。
.text
は、transform: translateX(100%);
(8行目)により、右に300px移動しますが、この時、親要素である.box
を基準に移動するので、-300px + 300px となり、結果的に移動しないことになります。移動はしないのですが、.text
は.box
の領域外にハミ出ているため、表示されません(.box
のoverflow: hidden;
)。
visible
クラスが付加されると、.box
と.text
はtransform: translateX(0);
により、移動していない状態へと戻ろうとします。この時、transition: transform 3s;
が効くため、3秒間かけて移動するのですが、.text
に関しては、.box
と同じ速度で逆向きに移動することになるので、こちらも結果的に移動しないことになります。つまり、.box
だけが移動してくるように見え、それがワイプ表示に見えるというロジックです。ややこしいですね🤔
今回はシンプルにするためにtransition
を使いましたが、animation
を使うことで、より細かな設定が可能になります。
デモ(CodePen)
「テキストを表示」ボタンを押すと、テキストがワイプ表示されます。
参考
Discussion