Несколько популярных мифов о HTML5

в 13:16, , рубрики: html, html5, Веб-разработка, мифы, метки: ,

Решил собрать в одну небольшую статью наиболее популярные заблуждения о HTML5, встречающиеся в обсуждениях на Хабре, на форуме htmlbook.ru и на css-live.ru. Если вы считаете, что для HTML5 обязательно нужен доктайп <!DOCTYPE html>, что HTML5 будет (или не будет) готов к 2022 году, что HTML5 поддерживается (или не поддерживается) какими-то браузерами, что на HTML5 можно перейти (а можно не переходить) в любое время — возможно, вам окажется интересно и полезно.

Миф 1: HTML5 — еще не стандарт и нескоро им станет

Реальность: если смотреть на буквы спецификаций, то всё наоборот:). Слово «стандарт» (да еще с пометкой «живой») красуется только на спецификации WHATWG. Все спецификации W3C — по их же букве, в лучшем случае рекомендации (HTML 4.01 дал начало ISO/IEC 15445, но это скорее курьез). Однако CSS 2.1 не был рекомендацией вплоть до июня 2011 г. — что не мешало разработчикам (как сайтов, так и браузеров) воспринимать его как действующий стандарт. Впрочем, об этом давно говорено-переговорено (в т.ч. на Хабре), так что можете сразу переходить к следующим мифам — там интереснее.

Пруфы: WHATWG FAQ, множество хабратопиков, реальное поведение браузеров (см. ниже).

Миф 2. Существует «особый режим HTML5», для включения которого нужен доктайп <!DOCTYPE html>

Реальность: особого режима нет. Доктайп <!DOCTYPE html> включает тот же самый режим, что строгие доктайпы HTML 4.01 и XHTML 1.0. Все браузерные фичи при всех этих доктайпах работают абсолютно одинаково.

Пруф: hsivonen.iki.fi/doctype/

Миф 3. Старые браузеры не распознают <!DOCTYPE html> и переходят в Quirks mode

Реальность: единственное назначение доктайпа в HTML5 — перевести браузеры в режим поддержки стандартов (максимально полной, на какую браузер вообще способен, без всяких «Almost», как для Transitional-доктайпов). Авторы спецификации долго и упорно выбирали самый короткий вариант доктайпа, чтобы он решал эту задачу во всех актуальных (на момент разработки — 2005–2007 гг.) браузерах. Т.е. начиная с IE6 включительно. И выбрали!

Пруф: там же (см. таблицу).

Миф 4. Без доктайпа <!DOCTYPE html> HTML5 — не HTML5

Реальность: согласно спецификации, для HTML5-страниц допускаются все строгие доктайпы HTML 4.x и XHTML 1.x!

Т.е. хорошо сверстанная страница может быть валидным (вернее, конформным) HTML5 даже без смены доктайпа на новый. Конечно, старые доктайпы использовать не рекомендуется, но для валидатора это не ошибка, а лишь предупреждение (и то на уровне житейской логики — «если не видно разницы, зачем писать больше?»). Короткий доктайп рекомендуется лишь потому, что он 1) короткий (легко запоминается и набирается вручную, «экономия байт» и т.п.), 2) не вводит в заблуждение старые валидаторы (хотя специализированный html5.validator.nu всё понимает).

Пруфы: 1) спецификация раз, 2) спецификация два, 3) пример валидации реальной страницы (с css-live.ru).

Миф 5. Для XHTML5 необходим доктайп <!DOCTYPE html> (или еще какой-либо)

Реальность: для XHTML5 необходим Content-type: application/xhtml+xml. И всё. Только Content-type различает HTML5 и XHTML5 по определению — и ни доктайп, ни синтаксис, ни что-либо еще это изменить не может (HTML-синтаксис поддерживается только для text/html, а XML-синтаксис — для обоих, но это и так ясно). Вообще доктайп для XHTML5 необязателен (и ни один браузер его не требует). Но доктайп от XHTML 1.x ничему не мешает (неймспейс-то один и тот же).

