:active
疑似クラスとdiv
要素
div
まず最初に、要素が最初からアクティブ化状態を持つべきではないと確信しています。
Selectors Level 3 W3C Recommendationのuser action pseudo-classes :hover
、:active
、および:focus
セクションを読むと、次のことがわかります。
:active
疑似クラスは、要素がユーザーによってアクティブ化されている間に適用されます。たとえば、ユーザーがマウス ボタンを押して離すまでの時間です。複数のマウス ボタンがあるシステムでは:active
、プライマリまたはプライマリ アクティベーション ボタン (通常は「左」マウス ボタン) とそのエイリアスにのみ適用されます。
HTML5 W3C Editor's DraftのInteractive Contentセクションに移動すると、次のようになります。
HTML の特定の要素にはアクティブ化動作があり、ユーザーがそれらをアクティブ化できることを意味します。
ユーザー エージェントは、ユーザーがキーボードや音声入力、マウス クリックなどを使用して、アクティブ化動作を持つ要素を手動でトリガーできるようにする必要があります。ユーザーがクリック以外の方法でアクティブ化動作が定義されている要素をトリガーする場合、インタラクション イベントのデフォルト アクションは、要素に対して合成クリック アクティブ化ステップを実行することである必要があります。
HTML401 ドキュメントはアクティベーション状態やユーザー インタラクションについて詳しく説明していないため、HTML401 勧告よりも HTML5 Editor's Draft について言及します。ただし、要素のような要素のアクティブ化については言及していますが、a
要素を定義する際にはそれについては何も言及していませんdiv
。
このdiv
要素 には、HTML5 勧告で定義されている「アクティブ化状態」がありません。インタラクティブ コンテンツカテゴリはなく( elementとはa
異なり)、アクティブな状態を適用できるとは述べていません。
回避策
上で説明したように、div
要素は状態を受け入れるべきではありません:active
。このため、HTML を変更して、要素を使用するようにします。このために、次のa
要素を使用しています。
<a href="javascript: void(0)">
<img />
</a>
これだけでは IE の問題は解決しません。この JSFiddle の例が表示されている場合、img
要素をクリックすると、a
コンテナーはアクティブ状態になりません。では、これを修正するにはどうすればよいでしょうか。を使用するだけでなく、以下:hover:active
も使用します:hover:focus
。
a:hover:active,
a:hover:focus {
outline: 0; /* Reset the default anchor tag focus style. */
background: #f00;
}
このJSFiddle demoで見られるように、これにより、IE および他のすべてのブラウザーで同様の機能が得られます。
2 つの (潜在的に望ましくない) 副作用
このアプローチの問題は、要素がフォーカスされた状態を保持し、キーボードのtabキーを使用して要素にアクセスすることでこの効果を実現できることです。フォーカスされた状態の要素にカーソルを合わせると、そのスタイルが変わります。ただし、これが望ましくない副作用であるかどうかを判断するのは私次第ではありません。
要素がリンクになりました。最初に要素をフォーカスするには、このhref
プロパティが必要です。
余分なスタイリング
a
要素の代わりに要素を使用しているdiv
ため、要素をリンクとして区別するブラウザのデフォルト スタイルをリセットする必要があります。このために、次のことが簡単にできます。
a {
color: #000; /* Reset the color to black. */
cursor: default; /* Reset the cursor to default. */
text-decoration: none; /* Remove the underline. */
}
a img {
border: none; /* Remove border from image. */
}
最終的な JSFiddle デモ。