214 votes

Quelle est la différence entre * et *|* en CSS ?

En CSS, * correspondra à n'importe quel élément.

Fréquemment, *|* est utilisé à la place de * pour correspondre à tous les éléments. Cette méthode est généralement utilisée à des fins de test.

Quelle est la différence entre * y *|* en CSS ?

1 votes

219voto

Harry Points 10265

Conformément à W3C Selector Spec :

Le sélecteur universel autorise un composant d'espace de nom facultatif. Il est utilisé comme suit :

ns|*
tous les éléments de l'espace de nom ns

*|*
tous les éléments

|*
tous les éléments sans espace de nom

*
si aucun espace de nom par défaut n'a été spécifié, ceci est équivalent à *|*. Sinon, c'est équivalent à ns|* où ns est l'espace de noms par défaut.

Donc, non. * y *|* ne sont pas toujours les mêmes. Si un espace de nom par défaut est fourni, alors * ne sélectionne que les éléments qui font partie de cet espace de nom.


Vous pouvez voir les différences à l'aide des deux extraits ci-dessous. Dans le premier, un espace de nom par défaut est défini et donc la balise * applique l'arrière-plan de couleur beige uniquement à l'élément qui fait partie de cet espace de nommage, tandis que le sélecteur *|* applique la bordure à tous les éléments.

@namespace "http://www.w3.org/2000/svg";

* {
  background: beige;
}
*|* {
  border: 1px solid;
}

<a href="#">This is some link</a>

<svg xmlns="http://www.w3.org/2000/svg">
  <a xlink:href="#">
    <text x="20" y="20">This is some link</text>
  </a>
</svg>

Dans l'extrait ci-dessous, aucun espace de nom par défaut n'est défini et donc les deux éléments * y *|* s'applique à tous les éléments et tous obtiennent donc à la fois le fond beige et la bordure noire. En d'autres termes, ils fonctionnent de la même manière lorsqu'aucun espace de nom par défaut n'est spécifié.

* {
  background: beige;
}
*|* {
  border: 1px solid;
}

<a href="#">This is some link</a>

<svg xmlns="http://www.w3.org/2000/svg">
  <a xlink:href="#">
    <text x="20" y="20">This is some link</text>
  </a>
</svg>

Comme le souligne BoltClock dans les commentaires ( 1 , 2 ), à l'origine, les espaces de noms ne s'appliquaient qu'aux langages basés sur XML tels que XHTML, SVG, etc. Mais selon les dernières spécifications, tous les éléments HTML (c'est-à-dire les éléments dans l'espace de noms HTML) ont un espace de noms de type http://www.w3.org/1999/xhtml . Firefox suit ce comportement et il est cohérent dans tous les agents utilisateurs HTML5. Vous pouvez trouver plus d'informations dans cette réponse .

4 votes

Les espaces de noms s'appliquent-ils uniquement au XHTML ou également au HTML ?

8 votes

@Flimm : Seulement les langages basés sur XML, comme XHTML et SVG. Mais notez que certains navigateurs, comme Firefox (pas sûr pour les autres), appliquent l'espace de noms XHTML même en text/html, pour les besoins de CSS. Voir par exemple jsfiddle.net/BoltClock/5ta6yvvc et pour plus d'informations cette réponse .

3 votes

Addendum - Le comportement de Firefox est conforme à la spécification, et est cohérent pour tous les agents utilisateurs HTML5. Tous les éléments HTML (c'est-à-dire les éléments de la classe Espace de nom HTML ) sont des espaces de noms pour http://www.w3.org/1999/xhtml

44voto

Daniel Higueras Points 1550

*|* représente le sélecteur de "tous les éléments de n'importe quel espace de nom". Selon au W3C le sélecteur est divisé en deux parties :

ns|E

Où ns est le espace de noms et E est l'élément. Par défaut, aucun espace de noms n'est déclaré. Donc, à moins qu'un espace de noms soit déclaré explicitement, *|* y * sélectionnera les mêmes éléments.

-4voto

KR Raja Points 11

En CSS, * correspondra à n'importe quel élément.

| est utilisé pour correspondre à la sélection éléments spécifiques . Les deux sont des sélecteurs utilisés pour nos tests

3 votes

Pouvez-vous fournir un exemple ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X