オンマウス時の処理をJavaScriptで依頼されることが多いのですが、それってCSSだけでできるのでは?ということが結構あるのでオンマウス時にCSSでできることを色々試してみます。
オンマウスの実装方法
CSSでオンマウス時に処理を行う場合、:hoverを使って実装します。
例1
オンマウスしたaに含まれるimgの透過を変更します。
1 2 3 | a:hover img { opacity : 0.7 ; } |
例2
aに直接隣接する(直後)imgの透過を変更します。
1 2 3 | a:hover + img { opacity : 0.7 ; } |
例1ではimgにオンマウスしても透過はされたままですが、例2ではimgにオンマウスするとaのオンマウスが外れてしまうため、imgの透過は元に戻ってしまいます。
基本的には例1で使った子孫セレクタで指定する形が多いと思いますが、オンマウスの対象範囲によっては例2のような隣接セレクタや間接セレクタで指定するとよいと思います。
画像の拡大
liにオンマウスした時に、子要素のimgを拡大してみます。
HTML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | < ul class = "sample01" > < li > < a href = "" > < div class = "image" > </ div > < p class = "text" >説明テキストです。</ p > </ a > </ li > < li > < a href = "" > < div class = "image" > </ div > < p class = "text" >説明テキストです。</ p > </ a > </ li > < li > < a href = "" > < div class = "image" > </ div > < p class = "text" >説明テキストです。</ p > </ a > </ li > < li > < a href = "" > < div class = "image" > </ div > < p class = "text" >説明テキストです。</ p > </ a > </ li > </ ul > |
CSS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | .sample 01 { width : 100% ; } .sample 01 li { position : relative ; z-index : 1 ; float : left ; width : 200px ; margin : 10px ; padding : 10px ; } .sample 01 li:hover { z-index : 5 ; } .sample 01 li:hover img { width : 300px ; height : auto ; margin-left : -50px ; } .sample 01 a { display : block ; color : #000 ; text-decoration : none ; } |
liにオンマウスした時に、z-indexで重なり順の調整、imgのサイズ拡大(widthでサイズの指定、margin-leftで左にずらして位置調整)を行っています。
画像の拡大のデモページ
プルダウン
HTML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | < ul class = "sample02" > < li > < a href = "" >ナビ1</ a > </ li > < li > < a href = "" >ナビ2</ a > < ul > < li >< a href = "" >ナビ2-1</ a ></ li > < li >< a href = "" >ナビ2-2</ a ></ li > < li >< a href = "" >ナビ2-3</ a ></ li > </ ul > </ li > < li > < span >ナビ3</ span > < ul > < li >< a href = "" >ナビ3-1</ a ></ li > < li >< a href = "" >ナビ3-2</ a ></ li > < li >< a href = "" >ナビ3-3</ a ></ li > < li >< a href = "" >ナビ3-4</ a ></ li > < li >< a href = "" >ナビ3-5</ a ></ li > </ ul > </ li > < li > < a href = "" >ナビ4</ a > </ li > </ ul > |
CSS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | .sample 02 { width : 100% ; height : 30px ; line-height : 30px ; background : #34495e ; } .sample 02 a, .sample 02 span { color : #ffffff ; text-decoration : none ; } .sample 02 > li { float : left ; width : 100px ; background : #34495e ; } .sample 02 > li > a, .sample 02 > li > span { display : block ; height : 30px ; border-right : #ffffff 1px solid ; padding : 0 10px ; } .sample 02 > li > ul { display : none ; } .sample 02 > li:hover > ul { display : block ; } .sample 02 > li > ul > li { border-bottom : #ffffff 1px solid ; } |
liにオンマウスした時に、子要素のulのdisplayを切り替えています。
プルダウンのデモページ
アニメーションを追加する
画像の拡大にアニメーションを追加してみます。
HTML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | < ul class = "sample03" > < li > < a href = "" > < div class = "image" > </ div > < p class = "text" >説明テキストです。</ p > </ a > </ li > < li > < a href = "" > < div class = "image" > </ div > < p class = "text" >説明テキストです。</ p > </ a > </ li > < li > < a href = "" > < div class = "image" > </ div > < p class = "text" >説明テキストです。</ p > </ a > </ li > < li > < a href = "" > < div class = "image" > </ div > < p class = "text" >説明テキストです。</ p > </ a > </ li > </ ul > |
CSS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | .sample 03 { width : 100% ; } .sample 03 li { position : relative ; z-index : 1 ; float : left ; width : 200px ; margin : 10px ; padding : 10px ; } .sample 03 li:hover { z-index : 5 ; } .sample 03 img { height : auto ; -webkit- transition : 0.5 s ease-in-out; transition : 0.5 s ease-in-out; } .sample 03 li:hover img { width : 300px ; margin-left : -50px ; } .sample 03 a { display : block ; color : #000 ; text-decoration : none ; } .sample 03 .text { margin : 0 ; } |
imgにtransitionを指定してアニメーションさせています。
アニメーション追加のデモページ
ロールオーバーをふわっと切り替える
オンマウス時の画像を透明度0で重ねておいて、オンマウス時にアニメーションで表示させます。
HTML
1 2 3 4 5 6 | < div class = "sample04" > < a href = "" > < img src = "img_off.jpg" width = "400" height = "200" class = "off" alt = "" /> < img src = "img_on.jpg" width = "400" height = "200" class = "on" alt = "" /> </ a > </ div > |
CSS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | .sample 04 { position : relative ; width : 400px ; } .sample 04 img { display : block ; } .sample 04 .on { position : absolute ; top : 0 ; left : 0 ; opacity : 0 ; -webkit- transition : 0.5 s ease-in-out; transition : 0.5 s ease-in-out; } .sample 04 a:hover .on { opacity : 1 ; } |
コメントが承認されるまで時間がかかります。