ユーザーがクリックすると、マウスボタンが押されている間にスタイルが変更されるように、ボタンを作成しようとしています。また、モバイルブラウザーで触れた場合に、同様の方法でスタイルを変更してほしい。私にとって一見明らかなことは、CSS:active疑似クラスを使用することでしたが、うまくいきませんでした。 :focusを試しましたが、うまくいきませんでした。私は:hoverを試しましたが、うまくいくように見えましたが、ボタンから指を離した後もスタイルを保ちました。これらの観察結果はすべて、iPhone 4およびDroid 2で行われました。
モバイルブラウザー(iPhone、iPad、Android、できれば他のユーザー)に効果を再現する方法はありますか?今のところ、私はこのようなことをしています:
<style type="text/css">
#testButton {
background: #dddddd;
}
#testButton:active, #testButton.active {
background: #aaaaaa;
}
</style>
...
<button type="button" id="testButton">test</button>
...
<script type='text/javascript' src='http://code.jquery.com/jquery-1.6.1.min.js'></script>
<script type='text/javascript'>
$("*").live("touchstart", function() {
$(this).addClass("active");
}).live("touchend", function() {
$(this).removeClass("active");
});
</script>
:active疑似クラスはデスクトップブラウザー用であり、アクティブクラスはタッチブラウザー用です。
Javascriptを使用せずに、もっと簡単な方法があるかどうか疑問に思っています。
W3C仕様には:touch
のようなものはありません http://www.w3.org/TR/CSS2/selector.html#pseudo-class-selectors
:active
は機能するはずです。
:active
/:hover
擬似クラスの順序は、正しく機能するために重要です。
上記のリンクからの引用です
インタラクティブなユーザーエージェントは、ユーザーのアクションに応じてレンダリングを変更することがあります。 CSSは、一般的な場合に3つの疑似クラスを提供します。
- :hover疑似クラスは、ユーザーが(ポインティングデバイスを使用して)要素を指定している間に適用されますが、アクティブにはなりません。たとえば、ビジュアルユーザーエージェントは、カーソル(マウスポインター)が要素によって生成されたボックスの上に置かれたときに、この擬似クラスを適用できます。インタラクティブメディアをサポートしていないユーザーエージェントは、この擬似クラスをサポートする必要はありません。インタラクティブメディアをサポートする一部の適合ユーザーエージェントは、この擬似クラス(ペンデバイスなど)をサポートできない場合があります。
- :active疑似クラスは、ユーザーが要素をアクティブにしている間に適用されます。たとえば、ユーザーがマウスボタンを押してから離すまでの間。
- :focus疑似クラスは、要素にフォーカスがあるときに適用されます(キーボードイベントまたは他の形式のテキスト入力を受け入れます)。
モバイルはホバーフィードバックを与えないので、ユーザーがリンクをタップしたときに即座にフィードバックが表示されるようにします。きがついた -webkit-tap-highlight-color
は、応答が最も速い(主観的)です。
以下を身体に追加すると、リンクにタップ効果があります。
body {
-webkit-tap-highlight-color: #ccc;
}