:focusと:activeの違いは何ですか?


回答:


413

:focus:active2つの異なる状態です。

  • :focus 要素が入力を受け取るために現在選択されているときの状態を表し、
  • :active 要素がユーザーによって現在アクティブ化されているときの状態を表します。

たとえば、があるとしましょう<button>。最初<button>は状態はありません。それはただ存在します。にTab「フォーカス」を与えるために使用すると、<button>その:focus状態になります。次にクリック(またはを押すspace)すると、ボタンがその(:active)状態になります。

また、その幻想栽培そのノート、あなたが要素をクリックしたとき、あなたが集中し、それを与えて、上:focus:active同じですが。彼らは同じではありません。ボタンをクリックすると、:focus:active状態になります。

例:

<style type="text/css">
  button { font-weight: normal; color: black; }
  button:focus { color: red; }
  button:active { font-weight: bold; }
</style>
  
<button>
  When clicked, my text turns red AND bold!<br />
  But not when focused only,<br />
 where my text just turns red
</button>

編集:jsfiddle


2
またdocument.activeElement、IE8は例外をスローする可能性があるため、try catchに含める必要がありますが、わかりにくい名前のプロパティを使用すると、フォーカスされた要素を取得できます。また、古いバージョンのブラウザでは:activeと:focusの扱いが異なる場合があることに注意してください。 function activeElement() { try { return document.activeElement; /* can get exeption in IE8 */ } catch(e) { } }
robocat

6
私はここにあなたの例のJSFiddleを作成しました:jsfiddle.net/NCwvj chrome(v24)でのテストボタンをクリックしても:active状態が呼び出されるだけであることに気付きました
Zaki Aziz

3
Nit::active:focus stateがない場合、フォーカスとアクティブの順序がHTMLボタンの状態に影響します。:focusが最後の場合、アクティブな状態は表示されません。
Matt Gaunt 2013年

@GauntFace、どのブラウザーを使用していますか?Chromeで、あなたの順序focusactive宣言は関係ありません。たとえばcolor:redand color:blue(その後、最後のものが勝つ)が互いに矛盾する場合にのみ問題になります。
Pacerier

これに基づく関連する質問と回答:stackoverflow.com/a/48597351/5587480。私の観点からは、非常に理解しやすい
ジョンcj

59
:active       Adds a style to an element that is activated
:focus        Adds a style to an element that has keyboard input focus
:hover        Adds a style to an element when you mouse over it
:lang         Adds a style to an element with a specific lang attribute
:link         Adds a style to an unvisited link
:visited      Adds a style to a visited link

出典:CSS疑似クラス


10
関連はありますが、これは質問の答えにはなりません
Gregor Weber

6
@GregorWeberそれは定義を示すことによって違いを明らかにします
KamilKiełczewski19年

1
あなたはおそらくこれを知っていますが、その順序でそれらを定義した場合visited、「訪問」が他の疑似クラスをオーバーライドするため、ホバーまたはクリックしてもリンクはスタイルを変更しません。LVHFAは、ほとんどの場合、ほとんどの人が使用したい順序です。含まれている理由がわからないlang...
Mentalist

22

4つのケースがあります。

  1. デフォルトでは、アクティブとフォーカスの両方がオフになっています。
  2. ときあなたは、タブを順番にフォーカス可能な要素、彼らが入ります:focus(アクティブなし)。
  3. フォーカスできない要素クリックすると、要素が表示されます:active(フォーカスなし)。
  4. フォーカス可能な要素クリックすると、要素が入ります:active:focus(アクティブで同時にフォーカスされます)。

例:

<div>
  I cannot be focused.
</div>

<div tabindex="0">
  I am focusable.
</div>

div:focus {
  background: green;
}

div:active {
  color: orange;
}

div:focus:active {
  font-weight: bold;
}

ページが両方読み込まれる場合は、ケース1です。タブを押すと、2番目のdivにフォーカスし、ケース2が表示されます。最初のdivをクリックすると、ケース3が表示されます。2番目のdivをクリックすると、ケース4が表示されます。 。


