48 votes

Que fait "<html xmlns="http://www.w3.org/1999/xhtml">" ?

Je n'arrive pas à croire ce qui se passe sur mon site web. Quand j'ajoute cette ligne :

<html xmlns="http://www.w3.org/1999/xhtml">
<!DOCTYPE html>
<html>
 <head>

Tout fonctionne bien. Et quand je ne le fais pas, le CSS "s'embrouille", tout devient différent et la mise en page devient "moche".

Comment cette ligne peut-elle résoudre tous les problèmes ? !

6 votes

Avez-vous un doctype valide dans la première ligne de votre HTML ?

1 votes

Vous êtes sûr que ce n'est pas la ligne au-dessus de celui qui fait la différence ? Avec quel navigateur faites-vous vos tests ?

0 votes

@Dominic Barnes : mes premières lignes sont : <html xmlns="http://www.w3.org/1999/xhtml"> <!DOCTYPE html> <html> <head>

93voto

Richard JP Le Guen Points 13306

Vous mélangez HTML con XHTML .

Habituellement, un <!DOCTYPE> est utilisée pour distinguer les versions des langages HTML (dans ce cas, HTML ou XHTML).

Les différents langages de balisage se comportent différemment. Mon exemple préféré est height:100% . Regardez ce qui suit dans un navigateur :

XHTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <style type="text/css">
    table { height:100%;background:yellow; }
  </style>
</head>
<body>
  <table>
    <tbody>
      <tr><td>How tall is this?</td></tr>
    </tbody>
  </table>
</body>
</html>

... et comparez-le à ce qui suit : (notez l'absence manifeste d'une <!DOCTYPE> déclaration)

HTML (mode bizarrerie)

<html>
<head>
  <style type="text/css">
    table { height:100%;background:yellow; }
  </style>
</head>
<body>
  <table>
    <tbody>
      <tr><td>How tall is this?</td></tr>
    </tbody>
  </table>
</body>
</html>

Vous remarquerez que la hauteur du tableau est radicalement différente, et que la seule différence entre les deux documents est le type de balisage !

C'est bien... maintenant, qu'est-ce que <html xmlns="http://www.w3.org/1999/xhtml"> faire ?

Mais cela ne répond pas à votre question. Techniquement, le xmlns est utilisé par l'élément Root d'un document XHTML : (selon la norme Wikipedia )

L'élément Root d'un document XHTML doit être html et doit contenir un xmlns pour l'associer à l'espace de noms XHTML.

Vous voyez, il est important de comprendre que le XHTML n'est pas du HTML mais XML - une créature très différente. (ok, une sorte de créature différente) La xmlns est l'une des choses dont le document a besoin pour être un XML valide. Pourquoi ? Parce que quelqu'un travaillant sur la norme l'a dit ;) (vous pouvez en savoir plus sur Espaces de noms XML sur Wikipédia mais j'omets cette information parce qu'elle n'est pas vraiment pertinente pour votre question !)

Mais alors pourquoi <html xmlns="http://www.w3.org/1999/xhtml"> réparer le CSS ?

Si vous structurez votre document de la manière suivante... (comme vous le suggérez dans votre commentaire )

<html xmlns="http://www.w3.org/1999/xhtml">
<!DOCTYPE html>
<html>
<head>
[...]

... corrige votre document, cela m'amène à penser que vous ne connaissez pas grand-chose aux CSS et au HTML (sans vouloir vous offenser !) et que la vérité est que... sans <html xmlns="http://www.w3.org/1999/xhtml"> il se comporte normalement et avec <html xmlns="http://www.w3.org/1999/xhtml"> ce n'est pas le cas - et tu as juste pensez à il l'est, parce que vous avez l'habitude d'écrire du HTML invalide et donc de travailler en mode bizarrerie .

L'exemple ci-dessus que j'ai fourni est un exemple de ce même problème ; la plupart des gens pensent que height:100% devrait aboutir à la hauteur de la <table> étant la fenêtre entière, et que le DOCTYPE casse en fait leur CSS... mais ce n'est pas vraiment le cas ; plutôt, ils ne comprennent pas qu'ils doivent ajouter une balise html, body { height:100%; } CSS pour obtenir l'effet désiré.

0 votes

"and thus working in quirks mode" - Je pense également que c'est le cas. Comme je l'ai dit dans mon commentaire, "If so, it's umm.. not good." .

4 votes

C'est une brave tentative d'explication, mais un peu confuse. Lorsque vous discutez de la question de la hauteur:100%, il serait préférable de ne pas tenir compte du XHTML, puisque seul le DOCTYPE (essentiellement sa présence ou son absence) est pertinent, et non la syntaxe HTML ou XHTML. Expliquez ensuite que l'espace de noms est une propriété du XHTML séparément.

0 votes

Votre HTML n'a pas de doctype et vous sous-entendez une mise en page sous forme de tableau.

28voto

tereško Points 32847

C'est un espace de nom XML. Il est nécessaire lorsque vous utilisez les doctypes XHTML 1.0 ou 1.1 ou les mimetypes application/xhtml+xml.

Vous devriez utiliser le doctype HTML5, alors vous n'en avez pas besoin pour text/html. Il vaut mieux commencer par un modèle comme celui-ci :

<!DOCTYPE html>
<html>
    <head>
        <meta charset=utf-8 />
        <title>domcument title</title>
        <link rel="stylesheet" href="http://stackoverflow.com/stylesheet.css" type="text/css" />
    </head>
    <body>
            <!-- your html content -->
            <script src="/script.js"></script>
    </body>
</html>

Lorsque vous avez mis en place votre Doctype - faites et validez vous html et votre css .
Cela permet généralement d'éviter les problèmes de mise en page.

0 votes

J'aime mieux cette réponse. Courte et simple.

8voto

Boris Zbarsky Points 22158

Il semble que votre site comporte des CSS ou des JS qui dépendent du fonctionnement en mode "quirks". C'est pourquoi vous avez besoin de déchets au-dessus de votre doctype pour obtenir un rendu "correct". Je vous suggère de supprimer ces déchets et de corriger vos CSS+JS pour qu'ils fonctionnent en mode standard ; vous vous épargnerez bien des soucis à long terme.

0voto

nemesisfixx Points 2447
The namespace name http://www.w3.org/1999/xhtml 
is intended for use in various specifications such as:

Recommendations:

    XHTML™ 1.0: The Extensible HyperText Markup Language
    XHTML Modularization
    XHTML 1.1
    XHTML Basic
    XHTML Print
    XHTML+RDFa

Vérifiez ici pour plus de détails

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