Скидки до 50% и курс в подарок : : Выбрать курс
Код
#База знаний

Директива <​!DOCTYPE​> в HTML: что это, зачем она нужна и как с ней работать

Рассказываем, что такое <​!DOCTYPE​> и как правильно его использовать.

Иллюстрация: Оля Ежак для Skillbox Media

При создании HTML-документов нужно учитывать, как браузер интерпретирует и отображает нашу страницу. Важно, чтобы сайт выглядел так, как он задумывался, работал предсказуемо и отображался корректно.

Первое, что видит браузер при разборе HTML, — это <!DOCTYPE>. От этого элемента зависит, как страница будет рендериться: в современном стандартном режиме или в режиме совместимости. Разбираемся, как работает <!DOCTYPE>, почему без него вёрстка может сломаться и как выбрать правильный вариант.

Содержание


Что такое <!DOCTYPE>

<!DOCTYPE> (document type declaration) — дословно «Тип документа» — это инструкция для веб-браузеров, определяющая, какую версию HTML следует использовать при работе с документом.

Строго говоря, <!DOCTYPE> — это не тег, а директива, которая относится к метаинформации о документе. Она записана в угловых скобках, потому что HTML-страница обрабатывает только то, что внутри < >. А знак ! в начале подчёркивает: это не обычный тег, а специальная инструкция для браузера.

Как пишется

В современных спецификациях HTML5 <!DOCTYPE> записывается в краткой простой форме:

<!DOCTYPE html>

При этом регистр букв внутри DOCTYPE не имеет значения. Можно прописать и так:

  • <!DOCTYPE HTML>;
  • <!doctype html>;
  • <!doctype HTML>.

Если вы воспользуетесь плагином создания разметки Emmet, то он предложит этот вариант:

<!DOCTYPE html>

А вот в предыдущих версиях HTML и XHTML использовались более сложные и длинные записи <!DOCTYPE>. Они указывали на конкретное определение типа документа — DTD (document type definition) — и режима работы. И выглядело это всё как инструкция для принтера:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

Обязательно ли писать <!DOCTYPE>?

Коротко: да. Если его не указать, браузер включит режим совместимости (quirks mode), и это может привести:

  • к различному поведению браузеров при рендеринге;
  • ошибкам в обработке CSS;
  • непредсказуемому расположению элементов на странице.

Где <!DOCTYPE> располагается на странице

При вёрстке <!DOCTYPE> всегда помещают в самое начало HTML-документа, первой строкой. В любом другом месте этот элемент не будет восприниматься браузером, и для страницы включится режим совместимости.

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Пример</title>
</head>
<body>
    <h1>Заголовок</h1>
</body>
</html>

Какие бывают режимы отображения документа

Стоит ошибиться в <!DOCTYPE>, и браузер решит, что вы застряли в 2001-м. Это и есть режим совместимости. Давайте разберёмся, какие ещё режимы отображения бывают и чем они различаются.

Итак, браузер знает три режима отображения документа.

1. Standards mode (стандартный режим)

Включается при корректном указании директивы и заставляет браузер следовать современным стандартам.

Как включить:

Используйте правильный <!DOCTYPE> в начале HTML-документа:

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Стандартный режим</title>
</head>
<body>
    <h1>Пример в стандартном режиме</h1>
</body>
</html>

Так браузер поймёт, что эта страница создана по актуальному стандарту HTML5, и будет применять к коду именно эту спецификацию, корректно отображая HTML и CSS.

2. Quirks mode (режим совместимости)

Этот режим имитирует поведение старых браузеров (IE5 и других), в которых не работают некоторые современные решения. Это может привести к неправильному рендерингу CSS, особенно у элементов с блочной моделью (box model).

Это не значит, что страница будет полностью сломана, но результат отображения некоторых элементов будет отличаться от ожидаемого.

Как включить:

  • Не писать. Если нет <!DOCTYPE>, браузер включит режим совместимости.
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Quirks Mode</title>
</head>
<body>
    <h1>Пример в режиме совместимости, потому что нет DOCTYPE</h1>
</body>
</html>
  • Использовать старый или некорректный <!DOCTYPE> — например, старые DTD, не указанные полностью:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
  • Добавить что-то перед <!DOCTYPE>. Даже пробел или комментарий перед <!DOCTYPE> могут включить quirks mode:
<!-- Этот комментарий вызовет quirks mode -->
<!DOCTYPE html>

3. Almost standards mode (почти стандартный режим)

Отличается от стандартного режима небольшими отклонениями в рендеринге, но поддерживает устаревшие элементы.

Как включить:

Некоторые варианты <!DOCTYPE> из HTML 4.01 Transitional и XHTML 1.0 Transitional могут активировать этот режим. Например:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Почти стандартный режим</title>
</head>
<body>
    <h1>Пример в почти стандартном режиме</h1>
