¿Qué pasa primero, events CSS o JS?

Si, por ejemplo, coloca un efecto de desplazamiento de CSS en un elemento y también coloca un evento JS mouseenter en él, ¿cuál ocurrirá primero? ¿Hay alguna variación con esto? ¿Puedes controlarlo de alguna manera? ¿Es posible obligarlos a ejecutar en un order particular?

¿cuál pasará primero?

Tenga en count que no existe tal cosa como un "evento CSS". Sin embargo, el comportamiento no está definido; podría considerar el cambio de CSS y el evento JS al mismo time. Las especificaciones relevantes CSS Selectors 4 , DOM 3 Events y HTML 5 señalan las similitudes entre el mouseenter y el mouseenter , pero no especifican un order. Se especifica el order del evento del mouse , pero no se refiere a las pseudo classs de acción del usuario de CSS.

¿Hay alguna variación con esto?

Sí, los browseres son libres de implementarlo de cualquier manera. Podrían cambiar el layout y volver a dibujar la página antes de activar los events JS, o no podrían. Sin embargo, no debería hacer mucha diferencia.

¿Es posible obligarlos a ejecutar en un order particular?

Personalmente, esperaría que el CSS se aplicara ya cuando se ejecute el controller de events JS. Incluso si aún no se ha calculado, al consultar los styles (por ejemplo, getComputedStyle(this) ) se realiza un getComputedStyle(this) CSS para que siempre obtenga los styles dynamics; consulte también ¿ Cuándo ocurre el reflujo en un entorno DOM? .

Pruébelo en http://jsfiddle.net/n4Z8H/ . Mientras que la mayoría de los browseres principales arrojarán el valor esperado ( rgb(0, 0, 255) , el azul :hover estilo de :hover ), los IE más antiguos no parecen funcionar.

Depende mucho de cómo funciona el browser, y no se debe confiar en él. La mayoría de los browseres deben ejecutar los dos casi a la vez. Si desea ejecutar uno antes / después del otro, simplemente controle el estilo de CSS mediante JavaScript, por ejemplo, en hover agregue una class y, al no desplazarse, elimine la class.

Aunque, si este es un problema real que tienes, probablemente estés haciendo algo mal.