- PVSM.RU - https://www.pvsm.ru -

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

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

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

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

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

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

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

Пруф: hsivonen.iki.fi/doctype/ [6]

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

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

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

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

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

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

Пруфы: 1) спецификация раз [9], 2) спецификация два [10], 3) пример валидации реальной страницы [11] (с 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 ничему не мешает (неймспейс-то один и тот же).

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

Миф 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, по правилам которого слеш в теге закрывает его и следующий символ (">") должен выводиться как контент [13] — т.е., фактически потому, что они не поддерживают HTML 4 (поскольку HTML 4 базируется на SGML)! Не говоря о табличных атрибутах char и charoff (не поддерживаются нигде), и не только [14].

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

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

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

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

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

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

Пруфы: Mozilla [22], Chrome [23], Opera [24], MS [25].

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

Автор: SelenIT2


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/html5/3725

Ссылки в тексте:

[1] css-live.ru: http://css-live.ru/articles/glavnyj-sekret-html5/

[2] спецификации WHATWG: http://www.whatwg.org/specs/web-apps/current-work/multipage/

[3] ISO/IEC 15445: https://www.scss.tcd.ie/misc/15445/15445.HTML#REFS

[4] на Хабре: http://habrahabr.ru/post/112206/

[5] WHATWG FAQ: http://wiki.whatwg.org/wiki/FAQ#When_will_HTML5_be_finished.3F

[6] hsivonen.iki.fi/doctype/: http://hsivonen.iki.fi/doctype/

[7] таблицу: http://hsivonen.iki.fi/doctype/#handling

[8] html5.validator.nu: http://html5.validator.nu/

[9] спецификация раз: http://www.whatwg.org/specs/web-apps/current-work/multipage/syntax.html#obsolete-permitted-doctype-string

[10] спецификация два: http://dev.w3.org/html5/spec/syntax.html#obsolete-permitted-doctype-string

[11] пример валидации реальной страницы: http://html5.validator.nu/?doc=http%3A%2F%2Fcss-live.ru%2FPortfolio%2FArchery%2Fmain-page.html&showsource=yes

[12] спецификация: http://www.whatwg.org/specs/web-apps/current-work/multipage/the-xhtml-syntax.html#the-xhtml-syntax

[13] следующий символ (">") должен выводиться как контент: http://www.webdevout.net/articles/beware-of-xhtml#net

[14] не только: http://tanalin.com/blog/2007/07/zero-rowspan-colspan/

[15] рекомендуют не бояться: http://css-live.ru/articles/o-semantike-html-i-arxitekture-klientskoj-chasti-veba/

[16] практически для всего: https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-browser-Polyfills

[17] webdevout.com: http://www.webdevout.net/browser-support-html#html401

[18] caniuse.com: http://caniuse.com/#cats=HTML5

[19] html5please.com: http://html5please.com/#html

[20] не опция: http://friendlybit.com/html/html5-is-not-an-option/

[21] в самой спецификации WHATWG: http://www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#the-html-element

[22] Mozilla: http://hacks.mozilla.org/2010/05/firefox-4-the-html5-parser-inline-svg-speed-and-more/

[23] Chrome: http://www.webmonkey.com/2010/10/chrome-7-arrives-with-bug-fixes-better-html5-support/

[24] Opera: http://www.engadget.com/2012/02/27/opera-announces-revamped-store-mini-next-and-mobile-12-at-mwc/

[25] MS: http://blogs.msdn.com/b/ie/archive/2011/07/06/html5-parsing-in-ie10.aspx