</body>
</html>

Какие версии есть в разных стандартах HTML


Стандарт HTML 4.01

В HTML 4.01 существует три варианта <!DOCTYPE>.

  • Strict (строгий режим) — без поддержки устаревших элементов предыдущих версий:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  • Transitional (промежуточный режим) — поддерживает устаревшие теги, такие как <font>:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  • Frameset (режим фреймов) — поддерживает фреймы:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">

Стандарт XHTML 1.0

XHTML требовал строгого соблюдения синтаксиса XML и имел три аналогичных варианта <!DOCTYPE>:

  • Strict (строгий режим);
  • Transitional (промежуточный режим);
  • Frameset (режим фреймов).

Запись <!DOCTYPE> в XHTML 1.0 выглядела так:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

Стандарт HTML5

HTML5 не поддерживает устаревшие теги из предыдущих версий и придерживается современной модели вёрстки. Вместо длинных <!DOCTYPE> используется один короткий универсальный вариант, который работает во всех браузерах:

<!DOCTYPE html>

Немного практики: пытаемся расшифровать <!DOCTYPE>

Когда веб-разработчики переходили от старых HTML-версий к более структурированным стандартам, но ещё нуждались в обратной совместимости, они включали почти стандартный режим, который позволял:

  • использовать как современные, так и устаревшие HTML-элементы при соблюдении корректной структуры;
  • стилизовать страницу с использованием встроенных в разметку стилей (style="").

И сейчас можно поддерживать страницу, содержащую устаревший код, с помощью стандарта HTML 4.01.

Чтобы правильно указать директиву, надо разобраться, из чего она вообще состоит. Для этого давайте попробуем расшифровать <!DOCTYPE> почти стандартного режима отображения.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

Решение

  • !DOCTYPE HTML PUBLIC — объявление типа документа, указывающее, что используется публичный DTD.
  • -//W3C//DTD HTML 4.01 Transitional//EN — описание стандарта:
  • -//W3C// — спецификация разработана W3C (World Wide Web Consortium).
  • DTD HTML 4.01 — версия стандарта (HTML 4.01).
  • Transitional — разрешает использование устаревших элементов (например, <font>, <center>, <iframe>).
  • //EN — язык документа (английский).
  • "http://www.w3.org/TR/html4/loose.dtd" — ссылка на официальный документ DTD.

Частые ошибки

Есть две основных ошибки при использовании <!DOCTYPE>:

1. Страница должна использовать только HTML5, но директива <!DOCTYPE> отсутствует или указана неправильно.

Проблема: на странице используется только современный код, но при этом:

  • директива <!DOCTYPE> не указана вовсе;
  • содержит синтаксические ошибки;
  • расположена не в самом начале документа.

Из-за этого браузер может переключиться в режим совместимости и отобразить страницу некорректно, игнорируя особенности HTML5.

Решение:

  • Сделайте директиву самым первым элементом страницы.
  • Используйте правильную для HTML5 запись <!DOCTYPE html>.
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Страница для HTML5</title>
</head>
<body>
    <h1>На странице поддерживается только современный код HTML5</h1>
</body>
</html>

2. Страница использует и современный, и устаревший код, но не задан подходящий режим совместимости.

Проблема: в коде страницы присутствуют как современные, так и устаревшие элементы (например, теги и атрибуты из HTML4), но директива <!DOCTYPE> не соответствует нужному стандарту (например, используется HTML5 вместо Transitional). В результате браузер может отрисовать страницу в режиме «почти-совместимости».

Решение:

  • Убедитесь, что <!DOCTYPE> стоит первой строкой.
  • Убедитесь, что параметры директивы прописаны полно и верно, выбрана корректная версия стандарта и присутствует параметр Transitional.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Страница для почти стандартного режима</title>
</head>
<body>
    <h1>На странице поддерживается устаревший и современный код</h1>
</body>
</html>

Полезные советы и лайфхаки

  • Используйте Emmet, чтобы быстро создать первоначальную структуру: это позволит не ошибиться в разметке. Emmet создаёт страницу HTML5 и прописывает <!DOCTYPE> актуального формата.
    В редакторах вроде VS Code можно набрать ! и нажать Tab — вы получите готовый шаблон HTML-документа. Он сразу включает <!DOCTYPE>, <html lang="...">, <meta charset="UTF-8"> и всё, что часто забывают ввести вручную. Это сэкономит время и позволит не ошибиться при выборе директивы.
  • Если вы работаете с современным сайтом, но в коде остались устаревшие элементы, разумно включить почти стандартный режим. Но если такого кода немного, то лучше переписать его по стандарту HTML5. А вот quirks mode тут не рекомендуется: что-то отобразится правильно, а что-то обязательно будет вести себя как попало.

Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!



Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Бесплатный курс по Python ➞
Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе.
Смотреть программу
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована