Какие типы документов существуют
Что проверяют
Вопрос расплывчатый, и первое, что оценивают: уточните ли вы, о чём речь. Чаще всего имеют в виду <!DOCTYPE> и режимы рендеринга, реже MIME-типы документов. Следом обычно спрашивают, что будет, если доктайп не указать.
Как отвечать
Коротко проговорите трактовку, а потом переходите к сути. Доктайп сообщает браузеру, по каким правилам рендерить страницу. Исторически их было много:
- HTML 4.01: Strict, Transitional и Frameset, с длинной ссылкой на DTD;
- XHTML 1.0: те же три варианта, плюс отдельный XHTML 1.1;
- HTML5: единственный современный
<!DOCTYPE html>, без DTD и номера версии, регистр не важен.
Сегодня от доктайпа зависит прежде всего режим:
- standards mode: поведение по спецификациям CSS, его включает
<!DOCTYPE html>; - almost standards mode: отличается одной деталью, высотой строки вокруг картинок в ячейках таблиц. Включается некоторыми старыми доктайпами, например XHTML 1.0 Transitional;
- quirks mode: эмуляция браузеров конца девяностых. Включается, если доктайпа нет или стоит один из устаревших, например HTML 4.01 Transitional без ссылки на DTD.
Проверить режим можно в консоли: document.compatMode вернёт CSS1Compat для стандартного режима и BackCompat для quirks.
Вторая трактовка: тип документа задаёт заголовок Content-Type. При text/html страницу разбирает HTML-парсер, который прощает ошибки. При application/xhtml+xml работает XML-парсер: один незакрытый тег, и вместо страницы браузер покажет ошибку разбора.
Если собеседник имел в виду файлы веб-приложения (HTML, CSS, JS, JSON, SVG), назовите их роли, но оговорите, что это форматы, а не типы документов в строгом смысле.
Где спотыкаются
Не знают, что без доктайпа включается quirks mode. В нём, например, таблицы не наследуют размер шрифта, а процентные высоты считаются иначе, и вёрстка ломается без видимой причины.
Считают, что XHTML-разметка с text/html разбирается строго. Нет, парсер выбирается по MIME-типу, а не по доктайпу.
Путают доктайп с тегом. Это инструкция для парсера, у неё нет закрывающей пары, и стоять она должна в самом начале документа, до <html>.