共通のHTML・CSS
ここで紹介しているサンプルはいずれも下記のようなシンプルなHTMLをベースに使用しています。
HTML
<a class="button" href="#">Button</a>
CSSについては下記のようなスタイルをベースとして設定しています。
ここへ紹介している各アニメーションの実装コードの追記や一部変更を加えれば、それぞれの動きを実装できます。
CSS
.button {
position: relative;
display: inline-block;
padding: .5em 4em;
border: 2px solid #333;
color: #333;
text-align: center;
text-decoration: none;
transition: .3s;
}
.button:hover {
color: #fff;
}
CSS:ボタンホバー時に背景がスライドしたり領域を覆うアニメーションサンプル 10 目次
1. ホバーで左から、ホバーアウトで右へ
ボタンにホバーすると左から背景がスライド表示されて全体を覆い、ホバーアウト時には背景が右へスライドしながら消えていくエフェクトです。
CSS
.button::before {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: -1;
content: '';
background: #333;
transform-origin: right top;
transform: scale(0, 1);
transition: transform .3s;
}
.button:hover::before {
transform-origin: left top;
transform: scale(1, 1);
}
ホバーで右から、ホバーアウトで左にいく動きにしたい場合は、下記のようにコード内にあるtransform-origin
の値をそれぞれ変更することで対応できます。
CSS
.button::before {
transform-origin: left top;
}
.button:hover::before {
transform-origin: right top;
}
2. ホバーで上から、ホバーアウトで下へ
ボタンにホバーすると上から背景がスライド表示されて全体を覆い、ホバーアウト時には背景が下へスライドしながら消えていくエフェクトです。
CSS
.button::before {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: -1;
content: '';
background: #333;
transform-origin: left bottom;
transform: scale(1, 0);
transition: transform .3s;
}
.button:hover::before {
transform-origin: left top;
transform: scale(1, 1);
}
ホバーで下から、ホバーアウトで上にいく動きにしたい場合は、下記のようにコード内にあるtransform-origin
の値をそれぞれ変更することで対応できます。
CSS
.button::before {
transform-origin: left top;
}
.button:hover::before {
transform-origin: left bottom;
}
3. ホバーで左から、ホバーアウトで右へ(斜め背景)
基本的な動きは「1. ホバーで左から、ホバーアウトで右へ」と同じ、ボタンにホバーすると左から背景がスライド表示されて全体を覆い、ホバーアウト時には背景が右へスライドしながら消えていくエフェクトですが、背景を斜めにしたパターンです。
CSS
.button {
overflow: hidden;
}
.button::before {
position: absolute;
top: 0;
left: 0;
z-index: -1;
content: '';
width: 120%;
height: 100%;
background: #333;
transform-origin: right top;
transform: skewX(-30deg) scale(0, 1);
transition: transform .3s;
}
.button:hover::before {
transform-origin: left top;
transform: skewX(-30deg) scale(1, 1);
}
ホバーで右から、ホバーアウトで左にいく動きにしたい場合は、擬似要素部分で記述しているtransform-origin
の値をそれぞれ逆に変更(right top
→ left top
に、left top
→ right top
)することで対応できます。
4. ホバーで上から、ホバーアウトで下へ(斜め背景)
こちらは「2. ホバーで上から、ホバーアウトで下へ」の動きで背景を斜めにしたパターンです。
CSS
.button {
overflow: hidden;
}
.button::before {
position: absolute;
top: 0;
left: -5%;
z-index: -1;
content: '';
width: 110%;
height: 180%;
background: #333;
transform-origin: left bottom;
transform: skewY(-10deg) scale(1, 0);
transition: transform .3s;
}
.button:hover::before {
transform-origin: left top;
transform: skewY(-10deg) scale(1, 1);
}
ホバーで下から、ホバーアウトで上にいく動きにしたい場合は、擬似要素部分で記述しているtransform-origin
の値をそれぞれ逆に変更(left bottom
→ left top
に、left top
→ left bottom
)することで対応できます。
5. ホバーで中央から左右に
ホバーで中央から左右に向かって背景が表示されます。
CSS
.button::before {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: -1;
content: '';
background: #333;
transform-origin: center center;
transform: scale(0, 1);
transition: transform .3s;
}
.button:hover::before {
transform: scale(1, 1);
}
左右ではなく上下に向かって表示させたい場合は、transform: scale(0, 1);
の部分をtransform: scale(1, 0);
に変更すれば実装できます。
6. ホバーで左右から中央に
先ほどとは逆で、ホバーで左右から中央に向かって背景が表示されます。
CSS
.button::before,
.button::after {
position: absolute;
top: 0;
z-index: -1;
content: '';
width: 50%;
height: 100%;
background: #333;
transform: scale(0, 1);
transition: transform .3s;
}
.button::before {
left: 0;
transform-origin: left top;
}
.button::after {
right: 0;
transform-origin: right top;
}
.button:hover::before,
.button:hover::after {
transform: scale(1, 1);
}
上下から中央に向かう動きにしたい場合は、下記のように記述してください。
CSS
.button::before,
.button::after {
position: absolute;
left: 0;
z-index: -1;
content: '';
width: 100%;
height: 50%;
background: #333;
transform: scale(1, 0);
transition: transform .3s;
}
.button::before {
top: 0;
transform-origin: left top;
}
.button::after {
bottom: 0;
transform-origin: left bottom;
}
.button:hover::before,
.button:hover::after {
transform: scale(1, 1);
}
7. ホバーで左から右へ
「1. ホバーで左から、ホバーアウトで右へ」で紹介した動きを、animation
を使ってホバー時に一度に実行するというものです。
CSS
.button::before {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: -1;
content: '';
background: #333;
transform: scale(0, 1);
}
.button:hover {
animation: hover .6s forwards;
}
.button:hover::before {
animation: hover-in .3s forwards alternate, hover-out .3s .3s forwards alternate;
}
@keyframes hover {
0%, 100% {
color: #333;
}
50% {
color: #fff;
}
}
@keyframes hover-in {
0% {
transform-origin: left top;
transform: scale(0, 1);
}
100% {
transform-origin: left top;
transform: scale(1, 1);
}
}
@keyframes hover-out {
0% {
transform-origin: right top;
transform: scale(1, 1);
}
100% {
transform-origin: right top;
transform: scale(0, 1);
}
}
右から左への動きにしたい場合は、@keyframes hover-in
と@keyframes hover-out
を下記に差し替えることで実装できます。
CSS
@keyframes hover-in {
0% {
transform-origin: right top;
transform: scale(0, 1);
}
100% {
transform-origin: right top;
transform: scale(1, 1);
}
}
@keyframes hover-out {
0% {
transform-origin: left top;
transform: scale(1, 1);
}
100% {
transform-origin: left top;
transform: scale(0, 1);
}
}
8. ホバーで上から下へ
「2. ホバーで上から、ホバーアウトで下へ」で紹介した動きを、animation
を使ってホバー時に一度に実行するというものです。
CSS
.button::before {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: -1;
content: '';
background: #333;
transform: scale(1, 0);
}
.button:hover {
animation: hover .6s forwards;
}
.button:hover::before {
animation: hover-in .3s forwards alternate, hover-out .3s .3s forwards alternate;
}
@keyframes hover {
0%, 100% {
color: #333;
}
50% {
color: #fff;
}
}
@keyframes hover-in {
0% {
transform-origin: left top;
transform: scale(1, 0);
}
100% {
transform-origin: left top;
transform: scale(1, 1);
}
}
@keyframes hover-out {
0% {
transform-origin: left bottom;
transform: scale(1, 1);
}
100% {
transform-origin: left bottom;
transform: scale(1, 0);
}
}
下から上への動きにしたい場合は、@keyframes hover-in
と@keyframes hover-out
を下記に差し替えることで実装できます。
CSS
@keyframes hover-in {
0% {
transform-origin: left bottom;
transform: scale(1, 0);
}
100% {
transform-origin: left bottom;
transform: scale(1, 1);
}
}
@keyframes hover-out {
0% {
transform-origin: left top;
transform: scale(1, 1);
}
100% {
transform-origin: left top;
transform: scale(1, 0);
}
}
9. ホバーで左からタイミングをずらして表示
基本的な動きはホバーで左から右へ背景を表示させるものですが、背景を2種類用意し、ホバー時にそれらをタイミングをずらして表示させる動きです。
CSS
.button::before,
.button::after {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: -1;
content: '';
transform-origin: right top;
transform: scale(0, 1);
transition: transform .3s;
}
.button::before {
background: #777;
}
.button::after {
background: #333;
}
.button:hover::before,
.button:hover::after {
transform-origin: left top;
transform: scale(1, 1);
}
.button:hover::after {
transition-delay: .3s;
}
10. ホバーで左右からタイミングをずらして表示
最後も同じく2種類の背景をホバーでタイミングをずらして表示させるもので、こちらは左右から表示させるタイプになります。
CSS
.button::before,
.button::after {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: -1;
content: '';
transform: scale(0, 1);
}
.button::before {
background: #777;
transform-origin: right top;
}
.button::after {
background: #333;
opacity: 0;
transform-origin: left top;
transition: transform 0s .3s, opacity .3s;
}
.button:hover::before {
transform-origin: left top;
transform: scale(1, 1);
transition: transform .3s;
}
.button:hover::after {
opacity: 1;
transform-origin: right top;
transform: scale(1, 1);
transition: transform .3s .3s, opacity .3s;
}
上で紹介した動きをまとめて確認したい場合は以下でご覧になれます。
また、ボタンのホバーエフェクトの実装については過去にもいくつか紹介しているので、興味ある方はこちらもご覧ください。