:focus和:active有什么区别?


Answers:


413

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

  • :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中,但您可以使用名称混乱的属性来获取focused元素。并且请注意,较旧版本的浏览器可能会不同地对待:active和:focus。 function activeElement() { try { return document.activeElement; /* can get exeption in IE8 */ } catch(e) { } }
robocat 2012年

6
我在这里创建了您的示例的JSFiddle:jsfiddle.net/NCwvj 在chrome(v24)中进行测试我注意到单击按钮仅会调用:active状态
Zaki Aziz

3
Nit:如果没有:active:focus状态,那么焦点和活动的顺序会影响HTML按钮的状态-将:active状态放在:focus之后,当我按下Tab键并按下空格时,我会得到活动的更改。如果:focus是最后一个,我永远也看不到活动状态。
Matt Gaunt

@GauntFace,您使用的是什么浏览器?在Chrome上,您focusactive声明的顺序无关紧要。只有当他们彼此矛盾时才重要,例如color:redcolor:blue(然后最后一个获胜)。
Pacerier 2014年

相关的问题和答案,基于此:stackoverflow.com/a/48597351/5587480。以我的观点,非常容易理解
john 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……
心理学家

22

有四种情况。

  1. 默认情况下,活动和焦点均处于关闭状态。
  2. 当您按Tab键浏览可聚焦元素时,它们将进入: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。当您按下Tab键时,您将专注于第二个div并看到案例2。当您单击第一个div时,您会看到案例3。单击第二个div时,您就会看到案例4。 。


一个元素是否可聚焦是另一个问题。大多数不是默认设置。但是,它是安全的假设<a><input><textarea>在默认情况下可获得焦点。


感谢您指出元素如何具有:active但没有:focus。关于其他答案未解决,这是我感到困惑的一件事。
B-Stewart

6

:focus是当元素能够接受输入时-输入框中的光标或已制表到的链接。

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


2
嗨!是否存在“当前点击”状态?可以说,导航菜单中有三个链接,当当前“位于”链接上时,如何使其保持某种颜色?向用户显示他当前所在的位置。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,则样式规则仅在按下键盘上的botton时适用。


1
:focus不能那样工作。我输入的文本区域当前具有焦点,因为我单击了一个按钮。单击它,然后再次单击它,也可能丢失并恢复焦点。在短短的一秒钟内,我将通过单击它来突出显示右侧的“添加评论”按钮。所有这些都无需键盘输入即可引起焦点。
乔尔·梅隆

如果您不能将焦点放在链接上,那是因为除非将链接放在锚点上或添加tabindex属性,否则链接将不会被聚焦。但是您可以集中关注div或input之类的DOM元素。
Alex

-5

使用“焦点”将使键盘用户获得与鼠标悬停时相同的效果。为了在Internet Explorer中获得相同的效果,需要“活动”。

现实情况是,这些状态无法像所有用户那样正常工作。如果不使用所有三个选择器,则会为许多无法使用鼠标的纯键盘用户带来可访问性问题。我邀请您参加#nomouse挑战赛(nomouse dot org)。


1
:hover和:focus不是同一件事。:hover是特定状态,:focus是特定状态。将它们等同起来有点混乱和误导。
Garry Polley 2015年

1
我毫不怀疑您的专业知识。我试图指出:hover和:active不是同一件事。对于刚接触过Web和可访问性的人们来说,这很令人困惑,因为:hover大约等于:active可以使键盘使用。我很感谢您的回答,但也许再深入一点会有帮助?
Garry Polley,2015年

当然,它们不是同一回事!我没有说他们大致相同。(请再次阅读我的文章。)我在谈论使用鼠标和键盘来完成相同任务的区别。我是说,您必须使用所有这些功能,才能为两组用户提供相同的体验。否则,只有键盘无法使用鼠标的用户将很难查看他们在页面上的跳转位置。这为这些人在浏览页面时造成了可访问性问题。
AMG
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.