Пруф: спецификация.

Миф 6. Старые браузеры (типа IE7-8) не поддерживают HTML5

Реальность: ни один браузер не поддерживает ни одного HTML полностью.

Тот же самый IE7 не поддерживает элемент <button> из HTML 4 (при отправке формы передает вместо value нажатой кнопки непонятно что). Все IE до 9-го не поддерживали XHTML в натуральном виде (т.е. с Content-type: application/xhtml+xml — при котором XHTML воспринимается как XML-приложение со всеми «плюшками» типа простого парсинга и внедрения других неймспейсов, а не как недоHTML с непонятным мусором в виде слешей в одиночных тегах). Кстати, эти слеши в XHTML-страницах не ломали отображение лишь потому, что HTML-браузеры (в отличие от HTML-валидатора) никогда не поддерживали всех возможностей SGML, по правилам которого слеш в теге закрывает его и следующий символ (">") должен выводиться как контент — т.е., фактически потому, что они не поддерживают HTML 4 (поскольку HTML 4 базируется на SGML)! Не говоря о табличных атрибутах char и charoff (не поддерживаются нигде), и не только.

HTML5 задумывался для плавного, эволюционного перехода. Конечно, наивно ждать, что в браузерах 2001 или 2005 года выпуска внезапно заработает фича, придуманная в 2008-м или 2012-м). Но те же короткий доктайп и короткое объявление кодировки (<meta charset="UTF-8">), атрибуты autocomplete, contenteditable и data-что-угодно, DOM-методы типа insertAdjacentHtml и т.п. — всё это в старых IE работает точно (а в IE8 — еще и Web Storage впридачу). Да, новые структурные теги там не стилизуются без общеизвестного JS-пинка — но, строго говоря, никто и не заставляет, HTML5 вполне позволяет вешать оформление по старинке на дивы, а новыми тегами лишь выделять смысловые части для машинного анализа (на вид громоздко, но гуру рекомендуют не бояться лишней разметки, если это способствует надежности). Да, не стоит злоупотреблять возможностью не закрывать <p> перед </section> (и т.п.) в FF3.6 — но этим вообще злоупотреблять не стоит. И т.д.

В общем, если брать не сугубо ультрамодные фичи, а спецификацию в целом, дела с поддержкой не так уж плохи. И HTML5 в любом случае предлагает больше работающих полезных фич, чем предшественники. А на самый крайний случай есть «polyfills» практически для всего.

Пруфы: спецификации, webdevout.com (поддержка старых стандартов на начало 2009 г.), caniuse.com, html5please.com (поддержка новых фич).

Миф 7. Переходить на HTML5 еще рано

Реальность: половина существующих браузеров (FF 4+ и Chrome 7+) уже воспринимают любой HTML как HTML5 — поскольку стандарт обратно совместим со всеми реально использовавшимися фичами предшественников (см. разоблачение мифа 4). У этих браузеров для любого HTML используется HTML5-парсер. Вот-вот к ним присоединятся Opera 12 и IE10. Так что «писать по старинке на HTML4» больше нельзя по построению, и вопрос «переходить или подождать» не стоит вообще. HTML5 — не опция. Будущее наступает, не спрашивая разрешения, независимо от того, готовы ли вы к нему.

Что действительно рано — это использовать все новые фичи напропалую. К счастью, в самой спецификации WHATWG для каждой фичи указан статус реализованности в браузерах (в выноске слева от заголовка, при наведении могут всплыть подробности). Ну и ссылки из предыдущего опровержения полезны (с учетом специфики аудитории конкретного проекта, само собой). Хотя вы это и так знаете).

Пруфы: Mozilla, Chrome, Opera, MS.

Буду рад, если кто-то найдет в этом топике что-то новое и полезное. Буду рад вдвойне, если вы это всё давно знали без меня (значит, цель просвещения достигнута!). Заранее благодарен за дополнения, исправления (если надо) и уточнения.

Автор: SelenIT2

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js