Bon, on efface tout, et on recommence à la base:
Raphael a écrit :
Mais il faut trouver une définition stricte de ce qu'on appelle "sélecteur universel" et ce qu'il englobe.
http://www.w3.org/TR/CSS21/selector.html#universal-selector :
spec CSS a écrit :
The universal selector, written "*", matches the name of any element type. It matches any single element in the document tree.
If the universal selector is not the only component of a simple selector, the "*" may be omitted
Le sélecteur universel est donc effectivement un jocker qui représente n'importe quel élément de l'arbre du document.
-
*.brocoli signifie donc
n'importe quel élément de classe brocoli. Sans le savoir peut-être, vous l'utilisez quotidiennement, mais sous sa forme abrégée avec ommission du sélecteur universel selon la règle ci-dessus : vous écrivez simplement
.brocoli.
-
html * signifie
n'importe quel élément descendant de l'élément html.
-
* html signifie
l'élément html descendant de n 'importe quel élément. Syntaxe parfaitement valide
en CSS, mais qui vise un cas de structure (X)HTML qui n'existe (normalement) pas, et qui serait, lui, invalide
du point de vue des normes (X)HTML
- au passage, une variante:
* * body signifie
l'élément body descendant de n 'importe quel élément lui même descendant etc.. A nouveau une syntaxe parfaitement valide
en CSS, qui vise un cas de structure (X)HTML qui n'existe (normalement) pas, et qui etc.
- et encore une autre variante:
* html body : idem.
Il n'y a aucun problème de validité CSS avec le hack du sélecteur CSS : là où il y aurait invalidité, ce n'est pas en CSS, mais en (X)HTML si le document avait la structure visée par le hack, ce qui n'est pas le cas (c'est le but du jeu, justement).
Le sélecteur
html html serait lui aussi parfaitement valide en CSS : c'est la structure HTML qu'il vise qui serait invalide en HTML4.01, en XHTML1.0 etc. Ne mélangez pas validité CSS et validité (X)HTML.
Ce hack
* html (et ses variantes) est donc plutôt un
bon hack, puisqu'il n'invalide pas la CSS. En ce sens, il est identique au hack de !important et à celui de
html>body, et nettement meilleur que le hack de l'underscore par exemple. La différence avec
html>body, par exemple, c'est qu'il repose sur une syntaxe valide mais aberrante.
Mais, et c'était l'objet de mon précédent message :
- c'est un hack : je ne vois pas comment qualifier autrement une syntaxe aberrante, car elle vise une structure HTML qui ne peut pas exister, tout en étant interprétée différement par IE.
- un hack fragile, car il exploite un bug d'IE (qui a une curieuse compréhension de l'arbre du document ou du sélecteur placé dans ces cas de figure) pour en corriger un autre (le problème de positionnement, de flottant, de modèle de boîte... pour lequel vous utilisez ce hack).
Et selon moi, un hack très fragile, car le bug qui le génère est grossier.
Modifié par Laurent Denis (04 Jul 2005 - 06:12)