2009-11-05 461 views

回答

282

:focus:active是两种不同的状态。

:focus表示当元素是当前选择用于接收来自输入设备(键盘)的输入的元素时的状态。 :active表示元素当前正由用户激活的状态。

让我们以一个例子来说明这一点。假设我们有一个<button><button>不会有任何状态开始。它只是存在。如果我们使用标签给“焦点”<button>,它现在进入其:focus状态。如果您然后单击(或按空间),然后您按钮进入其(: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, where my text just turns red 
 
</button>

编辑:jsfiddle

+2

还要注意,尽管它需要处于try catch中,因为IE8可能会抛出异常,但您可以通过使用名为'document.activeElement'的混淆名称来获取焦点元素。 而且请注意,较旧版本的浏览器可能会将:active和:focus以不同的方式对待。 'function activeElement(){ \t try { \t \t return document.activeElement;/*可以在IE8获得exeption */ \t}赶上(E){ \t} }' – robocat 2012-07-26 01:51:18

+5

我已经创建了示例的的jsfiddle这里:http://jsfiddle.net/NCwvj/ 测试中chrome(v24)我注意到,单击按钮只会调用':active'状态 – Xecure 2013-02-19 06:41:06

+2

Nit:如果没有:active:focus状态,则焦点和活动顺序会影响HTML按钮的状态 - Putting:活动状态之后:焦点,当我点击标签并点击空间时,我会得到主动变化。如果:焦点是最后一个,我永远不会看到活动状态。 – 2013-11-16 18:01:35

5

:焦点是当一个元素能够接受输入 - 光标在一个输入框或已被选中的链接上。

:active是元素被用户激活时 - 用户按下鼠标按钮然后释放它的时间。

+2

嗨!是否有“目前点击”的状态?假设在导航菜单中有三个链接,当链接处于“开启”状态时,如何让它保持某种颜色?向用户显示他目前的位置。 as:active只有在点击链接(在这种情况下)的情况下才起作用,但是在鼠标按钮释放后变回。 – 2013-08-11 13:55:39

39
: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 Pseudo-classes

+2

虽然相关,但并不回答问题 – 2017-04-19 14:07:09

-2

聚焦只能通过键盘输入来给出的,但是一个元件可以通过两个被激活,鼠标或键盘。

如果用户使用:专注于链接,则样式规则只适用于按下键盘上的按钮。

+1

':focus'不能像那样工作。我正在输入的textarea目前有焦点,因为我点击了一个按钮。它也可以通过点击并重新进入失去并恢复焦点。在短短的一秒钟内,我将通过点击右侧的Add Comment按钮来关注它。所有这些都没有导致焦点的键盘输入。 – 2014-07-24 21:24:02

+0

如果你不能关注链接,那只是因为链接不能集中,除非你把它放在一个锚点上,或者你添加一个tabindex属性。但是你可以关注DOM元素,比如div或input。 – Alex 2015-02-02 14:43:12

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"/> 
-4

使用“焦点”会给键盘用户鼠标用户鼠标悬停时获得的效果。需要“活动”才能在Internet Explorer中获得相同的效果。

现实情况是,这些国家不适用于所有用户。如果不使用全部三个选择器,则会为许多无法使用鼠标的键盘用户创建可访问性问题。我邀请你参加#nomouse挑战赛(nomouse dot org)。

+1

:悬停和:焦点不是一回事。 :悬停是特定的状态,并且:焦点是特定的状态。将它们等同起来有点令人困惑和误导。 – 2015-08-27 20:31:08

+1

我不怀疑你的专业知识。我试图指出:悬停和:主动不是一回事。而且,对于网络和可访问性较高的人员来说,如果将其放在以下位置,这会让人感到困惑:悬停大约等于:主动用于键盘使用。我很欣赏这个答案,但也许更深入一点会有所帮助? – 2015-08-31 13:36:28

+0

当然他们不是一回事!我没有说他们大致相同。 (请再次阅读我的帖子。)我正在谈论使用鼠标和使用键盘完成相同任务的区别。我在说你必须使用它们来为两组用户提供相同的体验。否则,只有使用键盘的用户身体上无法使用鼠标,将难以看到他们在页面上的标签位置。这会导致这些人在浏览页面时遇到可访问性问题。 – AMG 2015-09-01 18:34:41

11

有四种情况。

  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.当您按下选项卡中,将集中在第二个div,看看它表现出的情况下2。当您点击第一个div时,您会看到案例3.当您单击第二个div时,您会看到案例4.


元素是否可以聚焦是another question。大多数不是默认的。但是,默认情况下,可以安全地假设<a>,<input>,<textarea>是可以关注的。

+0

感谢您指出元素如何具有':active'而不是':focus'。这是我对其他答案没有解决的问题感到困惑的一件事。 – 2017-10-26 23:48:05