Que signifie * | * en CSS?

Je viens de voir ceci: *|*:link avec Firebug. Il semble y avoir un style par défaut ajouté par Firefox, mais que signifie *|* ?

Cela signifie “tous les éléments de tous les espaces de noms qui sont :link “.

Plus d’informations sur les sélecteurs universels et les espaces de noms.

*|* est un sélecteur universel qualifié par un espace de noms . Le premier * signifie n’importe quel espace de noms (y compris l’espace de nommage par défaut et l’absence d’un espace de noms), et le second * signifie n’importe quel type d’élément.

Comme mentionné, le sélecteur *|*:link représente tout élément de tout espace de noms qui est un hyperlien non visité ( :link ). Pour être clair, le *| préfixe signifie certains éléments dans un espace de nom, y compris:

  • Éléments dans l’espace de noms par défaut (par exemple XHTML)
  • Eléments dans tout autre espace de noms (par exemple XUL dans Firefox)
  • Éléments qui ne sont pas dans un espace de noms

CSS a un module dédié aux déclarations d’espaces de noms.

Le type de document détermine le type d’éléments à désigner comme hyperliens:

  • En HTML et XHTML, il s’agit toujours d’ a élément avec un atsortingbut href .

  • En XUL, je crois que c’est un élément label.text-link avec un atsortingbut href .

Notez que les espaces de noms CSS ne sont utiles que lors de l’utilisation de CSS pour styliser des documents XML ou d’autres types de documents définissant des espaces de noms de la même manière. Cela inclut les pages XHTML avec des espaces de noms XML personnalisés. Dans les documents HTML classiques, il n’est généralement pas nécessaire d’utiliser les préfixes d’espaces de noms dans les sélecteurs.

Cela dit, les navigateurs déclarent un espace de noms par défaut dans leurs feuilles de style d’agent utilisateur, qui correspond de toute façon à XHTML pour HTML / XHTML, pour permettre l’interopérabilité avec d’autres langages basés sur XML. Dans le cas de Firefox, il s’agit évidemment de travailler avec XHTML et 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); 

Étant donné que les éléments (X) HTML vivent dans l’espace de noms par défaut, les sélecteurs correspondant uniquement à ces éléments n’ont pas besoin d’être préfixés par un espace de noms. C’est la raison technique pour laquelle, comme je l’ai mentionné ci-dessus, il n’est pas nécessaire d’utiliser des préfixes d’espace de noms dans les sélecteurs.

Notez également que si vous voulez cibler un type d’élément avec un préfixe d’espace de noms, le * à droite doit être présent, donc quelque chose comme *|:link serait invalide. Voir cette réponse pour plus de détails.