¿Por qué la pseudoclase de desplazamiento altera temporalmente la pseudoclase activa

l título básicamente lo dice tod

Supongo que tengo un elemento que quiero cambiar de color en:hover, pero al hacer clic, quiero que vuelva a su color original. Entonces, he intentado esto:

a:link, a:visited, a:active {
    background: red;
}
a:hover {
    background: green;
}

Como resulta, esto no funciona. Después de rascarse la cabeza, me di cuenta de que el:hoverl estado @ estaba anulando el:active estado. Esto se resolvió fácilmente con esto:

a:link, a:visited {
    background: green;
}
a:hover {
    background: red;
}
a:active {
    background: green;
}

(Podría combinar la primera regla con la tercera).

Aquí está el violín:http: //jsfiddle.net/V5FUy

Mi pregunta: ¿es este el comportamiento esperado? Por lo que yo entiendo, la:activel estado @ siempre debe anular el:hover estado, ya que el:active estadocas siempre va acompañado de la:hover estado

Respuestas a la pregunta(7)

Su respuesta a la pregunta