CSSだけでホバーした時に、様々な画像切り替え方法のご紹介。
色んなパターンの画像切り替えサンプルを用意しますので、まずは基本のHTMLを。
このHTMLを書いて2枚画像を用意して、目的のCSSをコピペすれば同じ動きになります。
沢山サンプルがあって長くなってしまい申し訳ないです。
基本のHTML
<div class="btn"> <a href="https://hajimete.org/"> <img src="btn_img1.jpg" alt="ボタン画像1" /> <img src="btn_img2.jpg" alt="ボタン画像2" /> </a> </div>
フェードで切り替わるボタン
DEMO
CSS
.btn { position: relative; width: 280px; height: 80px; margin: 0 auto; display: block; border-radius: 12px; overflow: hidden; cursor: pointer; } .btn img { position: absolute; top: 50%; left: 50%; -webkit-transform: translate(-50%, -50%); transform: translate(-50%, -50%); width: 100%; display: block; -webkit-transition: .4s ease-in-out; transition: .4s ease-in-out; } .btn:hover img:nth-of-type(2) { opacity: 0; }
上から重なって切り替わるボタン
DEMO
CSS
.btn { position: relative; width: 280px; height: 80px; margin: 0 auto; display: block; border-radius: 12px; overflow: hidden; cursor: pointer; } .btn img { position: absolute; top: 50%; left: 50%; -webkit-transform: translate(-50%, -50%); transform: translate(-50%, -50%); width: 100%; display: block; -webkit-transition: .4s ease-in-out; transition: .4s ease-in-out; } .btn img:nth-of-type(2) { top: -100%; } .btn:hover img:nth-of-type(2) { top: 50%; }
下から重なって切り替わるボタン
DEMO
CSS
.btn { position: relative; width: 280px; height: 80px; margin: 0 auto; display: block; border-radius: 12px; overflow: hidden; cursor: pointer; } .btn img { position: absolute; top: 50%; left: 50%; -webkit-transform: translate(-50%, -50%); transform: translate(-50%, -50%); width: 100%; display: block; -webkit-transition: .4s ease-in-out; transition: .4s ease-in-out; } .btn img:nth-of-type(2) { top: 200%; } .btn:hover img:nth-of-type(2) { top: 50%; }
右から重なって切り替わるボタン
DEMO
CSS
.btn { position: relative; width: 280px; height: 80px; margin: 0 auto; display: block; border-radius: 12px; overflow: hidden; cursor: pointer; } .btn img { position: absolute; top: 50%; left: 50%; -webkit-transform: translate(-50%, -50%); transform: translate(-50%, -50%); width: 100%; display: block; -webkit-transition: .4s ease-in-out; transition: .4s ease-in-out; } .btn img:nth-of-type(2) { left: 200%; } .btn:hover img:nth-of-type(2) { left: 50%; }
左から重なって切り替わるボタン
DEMO
CSS
.btn { position: relative; width: 280px; height: 80px; margin: 0 auto; display: block; border-radius: 12px; overflow: hidden; cursor: pointer; } .btn img { position: absolute; top: 50%; left: 50%; -webkit-transform: translate(-50%, -50%); transform: translate(-50%, -50%); width: 100%; display: block; -webkit-transition: .4s ease-in-out; transition: .4s ease-in-out; } .btn img:nth-of-type(2) { left: -100%; } .btn:hover img:nth-of-type(2) { left: 50%; }
上にフェードして切り替わるボタン
DEMO
CSS
.btn { position: relative; width: 280px; height: 80px; margin: 0 auto; display: block; border-radius: 12px; overflow: hidden; cursor: pointer; } .btn img { position: absolute; top: 50%; left: 50%; -webkit-transform: translate(-50%, -50%); transform: translate(-50%, -50%); width: 100%; display: block; -webkit-transition: .4s ease-in-out; transition: .4s ease-in-out; } .btn:hover img:nth-of-type(2) { top: 0%; opacity: 0; }
下にフェードして切り替わるボタン
DEMO
CSS
.btn { position: relative; width: 280px; height: 80px; margin: 0 auto; display: block; border-radius: 12px; overflow: hidden; cursor: pointer; } .btn img { position: absolute; top: 50%; left: 50%; -webkit-transform: translate(-50%, -50%); transform: translate(-50%, -50%); width: 100%; display: block; -webkit-transition: .4s ease-in-out; transition: .4s ease-in-out; } .btn:hover img:nth-of-type(2) { top: 100%; opacity: 0; }
右にフェードして切り替わるボタン
DEMO
CSS
.btn { position: relative; width: 280px; height: 80px; margin: 0 auto; display: block; border-radius: 12px; overflow: hidden; cursor: pointer; } .btn img { position: absolute; top: 50%; left: 50%; -webkit-transform: translate(-50%, -50%); transform: translate(-50%, -50%); width: 100%; display: block; -webkit-transition: .4s ease-in-out; transition: .4s ease-in-out; } .btn:hover img:nth-of-type(2) { left: 100%; opacity: 0; }
左にフェードして切り替わるボタン
DEMO
CSS
.btn { position: relative; width: 280px; height: 80px; margin: 0 auto; display: block; border-radius: 12px; overflow: hidden; cursor: pointer; } .btn img { position: absolute; top: 50%; left: 50%; -webkit-transform: translate(-50%, -50%); transform: translate(-50%, -50%); width: 100%; display: block; -webkit-transition: .4s ease-in-out; transition: .4s ease-in-out; } .btn:hover img:nth-of-type(2) { left: 0%; opacity: 0; }
拡大しつつフェードして切り替わるボタン
DEMO
CSS
.btn { position: relative; width: 280px; height: 80px; margin: 0 auto; display: block; border-radius: 12px; overflow: hidden; cursor: pointer; } .btn img { position: absolute; top: 50%; left: 50%; -webkit-transform: translate(-50%, -50%); transform: translate(-50%, -50%); width: 100%; display: block; -webkit-transition: .4s ease-in-out; transition: .4s ease-in-out; } .btn:hover img:nth-of-type(2) { -webkit-transform: translate(-50%, -50%) scale(1.15) !important; transform: translate(-50%, -50%) scale(1.15) !important; opacity: 0; }
縮小しつつフェードして切り替わるボタン
DEMO
CSS
.btn { position: relative; width: 280px; height: 80px; margin: 0 auto; display: block; border-radius: 12px; overflow: hidden; cursor: pointer; } .btn img { position: absolute; top: 50%; left: 50%; -webkit-transform: translate(-50%, -50%); transform: translate(-50%, -50%); width: 100%; display: block; -webkit-transition: .4s ease-in-out; transition: .4s ease-in-out; } .btn:hover img:nth-of-type(2) { -webkit-transform: translate(-50%, -50%) scale(.8) !important; transform: translate(-50%, -50%) scale(.8) !important; opacity: 0; }
回転して切り替わるボタン
DEMO
CSS
.btn { position: relative; width: 280px; height: 80px; margin: 0 auto; display: block; border-radius: 12px; overflow: hidden; cursor: pointer; } .btn img { position: absolute; top: 50%; left: 50%; -webkit-transform: translate(-50%, -50%); transform: translate(-50%, -50%); width: 100%; display: block; -webkit-transition: .4s ease-in-out; transition: .4s ease-in-out; } .btn:hover img:nth-of-type(2) { -webkit-transform: translate(-50%, -50%) rotate(720deg) !important; transform: translate(-50%, -50%) rotate(720deg) !important; width: 0; }
下に画像がズレて切り替わるボタン
DEMO
CSS
.btn { position: relative; width: 280px; height: 80px; margin: 0 auto; display: block; border-radius: 12px; overflow: hidden; cursor: pointer; } .btn img { position: absolute; top: 0; left: 0; width: 100%; display: block; -webkit-transition: .4s ease-in-out; transition: .4s ease-in-out; } .btn img:nth-of-type(1) { top: -100%; } .btn img:nth-of-type(2) { top: 0; } .btn:hover img:nth-of-type(1) { top: 0; } .btn:hover img:nth-of-type(2) { top: 100%; }
横に画像がズレて切り替わるボタン
DEMO
CSS
.btn { position: relative; width: 280px; height: 80px; margin: 0 auto; display: block; border-radius: 12px; overflow: hidden; cursor: pointer; } .btn img { position: absolute; top: 0; left: 0; width: 100%; display: block; -webkit-transition: .4s ease-in-out; transition: .4s ease-in-out; } .btn img:nth-of-type(1) { left: 100%; } .btn img:nth-of-type(2) { left: 0; } .btn:hover img:nth-of-type(1) { left: 0; } .btn:hover img:nth-of-type(2) { left: -100%; }
四角がボヨ~ンとデカくなりフェードで切り替わるボタン
DEMO
CSS
.btn { position: relative; width: 280px; height: 80px; margin: 0 auto; display: block; border-radius: 12px; overflow: hidden; cursor: pointer; -webkit-transition: .6s cubic-bezier(0.34, 1.56, 0.64, 1); transition: .6s cubic-bezier(0.34, 1.56, 0.64, 1); } .btn img { position: absolute; top: 0; left: 0; width: 100%; display: block; -webkit-transition: 1s ease-in-out; transition: 1s ease-in-out; } .btn:hover { -webkit-transform: scale(1.3); transform: scale(1.3); } .btn:hover img:nth-of-type(2) { opacity: 0; }
四角がボヨ~ンと小さくなりフェードで切り替わるボタン
DEMO
CSS
.btn { position: relative; width: 280px; height: 80px; margin: 0 auto; display: block; border-radius: 12px; overflow: hidden; cursor: pointer; -webkit-transition: .6s cubic-bezier(0.34, 1.56, 0.64, 1); transition: .6s cubic-bezier(0.34, 1.56, 0.64, 1); } .btn img { position: absolute; top: 0; left: 0; width: 100%; display: block; -webkit-transition: 1s ease-in-out; transition: 1s ease-in-out; } .btn:hover { -webkit-transform: scale(.7); transform: scale(.7); } .btn:hover img:nth-of-type(2) { opacity: 0; }
もっと見たい方は、新しく「ホバーした時にCSSだけで出来る様々な画像切り替え方法|その2」をまとめましたのでよかったら見てください!
ボタンを横並びにする
★追記★
アガサさんコメントいただきありがとうございます!
ボタンを横並びにする場合は、CSSで「.btn」に「display: inline-block;」を追加すると横並びになります。
さらにそのままだと、ボタンがくっついてかっこ悪いから「margin」で少し余白を持たせます。
DEMO
CSS
.btn { position: relative; width: 220px; height: 70px; margin: 0 2% 0 0; // marginで余白を持たせる display: inline-block; // 「display」を「block」から「inline-block」へ変更 border-radius: 12px; overflow: hidden; cursor: pointer; -webkit-transition: .6s cubic-bezier(0.34, 1.56, 0.64, 1); transition: .6s cubic-bezier(0.34, 1.56, 0.64, 1); } .btn:last-child { margin-right: 0; // 最後のボタンの余白を消します } .btn img { position: absolute; top: 0; left: 0; width: 100%; display: block; -webkit-transition: 1s ease-in-out; transition: 1s ease-in-out; } .btn:hover { -webkit-transform: scale(.8); transform: scale(.8); } .btn:hover img:nth-of-type(2) { opacity: 0; }
コメント
こんにちは。
2種類のサイズのボタンに同じエフェクトを追加しようと思い、
クラス名をとに、
CSSを
btn2 {
position: relative;
width: 300px;
height: 60px;
margin: 0 auto;
display: block;
border-radius: 0px;
overflow: hidden;
cursor: pointer;
}
.btn2 img {
position: absolute;
top: 50%;
left: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
width: 100%;
display: block;
-webkit-transition: .4s ease-in-out;
transition: .4s ease-in-out;
}
.btn2:hover img:nth-of-type(2) {
opacity: 0;
}
にしましたが、btn2がうまく動作しません。
どこが間違っているか教えていただけませんか
コメントありがとうございます!
添付頂いたCSSを実際に表示してみましたが、
最初のbtn2を指定する際に「.」が抜けていて上手く表示できないようでした!
それ以外は問題ありませんでした☆彡
サイト制作がんばってください!!
応援しています!
また何かわからない所が有れば、ブログ記事に関係なく
お問い合わせフォームから聞いてくださいね!
修正したら治りました。
大変助かりました。
動いて良かったです!
ページ制作がんばってくださいね!!
スマホでホバーしてしまうのを避けたいのですが、どのような記述にしたらよいでしょうか?
メディアクエリを設定してもホバーしてしまいます…><
コメントしていただきありがとうございます!
スマホでホバーを避ける場合、メディアクエリで「:hover」を上書きすればできます!
または、PCの時だけに「:hover」アクションを追加すれば、スマホでは動かなくなります!
最初の「フェードで切り替わるボタン」を例としてあげてみます。
—————————————————————
【①メディアクエリでスマホのみホバーアクションを停止する】
@media (max-width: 768px) {
.btn:hover img:nth-of-type(2) {
// スマホでホバーした際に、値を動かさない様上書き指定する
opacity: 1;
}
}
—————————————————————-
【②メディアクエリでPCのみにホバーアクションを追加する】
「フェードで切り替わるボタン」のCSSの↓は消して、「@media {}」で囲われた箇所をコピペしてください。
.btn:hover img:nth-of-type(2) {
opacity: 0;
}
@media (min-width: 1024px) {
.btn:hover img:nth-of-type(2) {
// PCでホバーした時のみ、ホバーアクションを指定する
opacity: 0;
}
}
—————————————————————-
どちらでもスマホでホバーしない様できます。
参考になれば幸いです!!
ブログに乗っている所で、分からない部分がありましたら、またコメントくださいね!
複数横に並べるときはどうやって記述しますか?
コメントありがとうございます!
複数のボタンをを横並びにする時は、CSSで「.btn」に「display: inline-block;」を追加すると横並びになります。
追記してコピペできるようしていますので、参考にしていただけると嬉しいです!