Часто задаваемые вопросы по HTML/XHTML
Документация Flask и примеры приложений используют HTML5. Вы можете заметить, что во многих ситуациях, когда закрывающие теги необязательны, они не используются, чтобы HTML был чище и быстрее загружался. Поскольку среди разработчиков существует много путаницы по поводу HTML и XHTML, этот документ пытается ответить на некоторые из основных вопросов.
История XHTML
В течение некоторого времени казалось, что HTML собирается быть заменен XHTML. Однако почти ни один веб-сайт в Интернете не является фактически XHTML (который представляет собой обработанный HTML с использованием правил XML). Есть несколько основных причин, по которым это происходит. Одна из них — недостаточная поддержка XHTML в Internet Explorer. Спецификация XHTML гласит, что XHTML должен быть предоставлен с типом MIME application/xhtml+xml, но Internet Explorer отказывается читать файлы с этим типом MIME. Хотя настройка веб-серверов для правильной передачи XHTML относительно проста, немногие люди это делают. Вероятно, это связано с тем, что правильное использование XHTML может быть довольно неудобным.
Одна из самых важных причин неудобств — суровое (жесткое и беспощадное) обработка ошибок в XML. При обнаружении ошибки разбора XML браузер должен отобразить пользователю неприятное сообщение об ошибке, вместо того чтобы попытаться восстановиться от ошибки и отобразить то, что он может. Большая часть генерации (X)HTML в сети основана на не-XML шаблонных движках (таких как Jinja, используемый в Flask), которые не защищают вас от случайного создания недопустимого XHTML. Существуют шаблонные движки на основе XML, такие как Kid и популярный Genshi, но они часто сопровождаются большей загрузкой во время выполнения и не так просты в использовании, потому что должны подчиняться правилам XML.
Однако большинство пользователей полагали, что они правильно используют XHTML. Они писали XHTML doctype в верхней части документа и закрывали все необходимые теги (<br> превращается в <br/> или <br></br> в XHTML). Однако даже если документ правильно валидируется как XHTML, то, что действительно определяет обработку XHTML/HTML в браузерах, — это тип MIME, который, как уже говорилось, часто не устанавливается должным образом. Таким образом, валидный XHTML обрабатывался как недопустимый HTML.
XHTML также изменил способ использования JavaScript. Для правильной работы с XHTML программисты должны использовать интерфейс DOM с пространством имен XHTML для запроса HTML-элементов.
История HTML5
Разработка спецификации HTML5 была начата в 2004 году под названием «Веб-приложения 1.0» рабочей группой WHATWG (которая была сформирована основными производителями браузеров Apple, Mozilla и Opera) с целью написания новой и улучшенной спецификации HTML, основанной на существующем поведении браузеров, а не на нереалистичных и несовместимых со старыми спецификациями.
Например, в HTML4 <title/Hello/ теоретически парсится точно так же, как <title>Hello</title>. Однако, поскольку люди использовали теги наподобие XHTML <link />, производители браузеров реализовали синтаксис XHTML вместо синтаксиса, определенного спецификацией.
В 2007 году спецификация была принята в качестве основы новой спецификации HTML под эгидой W3C, известной как HTML5. В настоящее время похоже, что XHTML теряет свою актуальность, так как рабочая группа XHTML 2 была распущена, а HTML5 реализуется всеми основными производителями браузеров.
HTML против XHTML
Следующая таблица предоставляет краткий обзор функций, доступных в HTML 4.01, XHTML 1.1 и HTML5. (XHTML 1.0 не включен, поскольку он был заменен XHTML 1.1 и мало используемым XHTML5.)
HTML4.01 | XHTML1.1 | HTML5 | |
|---|---|---|---|
| |||
| |||
| |||
должен передаваться как | |||
должен передаваться как | |||
жесткая обработка ошибок | |||
встроенный SVG | |||
встроенный MathML | |||
| |||
| |||
Новые семантические теги, такие как |
-
1 -
Это неявная функция, унаследованная от SGML. Она обычно не поддерживается браузерами по причинам, подробно описанным выше.
-
2 -
Это для совместимости с серверным кодом, который генерирует XHTML для тегов, таких как
<br>. Его не следует использовать в новом коде. -
3 -
XHTML 1.0 — последний стандарт XHTML, который разрешено предоставлять как
text/htmlпо причинам обратной совместимости.
Что означает «строгое»?
HTML5 имеет строго определенные правила разбора, но также точно определяет, как браузер должен реагировать на ошибки разбора — в отличие от XHTML, который просто указывает, что разбор должен быть прерван. Некоторые люди сбиты с толку, по-видимому, недопустимым синтаксисом, который все равно генерирует ожидаемые результаты (например, отсутствующие закрывающие теги или необрамленные атрибуты).
Некоторые из них работают из-за снисходительной обработки ошибок, которую большинство браузеров используют при столкновении с ошибкой разметки, другие фактически определены. Следующие конструкции являются необязательными в HTML5 по стандарту, но должны поддерживаться браузерами:
- Оборачивание документа в тег
<html> - Оборачивание заголовков элементов в
<head>или элементов тела в<body> - Закрытие тегов
<p>,<li>,<dt>,<dd>,<tr>,<td>,<th>,<tbody>,<thead>, или<tfoot>. - Использование кавычек в атрибутах, если они не содержат пробелов или специальных символов (таких как
<,>,', или"). - Требование, чтобы у логических атрибутов было значение.
Это означает, что следующая страница в HTML5 полностью валидна:
<!doctype html>
<title>Hello HTML5</title>
<div class=header>
<h1>Hello HTML5</h1>
<p class=tagline>HTML5 is awesome
</div>
<ul class=nav>
<li><a href=/index>Index</a>
<li><a href=/downloads>Downloads</a>
<li><a href=/about>About</a>
</ul>
<div class=body>
<h2>HTML5 is probably the future</h2>
<p>
There might be some other things around but in terms of
browser vendor support, HTML5 is hard to beat.
<dl>
<dt>Key 1
<dd>Value 1
<dt>Key 2
<dd>Value 2
</dl>
</div>
Новые технологии в HTML5
HTML5 добавляет множество новых функций, которые делают веб-приложения проще в написании и использовании.
- Теги
<audio>и<video>обеспечивают способ вставки аудио и видео без сложных дополнений, таких как QuickTime или Flash. - Семантические элементы, такие как
<article>,<header>,<nav>, и<time>, которые делают контент более понятным. - Тег
<canvas>, который поддерживает мощный API рисования, уменьшая необходимость в генерируемых сервером изображениях для графического представления данных. - Новые типы элементов формы, такие как
<input type="date">, которые позволяют агентам пользователя облегчить ввод и проверку значений. - Расширенные JavaScript API, такие как Web Storage, Web Workers, Web Sockets, геолокация и автономные приложения.
Было добавлено и множество других функций. Хорошим руководством по новым функциям HTML5 является книга Марка Пилигрима Dive Into HTML5. Однако не все из них еще поддерживаются браузерами, поэтому будьте осторожны.
Что следует использовать?
В настоящее время ответ — HTML5. Есть очень мало причин использовать XHTML, учитывая последние разработки в веб-браузерах. Резюмируя причины, приведенные выше:
- Internet Explorer имеет плохую поддержку XHTML.
- Многие JavaScript-библиотеки также не поддерживают XHTML из-за более сложного API пространств имен, который он требует.
- HTML5 добавляет несколько новых функций, включая семантические теги и долгожданные теги
<audio>и<video>. - Он имеет поддержку большинства производителей браузеров.
- Он намного проще в написании и компактнее.
Для большинства приложений безусловно лучше использовать HTML5, чем XHTML.
© 2007–2021 Pallets
Licensed under the BSD 3-clause License.
https://flask.palletsprojects.com/en/2.0.x/htmlfaq/