2010-08-31 4 views
46

Ho appena visto questo: *|*:link con Firebug. Sembra che lo stile predefinito sia Firefox, ma cosa significa "*|*"?Che cosa significa * | * questo significato nei CSS?

+7

Namespace. Non posso commentare con cognizione di causa più di quello http://ajaxian.com/archives/w3c-css-namespace-now-a-candidate-recommendation –

risposta

14

*|* è un namespace-qualified universal selector. Il primo * indica qualsiasi spazio dei nomi (incluso lo spazio dei nomi predefinito e la mancanza di uno spazio dei nomi) e il secondo * indica qualsiasi tipo di elemento.

Come accennato, il selettore *|*:link rappresenta qualsiasi elemento in qualsiasi spazio dei nomi che sia un collegamento ipertestuale non visitato (:link). Per essere chiari, il prefisso *| significa alcuni elementi in qualsiasi namespace, tra cui:

  • elementi nel namespace predefinito (ad esempio Valid)
  • elementi in qualsiasi altro spazio (es XUL a Firefox)
  • elementi che non sono in uno spazio

CSS has a module dedicated to namespace declarations.

Il tipo di documento determina quale tipo di elementi deve essere designato come ip erlinks:

  • In HTML e XHTML, questo è sempre un elemento a con un attributo href.

  • In XUL, credo che questo sia un elemento label.text-link con un attributo href.

Si noti che gli spazi dei nomi CSS sono utili solo quando si utilizza CSS per lo stile di documenti XML o altri tipi di documenti che definiscono lo spazio dei nomi in modo simile. Ciò include le pagine XHTML con spazi dei nomi XML personalizzati. In normali documenti HTML di solito non è necessario utilizzare i prefissi dei namespace nei selettori.

Detto questo, i browser dichiarano uno spazio dei nomi predefinito nei fogli di stile del programma utente corrispondente a XHTML per HTML/XHTML in ogni caso, per consentire l'interoperabilità con altri linguaggi basati su XML. Nel caso di Firefox, questo è ovviamente per lavorare sia con XHTML e XUL:

@namespace url(http://www.w3.org/1999/xhtml); /* set default namespace to HTML */ 
@namespace xul url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul); 

Dal momento che (X) elementi HTML vivono nello spazio dei nomi di default, selettori per corrispondenza solo questi elementi non hanno bisogno di essere namespace-prefisso. Questa è la ragione tecnica per cui, come ho detto sopra, non è necessario utilizzare i prefissi dei namespace nei selettori.

Si noti inoltre che se si desidera indirizzare qualsiasi tipo di elemento con un prefisso di namespace, lo * sul lato destro deve essere lì, quindi qualcosa come *|:link non sarebbe valido. Vedi this answer per i dettagli.