2009-11-05 13 views

Respuesta

282

:focus y :active son dos estados diferentes.

:focus representa el estado cuando el elemento es el elemento actualmente seleccionado para recibir la entrada de los dispositivos de entrada (teclado). :active representa el estado cuando el elemento está siendo activado por el usuario.

Pongamos esto en perspectiva con un ejemplo. Digamos que tenemos un <button>. El <button> no tendrá ningún estado para comenzar. Simplemente existe. Si usamos Tab para dar "foco" al <button>, ahora entra en su estado :focus. Si luego hace clic (o presiona espacio), luego hace que el botón ingrese su estado (:active).

En esa nota, cuando haces clic en un elemento, le das el foco, que también cultiva la ilusión de que :focus y :active son lo mismo. No son lo mismo. Al hacer clic, el botón está en estado :focus:active.

Un ejemplo:

<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>

edit: jsfiddle

+2

También tenga en cuenta que puede obtener el elemento centrado utilizando la propiedad denominada 'document.activeElement', aunque debe estar en una captura de prueba porque IE8 puede lanzar una excepción. Y tenga en cuenta que las versiones anteriores de los navegadores pueden tratar: activo y: centrarse de manera diferente. 'function activeElement() { \t try { \t \t return document.activeElement;/* Se puede obtener excepcion en IE8 */ \t} catch (e) {} \t } ' – robocat

+5

He creado un jsFiddle de tu ejemplo aquí: http://jsfiddle.net/NCwvj/ Las pruebas en chrome (v24) Me he dado cuenta de que al hacer clic en el botón solo se invoca el estado ': active' – Xecure

+2

Nit: el orden de foco y activo afecta el estado de un botón HTML si no hay: activo: estado de enfoque - Putting: estado activo after: focus, recibo los cambios activos cuando toco la pestaña y presiono el espacio. Si: el foco es el último, nunca veo el estado activo. –

5

: foco es cuando un elemento puede aceptar entrada: el cursor en un cuadro de entrada o en un enlace al que se ha asignado una pestaña.

: activo es cuando un elemento está siendo activado por un usuario - el tiempo entre cuando un usuario presiona un botón del mouse y luego lo libera.

+2

¡Hola! ¿Hay un estado para "actualmente hecho clic"? Digamos que hay tres enlaces en el menú de navegación, ¿cómo consigues mantener un cierto color cuando actualmente está "conectado" al enlace? para mostrar al usuario dónde se encuentra actualmente. as: active solo funciona siempre que se haga clic en el enlace (en este caso), pero vuelve a cambiar en el botón del mouse. –

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 

Fuente: CSS Pseudo-classes

+2

Mientras está relacionado, esto no responde a la pregunta –

-2

Focus sólo puede ser dada por la entrada de teclado, sino un elemento puede ser activado por tanto, un ratón o un teclado.

Si se utiliza: centrarse en un enlace, la regla de estilo solo se aplicaría al presionar un botón en el teclado.

+1

': focus' no funciona así. El área de texto en el que estoy escribiendo actualmente tiene foco porque hice clic en un botón.También puede perder y restaurar el foco haciendo clic fuera de él y volviendo a él. En solo un segundo, centraré el botón Agregar comentario a la derecha haciendo clic en él. Todo esto sin la entrada de teclado que causa el foco. –

+0

Si no puede centrarse en un enlace, es simplemente porque un enlace no se puede enfocar a menos que lo fije en un ancla, o agregue un atributo tabindex. Pero puedes enfocar elementos DOM como divs o inputs. – Alex

0

Activo es cuando el usuario activa ese punto (Al igual que al hacer clic en el mouse, si usamos tabulación de campo a campo no hay ningún signo del estilo activo. Tal vez haga clic necesite más tiempo, simplemente mantenga presionada la tecla en ese punto), el enfoque se produce después de que el punto está activado. Prueba esto:

<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

El uso de "enfoque" dará a los usuarios de teclado el mismo efecto que los usuarios de ratón se obtiene cuando se ciernen con un ratón. "Activo" es necesario para obtener el mismo efecto en Internet Explorer.

La realidad es que estos estados no funcionan como deberían para todos los usuarios. Si no se utilizan los tres selectores, se crean problemas de accesibilidad para muchos usuarios que solo usan teclados y que no pueden usar el mouse físicamente. Los invito a tomar el desafío #nomouse (nomouse dot org).

+1

: hover y: focus no son lo mismo. : el vuelo estacionario es un estado específico y: el foco es un estado específico. Es un poco confuso y engañoso igualarlos. –

+1

No estoy dudando de su experiencia. Estoy tratando de señalar que: hover y: active no son lo mismo. Y es confuso para las personas más nuevas de la web y la accesibilidad cuando se presenta de la siguiente manera: el desplazamiento es aproximadamente igual a: activo para el uso del teclado. Agradezco la respuesta, pero tal vez un poco más de profundidad ayudaría? –

+0

¡Por supuesto que no son la misma cosa! No dije que eran aproximadamente lo mismo. (Por favor, lea mis publicaciones de nuevo.) Estoy hablando de la diferencia entre usar un mouse y usar un teclado para realizar la misma tarea. Estoy diciendo que debes usarlos todos para dar a los dos grupos de usuarios la misma experiencia. De lo contrario, los usuarios que solo usan el teclado y que no pueden usar físicamente un mouse tendrán dificultades para ver en qué página se han insertado las pestañas. Esto crea un problema de accesibilidad para estas personas al navegar por la página. – AMG

11

Hay cuatro casos.

  1. Por defecto, active y focus están desactivados.
  2. Cuando pestaña para desplazarse por elementos enfocables, entrarán en :focus (sin activo).
  3. Cuando clic en un elemento de no centrada, entra :active (sin foco).
  4. Cuando haga clic en en un elemento enfocable ingrese :active:focus (activo y enfoque simultáneamente).

Ejemplo:

<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; 
} 

Cuando se carga la página ambos son en el caso 1. Cuando se pulsa la pestaña que se centrará la segunda div y ver que exhiben el caso 2. Cuando haces clic en el primer div, ves el caso 3. Cuando haces clic en el segundo div, ves el caso 4.


Si un elemento es enfocable o no es another question. La mayoría no son por defecto. Pero es seguro asumir que <a>, <input>, <textarea> son enfocables por defecto.

+0

Gracias por señalar cómo los elementos pueden tener ': active' pero no': focus'. Eso es algo de lo que estaba confundido y que las otras respuestas no abordaron. –

Cuestiones relacionadas