• HOME > 
  • CSS > 
  • CSSのメディアクエリでスマホでのホバーの挙動の対策を行う【...

CSSのメディアクエリでスマホでのホバーの挙動の対策を行う【hover:hover】

投稿日:

このページにはGoogleアドセンス広告とアフィリエイト広告が含まれています。

カテゴリー記事のアイキャッチ画像

本記事は執筆時点(2023年10月01日)の情報をベースにしております。掲載している情報が最新ではない可能性がありますので何卒ご容赦ください。

広告
広告

スマホでタップしたときにホバーのスタイルが消えない?

マウスのカーソルを載せたときに専用のスタイルを適用させることができる疑似要素「hover」、多くの方がこれを使ってボタンなどにホバー時のスタイルを設定していると思います。

そんなメジャーな疑似要素「hover」ですが、スマホで要素をタップしたときにホバー時のスタイルが適用され続けるという経験はありませんか?

ホバー時のスタイルが適用され続ける例

スマホを始めとしたタッチデバイスは当然ながらホバーというものが存在しませんので、疑似要素「hover」が適用されるかどうかの判定基準が「要素をタップしてから別の要素をタップするまで」となっています。

そのためタップしたあともhoverのスタイルが適用され続けてしまうという訳です。

判定基準の解説画像

この現象、見落としていたり、違和感を感じつつも見て見ぬふりをしていた方も多いのではないでしょうか?

今回はCSSだけで簡単にスマホでの疑似要素「hover」の挙動の対策を行う方法をご紹介します。

CSSのメディアクエリでスマホでのホバーの挙動の対策を行う

スマホでのホバーの挙動の対策に使用するのは、CSSにおけるレスポンシブ処理でお馴染みの「メディアクエリ」です。

実はメディアクエリを使うと、画面サイズやプリントだけでなく「ホバーが可能かどうか」という分岐も行うことも可能なのです。

ホバーできる場合とできない場合でスタイルを分けたいときは次のように記述します。

メディアクエリの書き方

このようにして、「media (hover:hover)」の中にだけ疑似要素「hover」を使ったスタイルを書くようにすれば、スマホでタップした時にホバー時のスタイルが適用され続けることがなくなります。

CSS

@media (hover:hover){
    button:hover{
        background:#d40000;
        color:#fff;
    }
}

タップしたときのスタイルには疑似要素「active」を使う

ホバーが有効ではないデバイスの場合のスタイルは「media (hover:none)」の中に記述します。

しかし、ここで疑似要素「hover」を使ってしまってはメディアクエリが台無しです。

タップした時だけ適用するスタイルは疑似要素「active」を使って記述します。

CSS

@media (hover:none){
    button:active{
        background:#d40000;
        color:#fff;
    }
}

「media (hover:hover)」と疑似要素「hover」、「media (hover:none)」と疑似要素「active」という2つの組み合わせでスタイルを設定しておけばPCでもスマホでも思い通りのスタイルを適用することができます。

リンク先のサムネイル
CSSの疑似要素・疑似クラスの種類と使い方

疑似要素・疑似クラスは、どちらも元となる(基準となる)要素に対して追加のスタイルを指定したり装飾を行うために使用するCSSのセレクタ―です。どちらもHTMLのソースコードには追加の記述やマークアップの必要がなく...【もっと読む】

まとめ

以上がCSSのメディアクエリでスマホでのホバーの挙動の対策を行う方法です。

私もタップ時のホバーの挙動に関しては「そういうものだから仕方ないのかも」と思っていましたが、このように簡単に修正できるので、皆様もこれを機に見直してみてはいかがでしょうか?

広告
広告

関連する記事

サムネイル

CSSでPNG画像に影を落とす方法【filterプロパティd……

2025年01月15日
CSSでドロップシャドウをつけるには? CSSで要素に影(ドロップシャドウ)を付ける手段としては「box-shadow」や「text-shadow(テキストの場 […]
サムネイル

CSSのfilterプロパティの関数の種類と効果をまとめ【フ……

2025年01月06日
最終更新日:2025年01月15日
IEのサポートが終了したので、これまで使う機会の少なかったfilterプロパティを改めて調べたところ、CSSでの表現の幅を広げてくれる画期的なプロパティだと気づ […]
サムネイル

CSSで写真にぼかし加工を加える方法【filterプロパティ……

2025年01月06日
CSSだけで写真をぼかせる? CSSのfilterプロパティのblur()関数を使うと、画像(要素)にぼかしを加えることができます。 画像編集ソフトを使うことな […]
サムネイル

CSSで写真の明るさ(明度)を調整する方法【filterプロ……

2025年01月06日
CSSだけで画像の明度を調整できる? CSSのfilterプロパティのbrightness()関数を使うと、画像(要素)の明るさを変更することができます。 画像 […]
サムネイル

CSSで写真のコントラストを変更する方法【filterプロパ……

2025年01月06日
CSSだけで写真のコントラストを調整できる? CSSのfilterプロパティのcontrast()関数を使うと、画像(要素)のコントラストを変更することができま […]
サムネイル

CSSで写真を白黒に変更する方法【filterプロパティgr……

2025年01月06日
CSSだけで写真を白黒にできる? CSSのfilterプロパティのgrayscale()関数を使うと、画像(要素)を白黒に変更することができます。 グレースケー […]
サムネイル

CSSで写真をセピアに加工する方法【filterプロパティs……

2025年01月06日
CSSで写真をセピアに加工できる? CSSのfilterプロパティのsepia()関数を使うと、画像をセピア色に変換できます。 画像編集ソフトを使うことなくCS […]