See the Pen Untitled by チータツ (@cheese_fuji) on CodePen.
HTMLの解説
- ボタン用の要素divを作成
- ボタン内の要素全体をaタグで囲む(マウスホバーのないスマホ対策)
- aタグ内に標準時・ホバー時用のテキスト要素を2つ作成する
CSSの解説
- ボタン枠の要素div.ch-boxのレイアウトを調整する
- position: relativeにする
- heightとwidthを指定する
- テキスト要素の幅と位置をボタンに合わせる(2つを重ねる)
- position: absoluteとtop:0 left: 0 で位置を調整
- width: 100% height: 100% でボタンに大きさを合わせる
- ホバー時に表示するテキスト.after-textを隠しておく
- visibility: hidden で非表示に
- opacity: 0 で透明に
応用CSS
今回はvisibilityとopacityを置き換えれば、他のホバーアニメーションで文字を切り替えることが可能です。ただし、やり過ぎるとくどくなるので、ほどほどにしておきましょう。(個人的にはフェードインが一番しっくり来ると思います)
色が反転して文字が切り替わるボタン
ボタン全体には背景色をつけずにborderの枠線だけ付けておき、.before-textは色付きの文字、.after-textは背景付きの白文字にすることで、色が反転したような演出をすることができます。
仕組み的にはマウスホバーで背景色が反転するリンクと組み合わせたような感じです。
See the Pen Untitled by チータツ (@cheese_fuji) on CodePen.
文字がスライドで切り替わるボタン
opacityとvisibilityによるフェードインの代わりに、translate()を使って文字を座標移動で切り替えます。
See the Pen Untitled by チータツ (@cheese_fuji) on CodePen.
- ボタン外に出た要素を隠すため、親要素.ch-buttonにoverflow: hiddenを追記
- .before-textを右へ追い出す
- ホバー時にtranlateX(110%)でボタンの右へ
- .after-textを左からスライドさせる
- translateX(-110%)ボタンの左に配置させておく
- ホバー時にtranslateX(0)でボタンの中へ

translateY()に置き換えれば、上から下へのスライドに変更できます