Raphael a écrit :
Effectivement, en prenant l'élément <p> de façon isolée, tu as entièrement raison : tout porte à croire que <p> est classé dans les entités %inline, mais de rendu "block".
Ah, il y a des confusions qui ont la vie dure.
Bon, pour commencer le coup de %inline et %block ce sont des raccourcis des DTD HTML4. C'est comme si je développe une application, je crée une varialbe "block" et une variable "inline" (et puis aussi une "preformated" et une "choucroute") pour des besoins internes, et là on s'amuse à analyser mon application pour y trouver une signification profonde et le sens de l'univers. Raté, les "%block;" et autre "%tartiflette;" ne sont qu'un mécanisme formel.
Je conseillerais bien d'apprendre à lire les DTD, mais c'est un mécanisme vieillot abandonné par HTML5 (ouf), donc c'est un peu inutile.
Ensuite, les notions de "block-level" et "text-level" sont des classifications données par HTML4 qui n'ont rien d'absolu. C'est à la fois un raccourci pédagogique, une manière d'organiser un peu les quelques 80 éléments HTML4, et une indication du rendu souhaité pour les navigateurs. En ce qui concerne les indications de rendu:
- il y a plein de cas particuliers définis par la spec (les formulaires, les tableaux...) qui ne répondent pas à ces catégories;
- c'est de toute manière en grande partie obsolète suite à la publication quelques semaines plus tard de CSS2 (propriété
display qui permet une gestion plus fine et sépare le mode de rendu visuel de la définition de l'élément HTML4).
Raphael a écrit :
si <p> est un %inline
P ne fait pas partie du groupe "%inline;", mais du groupe "%block;":
<!ENTITY % block
"P | %heading; | %list; | %preformatted; | DL | DIV | NOSCRIPT |
BLOCKQUOTE | FORM | HR | TABLE | FIELDSET | ADDRESS">
(Et comme déjà dit on s'en fiche, ça n'a pas d'importance ces machins là.)
Raphael a écrit :
Au final, <p> reste toujours aussi énigmatique...
Non, P n'est pas énigmatique. P est un élément HTML4, défini par:
- Du texte dans la spécification qui dit qu'il faut l'utiliser pour tel ou tel type de contenu (non vérifiable par une machine).
- Une définition dans la DTD qui liste une liste très précise d'éléments que P peut contenir, à savoir #PCDATA, TT, I, B, BIG, SMALL, EM, STRONG, DFN, CODE, SAMP, KBD, VAR, CITE, ABBR, ACRONYM, A, IMG, OBJECT, BR, SCRIPT, MAP, Q, SUB, SUP, SPAN, BDO, INPUT, SELECT, TEXTAREA, LABEL, BUTTON. Liste exhaustive.
- Une liste d'éléments qui peuvent contenir P (on peut déterminer cette liste par analyse de la DTD... pas trop le temps de compiler cette liste manuellement).
- Une liste d'attributs valides pour l'élément P, là encore listés dans la DTD.
Enfin, dire que P est un élément %inline est une double bêtise, car 1) la notion d'élément "%inline" n'existe pas, et 2) le "%inline;" dans la DTD désigne le groupe d'éléments que P peut contenir, pas le groupe auquel P appartient (qui se nomme "%block;", qui est un sous-ensemble de "%flow;").
Mon conseil: oubliez complètement la DTD, qui apparemment vous induit plus en erreur qu'elle ne vous aide. Et, puisqu'on y est, oubliez aussi complètement les notions de "block-level" et "text-level" de HTML4, qui sont périmées (yoohoo).
Quand on se pose des questions sur le type de rendu d'un élément HTML, il est plus intéressant de se demander:
1. Pour quel type de contenu c'est prévu, et par extension quels sont les éléments que je peux utiliser dedans de manière valide?
2. Quelle est, en CSS, la valeur de
display par défaut pour cet élément dans les navigateurs?
En passant, il faudra que je réécrive complètement l'article bizarre qu'on avait publié sur block/inline, je ne jette la pierre à personne (surtout que j'avais participé à sa rédaction
) mais c'est vraiment pas bon.