Ответ 1
Обычно декларация <!DOCTYPE>
используется для различения версий HTML файлов lanaguages (в данном случае HTML или XHTML).
Различные языки разметки будут вести себя по-разному. Мой любимый пример: height:100%
. Посмотрите в браузере следующее:
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>
... и сравните его со следующим: (обратите внимание на заметный недостаток объявления <!DOCTYPE>
)
HTML (режим 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>
Вы заметите, что высота таблицы сильно отличается, и единственное различие между двумя документами - это тип разметки!
Что приятно... теперь, что делает <html xmlns="http://www.w3.org/1999/xhtml">
?
Это не отвечает на ваш вопрос. Технически атрибут xmlns
используется корневым элементом документа XHTML: (согласно Wikipedia)
Корневой элемент документа XHTML должен быть html и должен содержать атрибут xmlns, чтобы связать его с пространством имен XHTML.
Понимаете, важно понять, что XHTML не HTML, а XML - совсем другое существо. (ok, своего рода другое существо) Атрибут xmlns
- это лишь одна из тех вещей, которые документ должен быть достоверным XML. Зачем? Потому что кто-то, работающий над стандартом, сказал так;) (вы можете больше узнать о пространствах имен XML в Википедии, но я опускаю эту информацию, потому что это на самом деле не имеет отношения к вашему вопросу!)
Но тогда почему <html xmlns="http://www.w3.org/1999/xhtml">
исправление CSS?
Если вы структурируете свой документ так... (как вы предлагаете в ваш комментарий)
<html xmlns="http://www.w3.org/1999/xhtml">
<!DOCTYPE html>
<html>
<head>
[...]
... фиксирует ваш документ, это заставляет меня поверить, что вы мало что знаете о CSS и HTML (без обид!), и правда состоит в том, что без <html xmlns="http://www.w3.org/1999/xhtml">
он ведет себя нормально и с <html xmlns="http://www.w3.org/1999/xhtml">
Это не так, и вы просто думаете, что это так, потому что вы привыкли писать недопустимый HTML и, таким образом, работаете в режиме quirks.
Приведенный выше пример я привел пример этой же проблемы; большинство людей думают, что height:100%
должно приводить к тому, что высота <table>
является всем окном и что DOCTYPE
фактически нарушает их CSS... но это не совсем так; скорее, они просто не понимают, что им нужно добавить правило CSS html, body { height:100%; }
для достижения желаемого эффекта.