2011-10-17 11 views
10

I W3.org CSS specification stati i seguenti (sottolineatura mia):CSS: link e: pseudo-classi visitate: i web browser aderiscono alle specifiche?

  • L': Link pseudo-classe si applica per i collegamenti che non sono ancora stati visitati.
  • La pseudo-classe: visited si applica una volta che il collegamento è stato visitato dall'utente.

I due stati sono si escludono a vicenda.

Ciò significa che qualsiasi stile applicato al selettore :link deve essere applicato solo ai collegamenti non visitati. Tuttavia, l'unica proprietà per cui questo è true sembra essere color. L'applicazione di dimensioni carattere, sfondi e così via al selettore :link ha come target tutti i collegamenti.

C'è una nota più in basso nella pagina che indica:

Nota. È possibile che gli autori di fogli di stile abusino delle link: e delle pseudo-classi visitate per determinare quali siti un utente ha visitato senza il consenso dell'utente.

UAs può quindi considerare tutti i collegamenti come collegamenti non visitati o implementare altre misure per preservare la privacy dell'utente durante il rendering dei collegamenti visitati e non visitati in modo diverso.

Tuttavia, per quanto ne so, questo si applica solo agli stili restituiti da Javascript, non alla visualizzazione degli stili stessi.

Here's a JS fiddle mostrando il problema. I browser si stanno allontanando dalle specifiche qui o c'è qualcosa che mi manca?

+0

+1 per quella che è probabilmente la prima domanda giusta che ho visto tutto il giorno. –

risposta

2

La linea,

"I programmi utente possono quindi trattare tutti i link come non visitati, o implementare altre misure per preservare la privacy dell'utente durante il rendering visitati e collegamenti non visitati in modo diverso."

non è applicabile agli stili restituiti da JavaScript solo — è esattamente come sembra. Ciò significa che i browser possono semplicemente ignorare determinate proprietà su :visited interamente (che è ciò che accade in questo caso). Poiché lo font-size aumenterebbe la dimensione dell'elemento contenitore, consentendo alla proprietà di essere diversa per i collegamenti :visited si comprometterebbero le altre misure di sicurezza implementate dal browser.

Un browser potrebbe scegliere di ricalcolare le dimensioni senza gli stili :visited applicati, se lo desiderava. Naturalmente, questo è più lavoro e meno performante del semplice non consentire alcune proprietà.È chiaro che la decisione è stata presa sulla base del fatto che non vi è alcuna reale necessità di utilizzare dimensioni, sfondi e così via per differenziare i collegamenti visitati e quelli non visitati e, generalmente, la maggior parte degli sviluppatori si limiterà a modificare leggermente il colore.

Quindi no, non stanno deviando dalle specifiche, stanno approfittando di un'eccezione consentita.

+1

Buona risposta, non mi è venuto in mente che la modifica di alcuni stili avrebbe influenzato altri elementi non di collegamento nella pagina. Per inciso, sembra che la maggior parte dei browser applichi colori e colori di sfondo ma nient'altro. Opera, tuttavia, applica ancora tutti gli stili ai collegamenti visitati. – DisgruntledGoat

+2

@DisgruntledGoat: c'è una lettura decente su http://dbaron.org/mozilla/visited-privacy che spiega i problemi e suggerisce di consentire solo alcune proprietà selezionate. È probabile che le proprietà consentite varieranno da browser a browser. –

0

Da quello che ho capito dalle specifiche, i browser trattano lo :link come a per evitare l'abuso sullo stato visitato. Pertanto, con o senza javascript, lo stile effettivamente applicato a tutti i link è :link e lo :visited sta sovraccaricando lo stile solo se visitato.

+0

Ma la proprietà 'color' * non * viene sovrascritta dalla classe': link', mentre altri sono. Vedi qui: http://jsfiddle.net/SEjJg/3/ – DisgruntledGoat

Problemi correlati