Atualmente, as pessoas estão apenas usando transições CSS3 porque é muito mais fácil do que mexer com JS , o suporte ao navegador é razoavelmente bom e é apenas cosmético, portanto, não importa se não funciona.
Algo assim faz o trabalho:
a {
color:blue;
/* First we need to help some browsers along for this to work.
Just because a vendor prefix is there, doesn't mean it will
work in a browser made by that vendor either, it's just for
future-proofing purposes I guess. */
-o-transition:.5s;
-ms-transition:.5s;
-moz-transition:.5s;
-webkit-transition:.5s;
/* ...and now for the proper property */
transition:.5s;
}
a:hover { color:red; }
Você também pode fazer a transição de propriedades CSS específicas com diferentes horários e funções de atenuação, separando cada declaração com uma vírgula, da seguinte maneira:
a {
color:blue; background:white;
-o-transition:color .2s ease-out, background 1s ease-in;
-ms-transition:color .2s ease-out, background 1s ease-in;
-moz-transition:color .2s ease-out, background 1s ease-in;
-webkit-transition:color .2s ease-out, background 1s ease-in;
/* ...and now override with proper CSS property */
transition:color .2s ease-out, background 1s ease-in;
}
a:hover { color:red; background:yellow; }
Demonstração aqui