Подтвердить что ты не робот

Что делает <html xmlns = "http://www.w3.org/1999/xhtml" > "делать?

Я не могу поверить, что происходит на моем сайте. Когда я добавляю эту строку:

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

Все работает отлично. И когда я этого не делаю, CSS "беспорядок", все становится по-другому, а макет становится "уродливым".

Как эта строка может решить все проблемы?!

4b9b3361

Ответ 1

Вы смешиваете HTML с XHTML.

Обычно декларация <!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%; } для достижения желаемого эффекта.

Ответ 2

Это пространство имен XML. Это необходимо, когда вы используете XHTML 1.0 или 1.1 doctypes или application/xhtml + xml mimetypes.

Вы должны использовать doctype HTML5, тогда вам это не нужно для text/html. Лучше начинать с шаблона следующим образом:

<!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>



Когда вы разместите свой Doctype прямо и сделаете правильный html и css.
Это, как правило, позволит вам решить проблемы с макетами.

Ответ 3

Похоже, ваш сайт имеет CSS или JS, который зависит от работы в режиме quirks. Вот почему вам нужен мусор над вашим doctype для рендеринга "правильно". Я предлагаю удалить упомянутый мусор, а затем зафиксировать ваш CSS + JS, чтобы фактически работать в режиме стандартов; вы сэкономите много боли в долгосрочной перспективе.

Ответ 4

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

Подробнее подробнее