【CSS】hoverで別の要素を動かしたいのに効かない原因5選と解決方法
「hoverしたときに別の要素を動かせるって聞いたのに効かないよ!?」
hoverで別の要素を動かしたいのに効かない原因と解決方法を5つ紹介します。
目次
【原因1】セレクタやCSSに問題あり
まずは「:hover」を外してみましょう。
「:hover」を外したときに意図したデザインになっていない場合、セレクタやCSSに問題があります。
まずは「:hover」を外した状態でちゃんと効くように調整しましょう。
例)
#main .link:hover p span{color:red;}
↑このセレクタから↓「:hover」を外して確認
#main .link p span{color:red;}
厳密に言うと「:hover」をつけることでクラス分の優先度があがります。それを考慮して調整するといいでしょう。
CSSやhtmlの基本をしっかり理解すると、この記事の内容もより理解できるようになりますよ。
↓CSSやhtmlを楽しく学べるようにマンガを描きましたのでゼヒご覧ください↓
↑「副業してもう少し稼ぎたい!」というかたのために副業の方法も解説しています。
【原因2】「:hover」の前に空白がある
「:hover」の前に空白があると子孫要素と判定されてしまいます。
セレクタと「:hover」は空白なく詰めましょう。
正解例)「.link:hover」は「.link」にマウスが乗ったとき
#main .link:hover p span
失敗例)「.link :hover」だと「.linkの子孫要素」にマウスが乗ったとき
#main .link :hover p span
こちらも参考にしてください。
【原因3】親要素を動かそうとしている
「hoverで動かせる別の要素」は子孫要素または弟要素です。
「子要素にマウスが乗ったとき、親要素を動かす」ことは現在のCSSではできません。
親要素を指定するにはjavascript(jQuery)を使いましょう。
ただし、CSSでつまづいているかたにjQueryを使いこなすのは難しいかもしれません。親要素を動かさないデザインを考えた方がいいかもしれません。
親要素を飛び越えた要素、兄要素も同様です。
【原因4】疑似要素の後につけている
ボタンの装飾などに「::before」や「::after」などの疑似要素を使っていて、ボタンにマウスが乗ったとき、その装飾を動かしたいとき要注意です。
「:hover」は疑似要素ではなくボタン側(親要素)に接続します。
成功例)ボタンにマウスが乗ったときの「::before」
.button:hover::before
失敗例)
.button::before:hover
【原因5】範囲が違う
「:hover」が効く範囲を勘違いしているかもしれません。
marginは含まれません。
もしその要素が透明なら、いったん「background」で背景色をつけて範囲を確認しましょう。背景色がつく部分がhoverの範囲です。
【まとめ】hoverで別の要素を動かしたいのに効かない原因
- 【原因1】セレクタやCSSに問題あり
→「:hover」を外して意図したデザインにする - 【原因2】「:hover」の前に空白がある
→「:hover」を空白なく詰める - 【原因3】親要素を動かそうとしている
→jQueryを使う - 【原因4】疑似要素の後につけている
→疑似要素の前につける - 【原因5】範囲が違う
→背景色をつけて範囲を確認
以上、hoverで別の要素を動かしたいのに効かない原因と解決方法でした。
「この記事の内容がよくわからなかった…」「なんかうまくいかなかった…」というかたは下記記事↓でhtmlとCSSの基本を学びましょう。
わからないまま突き進むより基本を学ぶのが結局近道です。