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é.
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>
0 votes
@hey : Alors laisse-moi résumer : si tes deux premières lignes sont
<html xmlns="http://www.w3.org/1999/xhtml"> <!DOCTYPE html>
- alors tout fonctionne bien. Mais si vos deux premières lignes sont<!DOCTYPE html> <html>
alors tout est cassé ? Est-ce que c'est le cas ? Si oui, c'est humm pas bon.0 votes
Je pense que ce qui se passait réellement était ceci : Le <!DOCTYPE html> spécifiait HTML 5 et le document n'est pas HTML 5. L'ajout de la balise HTML au-dessus n'a pas permis de le traiter comme du XHTML, mais comme du HTML 4 (Quirks Mode). La ligne xmlns a été ignorée, tout comme le doctype HTML 5 et l'élément <html> supplémentaire.
0 votes
@Oriol : Je rouvre cette question car je pense qu'une réponse spécifique à HTML/XHTML serait utile (même si c'est juste pour dire "il permet au balisage XHTML 1.0/1.1 de valider, et ne fait rien en HTML5 et vous pouvez le laisser hors d'un document HTML5").