CSS カーソルが乗った時にボタンの色を変える方法
概要
この文章では、CSSを使用してカーソルがボタンに乗った時の色を変更する方法について説明します。具体的なコード例や、実際にどのように効果が現れるのかを紹介します。
カーソル効果の基本
カーソルがボタンにかかった際の基本的なスタイル変更は、:hover
擬似クラスを使用して行います。このテクニックを利用することで、ユーザーインターフェースの親しみやすさを向上させることができます。具体的には、色の変更やサイズの変更などが可能です。
実装例
実際のコード例を示し、どのようにCSSを記述するかを詳しく解説しています。特に、色の変更を実現するための具体的なプロパティについて触れ、実装の手順を簡単に説明しています。
コード例
<style>
.button {
background-color: #4CAF50; /* 初期の背景色 */
border: none;
color: white;
padding: 15px 32px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
margin: 4px 2px;
cursor: pointer;
transition: background-color 0.3s; /* 変化の遷移 */
}
.button:hover {
background-color: #45a049; /* ホバー時の背景色 */
}
</style>
<a href="#" class="button">ボタン</a>
効果の表
状態 | 背景色 |
---|---|
通常 | #4CAF50 |
ホバー | #45a049 |
CSSで表現する、マウスホバー時の楽しい動き
1. ふわっとする: 柔和なトランジション
transitionプロパティの基本的な使い方
property: 変化させるプロパティ名 (例: color、background-color、transformなど) duration: 変化にかける時間 (例: 0.3s、1sなど) timing-function: 変化の速度 (例: ease、linear、ease-in-outなど) delay: 変化が始まるまでの遅延時間 (例: 0s、0.5sなど)
a {
transition: color 0.3s ease;
}
a:hover {
color: #dc6688;
}
下線の滑らかな消失
a {
transition: color 0.3s ease, text-decoration-color 0.3s ease;
}
a:hover {
color: #dc6688;
text-decoration-color: transparent;
}
画像ボタンへの適用
.image-button {
transition: opacity 0.3s ease;
}
.image-button:hover {
opacity: 0;
}
2. ふわっとカチッする: 複合的なトランジション
複数のプロパティを変化させる
.button {
background-color: #86c0de;
color: ghostwhite;
box-shadow: 0 6px 0 hsl(200deg 37% 50%), 0 12px 0 rgba(0,0,0,.2);
transform: translateY(0);
transition: color 0.3s ease, background-color 0.3s ease, box-shadow 0.3s ease, transform 0.3s ease;
}
.button:hover {
background-color: hsl(200deg 62% 75%);
color: white;
box-shadow: 0 3px 0 hsl(200deg 47% 60%), 0 6px 0 rgba(0,0,0,.2);
transform: translateY(3px);
}
速度の調整
.button:active {
transition-duration: 0.1s; /* ボタンを押下した際は0.1秒で変化 */
}
3. ぽよんっとする: 弾むようなアニメーション
animationプロパティ
.button:hover {
animation: poyo 0.6s ease; /* poyoという名前のアニメーションを0.6秒かけて再生 */
}
@keyframesルール
@keyframes poyo {
0%, 100% { transform: scale(1); } /* 開始時と終了時は元のサイズ */
10% { transform: scale(1.2); } /* 10%の時点で1.2倍に拡大 */
40% { transform: scale(0.9); } /* 40%の時点で0.9倍に縮小 */
60% { transform: scale(1.04); } /* 60%の時点で1.04倍に拡大 */
80% { transform: scale(0.98); } /* 80%の時点で0.98倍に縮小 */
}
アニメーションの中断を防ぐ
document.addEventListener('DOMContentLoaded', () => {
const button = document.querySelector('.button');
button.addEventListener('mouseenter', () => {
button.classList.add('is-hovered');
});
button.addEventListener('mouseleave', () => {
button.classList.remove('is-hovered');
});
button.addEventListener('animationend', () => {
button.classList.remove('is-hovered');
});
});
.button.is-hovered {
animation: poyo 0.6s ease;
}
.button.is-hovered {
animation: poyo 0.6s ease;
}
4. @keyframes規則: アニメーションの設計図
@keyframesの基本的な構文
@keyframes animation-name {
0% { /* 開始時のスタイル */ }
50% { /* 中間のスタイル */ }
100% { /* 終了時のスタイル */ }
}
from と to
@keyframes animation-name {
from { /* 開始時のスタイル */ }
to { /* 終了時のスタイル */ }
}
途中の状態を指定
@keyframes animation-name {
0% { /* 開始時のスタイル */ }
25% { /* 25%の時点のスタイル */ }
50% { /* 50%の時点のスタイル */ }
75% { /* 75%の時点のスタイル */ }
100% { /* 終了時のスタイル */ }
}
5. アニメーションのイージング: 動きに変化を加える
代表的なイージング関数
ease: ゆっくり始まり、徐々に速くなり、最後にゆっくり終わる (デフォルト) linear: 等速で変化する ease-in: ゆっくり始まり、徐々に速くなる ease-out: 最初は速く、徐々に遅くなる ease-in-out: ゆっくり始まり、途中は速く、最後にゆっくり終わる cubic-bezier(x1, y1, x2, y2): より細かく速度変化を指定
cubic-bezier()関数
最初はゆっくり 途中は速く 最後はゆっくり
6. アニメーションの前後に適用されるスタイル: animation-fill-mode
none: アニメーションの前後には、要素の通常のスタイルが適用されます (デフォルト) forwards: アニメーション終了時のスタイルが、アニメーション後も維持されます backwards: アニメーション開始前のスタイルが、アニメーション開始時から適用されます both: forwards と backwards の両方が適用されます
7. 詳細はあとから表示する: 隠された情報をスタイリッシュに表示
下から出る詳細
.item {
position: relative;
overflow: hidden;
}
.item .details {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
transform: translateY(100%);
transition: transform 0.3s ease;
}
.item:hover .details {
transform: translateY(0);
}
くるんと裏返る
.card {
position: relative;
perspective: 1000px; /* 遠近感 */
}
.card .front,
.card .back {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
backface-visibility: hidden;
transition: transform 0.5s ease;
}
.card .back {
transform: rotateX(180deg);
}
.card:hover .front {
transform: rotateX(180deg);
}
.card:hover .back {
transform: rotateX(0deg);
}
左右から背景が出てくる
.item {
position: relative;
overflow: hidden;
}
.item::before,
.item::after {
content: "";
position: absolute;
top: 0;
width: 50%;
height: 100%;
background-color: #eee;
transition: transform 0.3s ease;
}
.item::before {
left: 0;
transform: translateX(-100%);
}
.item::after {
right: 0;
transform: translateX(100%);
}
.item:hover::before {
transform: translateX(0);
}
.item:hover::after {
transform: translateX(0);
}
まとめ
参考文献
さらなる詳細については、以下のリソースを参照してください。 MDN Web Docs - :hover
Q&A
Q1: &:hoverは何のために使用しますか?
A1: &:hoverは、要素にカーソルが乗ったときのスタイルを変更するために使用します。
Q2: ボタンのサイズを変えるにはどうすればいいですか?
A2: &:hoverにpaddingやfont-sizeプロパティを追加することで、ボタンのサイズを変更できます。
Q3: ホバー効果を他の要素にも適用できますか?
A3: はい、他の要素にも:hover擬似クラスを使用して、同様の効果を適用できます。
その他の参考記事:css cursor