要素がフォーカス可能かどうかは別の問題です。ほとんどはデフォルトではありません。しかし、それは仮定しても安全です<a><input><textarea>デフォルトでフォーカス可能です。


要素がどのように持つこと:activeができるかを指摘していただきありがとうござい:focusます。それは私が他の答えが対処しなかったことで混乱したことの一つです。
B-Stewart

7

:focusは、要素が入力を受け入れることができるときです-入力ボックス内のカーソルまたはタブ付きのリンク。

:activeは、要素がユーザーによってアクティブ化されているとき-ユーザーがマウスボタンを押してから離すまでの時間です。


2
こんにちは!「現在クリック」の状態はありますか?ナビゲーションメニューに3つのリンクがあるとしましょう。現在、リンクが「オン」のときに特定の色を維持するにはどうすればよいでしょうか。ユーザーが現在いる場所を表示します。as:activeは、リンク(この場合)がクリックされている間のみ機能しますが、マウスボタンを離すと元に戻ります。
Kizer Yakuza 2013

0

アクティブは、ユーザーがそのポイントをアクティブにしたときです(マウスクリックのように、フィールドからフィールドへのタブを使用する場合、アクティブスタイルからの兆候はありません。クリックにはさらに時間が必要な場合があります。そのポイントを長押ししてください)。ポイントがアクティブになります。これを試して :

<style type="text/css">
  input { font-weight: normal; color: black; }
  input:focus { color: green; outline: 1px solid green; }
  input:active { color: red; outline: 1px solid red; }
</style>

<input type="text"/>
<input type="text"/>

-3

フォーカスはキーボード入力によってのみ指定できますが、要素はマウスまたはキーボードの両方でアクティブ化できます。

リンクに:focusを使用する場合、スタイルルールはキーボードのボタンを押した場合にのみ適用されます。


1
:focusそのように動作しません。ボタンをクリックしたため、現在入力しているテキスト領域にフォーカスがあります。また、クリックしてフォーカスを外し、再びフォーカスを戻すこともできます。すぐに、右側の[コメントを追加]ボタンをクリックしてフォーカスします。キーボード入力なしでこれらすべてがフォーカスを引き起こします。
ジョエルメロン

リンクに焦点を合わせることができない場合、それは単に、アンカーに配置するか、tabindex属性を追加しない限り、リンクに焦点を合わせることができないためです。ただし、divや入力などのDOM要素に焦点を合わせることができます。
Alex

-5

「フォーカス」を使用すると、キーボードユーザーはマウスユーザーがマウスでホバーしたときと同じ効果が得られます。Internet Explorerで同じ効果を得るには、「アクティブ」が必要です。

現実には、これらの状態はすべてのユーザーに対して期待どおりに機能しません。3つすべてのセレクターを使用しないと、物理的にマウスを使用できないキーボードのみのユーザーの多くにアクセシビリティの問題が発生します。#nomouseチャレンジ(nomouse dot org)にご参加ください。


1
:hoverと:focusは同じものではありません。:hoverは特定の状態で、:focusは特定の状態です。それらを同一視することは少し混乱し、誤解を招くものです。
Garry Polley

1
私はあなたの専門知識を疑っていません。:hoverと:activeは同じものではないことを指摘しようとしています。また、キーボードを使用する場合、:hoverが:activeとほぼ同じになるように単純に配置すると、Webとアクセシビリティの初心者にとって混乱を招きます。私は答えに感謝しますが、おそらくもう少し深さが役立つでしょうか?
Garry Polley、2015

もちろん同じではありません!ほぼ同じだとは言いませんでした。(もう一度私の投稿を読んでください。)同じタスクを実行するためにマウスを使用することとキーボードを使用することの違いについて話しています。両方のユーザーに同じエクスペリエンスを提供するには、それらすべてを使用する必要があると言っています。そうしないと、物理的にマウスを使用できないキーボードのみのユーザーは、ページのどこにタブで移動したかがわかりにくくなります。これにより、これらの人々がページをナビゲートする際のアクセシビリティの問題が発生します。
AMG
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.