web-dev-qa-db-fra.com

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

Je ne peux 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, CSS "décoiffe", tout devient différent et la mise en page devient "moche".

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

43
good_evening

Vous mélangez HTML avec XHTML .

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

Différents langages de balisage se comporteront 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 le manque flagrant de <!DOCTYPE> déclaration)

HTML (mode quirks)

<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 de la table est radicalement différente et que la seule différence entre les 2 documents est le type de balise!

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

Cela ne répond pas à votre question cependant. Techniquement, l'attribut xmlns est utilisé par l'élément racine d'un document XHTML: (selon Wikipedia )

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

Vous voyez, il est important de comprendre que XHTML n'est pas HTML, mais XML - une créature très différente. (ok, une sorte de créature différente) L'attribut xmlns n'est qu'un des éléments pour lesquels le document doit être un fichier 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 Wikipedia mais j'omets cette information parce qu'elle n'est pas pertinente pour votre question!)

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

Si vous structurez votre document comme suit ... (comme vous le suggérez dans votre commentaire )

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

... corrige votre document, cela me porte à croire que vous en savez peu sur CSS et HTML (aucune infraction!) 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 - et vous pensez simplement , car vous avez l'habitude d'écrire du HTML non valide et de travailler ainsi dans mode quirks .

L'exemple ci-dessus que j'ai fourni est un exemple de ce même problème; la plupart des gens pensent height:100% devrait aboutir à la hauteur de la <table> étant la fenêtre entière et que le DOCTYPE est en train de casser leur code CSS ... mais ce n'est pas vraiment le cas; au lieu de cela, ils ne comprennent tout simplement pas qu'ils doivent ajouter un html, body { height:100%; } Règle CSS pour obtenir l’effet souhaité.

81
Richard JP Le Guen

C'est un espace de noms XML. Il est requis lorsque vous utilisez des doctypes XHTML 1.0 ou 1.1 ou des types mimétriques application/xhtml + xml.

Vous devriez utiliser un doctype HTML5, vous n'en avez donc pas besoin pour text/html. Mieux vaut partir d'un modèle comme celui-ci:

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



Lorsque vous avez défini votre type de document, faites-le et validez-le html et votre css .
Cela vous évitera généralement des problèmes de mise en page.

23
tereško

On dirait que votre site a CSS ou JS qui dépend de son exécution en mode quirks. C'est pourquoi vous avez besoin de garbage au-dessus de votre doctype pour rendre "correctement". Je suggère de supprimer ces déchets, puis de corriger votre CSS + JS pour qu’il fonctionne réellement en mode standard; vous vous épargnerez beaucoup de douleur à long terme.

7
Boris Zbarsky
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

0
nemesisfixx