2011-10-17 11 views
10

Los W3.org CSS specification indica lo siguiente (el énfasis es mío):CSS: enlace y: pseudo-clases visitadas: ¿los navegadores web se adhieren a la especificación?

  • El: enlace pseudo-clase, se aplica para los enlaces que aún no han sido visitados.
  • La pseudo clase visitada se aplica una vez que el usuario ha visitado el enlace.

Los dos estados son mutuamente excluyentes.

Esto significa que cualquier estilo aplicado al selector :link solo se debe aplicar a los enlaces no visitados. Sin embargo, la única propiedad para la que esto es cierto parece ser color. La aplicación de tamaños de fuente, fondos, etc. al selector :link se dirige a todos los enlaces.

Hay una nota final de la página que dice:

Nota. Es posible que los autores de la hoja de estilo abusen de las pseudo-clases: link y: visited para determinar qué sitios ha visitado un usuario sin el consentimiento del usuario.

Los AU pueden, por lo tanto, tratar todos los enlaces como enlaces no visitados, o implementar otras medidas para preservar la privacidad del usuario mientras representan los enlaces visitados y no visitados de forma diferente.

Sin embargo, que yo sepa, esto solo se aplica a los estilos devueltos por Javascript, no a la visualización de los estilos en sí.

Here's a JS fiddle mostrando el problema. ¿Los navegadores se están desviando de las especificaciones aquí, o hay algo que me falta?

+0

+1 por lo que probablemente sea la primera pregunta que he hecho decentemente durante todo el día. –

Respuesta

2

La línea,

"UA pueden, por tanto, tratar a todos los enlaces como enlaces no visitados, o implementar otras medidas para preservar la privacidad del usuario al intentar mostrar los enlaces visitados y no visitados de manera diferente."

no es aplicable a los estilos devueltos por JavaScript única — es exactamente como suena. Esto significa que los navegadores pueden ignorar por completo ciertas propiedades en :visited (que es lo que está sucediendo en este caso). Como el font-size aumentaría el tamaño del elemento contenedor, permitir que la propiedad sea diferente para los enlaces :visited socavaría las otras medidas de seguridad implementadas por el navegador.

Un navegador podría optar por volver a calcular las dimensiones sin los estilos :visited aplicados, si así lo deseara. Naturalmente, esto es más trabajo y menos rendimiento que simplemente desautorizar ciertas propiedades.Está claro que la decisión se tomó en base al hecho de que no hay necesidad real de usar diferentes tamaños de fuente, fondos, etc. para diferenciar entre enlaces visitados y no visitados y, en general, la mayoría de los desarrolladores se limitarán a modificar el color ligeramente.

Así que no, no se están desviando de las especificaciones, están aprovechando una excepción permitida.

+1

Buena respuesta, no se me ocurrió que cambiar algunos estilos afectaría a otros elementos que no están enlazados en la página. Por cierto, parece que la mayoría de los navegadores aplican colores y colores de fondo, pero nada más. Opera, sin embargo, todavía aplica todos los estilos a los enlaces visitados. – DisgruntledGoat

+2

@DisgruntledGoat: hay una lectura decente en http://dbaron.org/mozilla/visited-privacy que explica los problemas y sugiere que solo permita unas pocas propiedades seleccionadas. Es probable que las propiedades permitidas varíen de un navegador a otro. –

0

Por lo que entiendo por la especificación, los navegadores tratan :link como a para evitar el abuso en el estado visitado. Por lo tanto, con o sin javascript, el estilo realmente aplicado a todos los enlaces es :link, y el :visited solo está sobrecargando el estilo cuando se lo visita.

+0

Pero la propiedad 'color' * no * está anulada por la clase': link', mientras que otros estilos sí lo están. Vea aquí: http://jsfiddle.net/SEjJg/3/ – DisgruntledGoat

Cuestiones relacionadas