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?!
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:
<!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>
<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!
<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 attributxmlns
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!)
<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é.
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.
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.
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