- •Как мы сюда попали?
- •Приступим
- •MIME-типы
- •Большое отступление о том, как появляются стандарты
- •Не отрывая карандаша
- •Все, что вы знаете об XHTML, — это ложь
- •Альтернативная точка зрения
- •WHAT? Что?!
- •И снова о W3C
- •Послесловие
- •Для дальнейшего изучения
- •Тестирование функций HTML5 в браузере
- •Приступим
- •Способы тестирования браузера
- •Modernizr: библиотека для тестирования HTML5-функций
- •Холст
- •Рисование текста
- •Видео
- •Форматы видео
- •Локальное хранилище
- •Фоновые вычисления
- •Офлайновые веб-приложения
- •Геолокация
- •Типы полей ввода
- •Подсказывающий текст
- •Автофокусировка в формах
- •Микроданные
- •Для дальнейшего изучения
- •Что все это значит?
- •Приступим
- •Определение типа документа
- •Корневой элемент
- •Элемент HEAD
- •Кодировка символов
- •Ссылочные отношения
- •Новые семантические элементы HTML5
- •Большое отступление о том, как браузеры обрабатывают незнакомые элементы
- •Верхние колонтитулы
- •Рубрикация
- •Дата и время
- •Навигация
- •Нижние колонтитулы
- •Для дальнейшего изучения
- •С чистого листа (холста)
- •Приступим
- •Простые фигуры
- •Координатная сетка холста
- •Контуры
- •Текст
- •Градиенты
- •Изображения
- •Живой пример
- •Для дальнейшего изучения
- •Видео в Сети
- •Приступим
- •Видеоконтейнеры
- •Видеокодеки
- •Theora
- •Аудиокодеки
- •MPEG-1 Audio Layer 3
- •Advanced Audio Coding
- •Vorbis
- •Что работает в Интернете?
- •Проблемы лицензирования видео H.264
- •Кодирование Ogg-видео с помощью Firefogg
- •Пакетное кодирование Ogg-видео с помощью ffmpeg2theora
- •Кодирование H.264-видео с помощью HandBrake
- •Пакетное кодирование H.264-видео с помощью HandBrake
- •Кодирование WebM-видео с помощью программы ffmpeg
- •…И наконец разметка
- •Живой пример
- •Для дальнейшего изучения
- •Вот мы вас и нашли!
- •Приступим
- •API геолокации
- •Покажите мне код
- •Обработка ошибок
- •Требую выбора!
- •На помощь спешит geo.js
- •Живой пример
- •Для дальнейшего изучения
- •Локальное хранилище: прошлое, настоящее, будущее
- •Приступим
- •Краткая история прототипов локального хранилища до HTML5
- •HTML5-хранилище: вводный курс
- •Использование HTML5-хранилища
- •Следим за состоянием HTML5-хранилища
- •Ограничения в современных браузерах
- •HTML5-хранилище в действии
- •Альтернативы: хранилище без ключей и значений
- •Для дальнейшего изучения
- •На волю, в офлайн!
- •Приступим
- •Манифест кэша
- •Раздел NETWORK
- •Раздел FALLBACK
- •Поток событий
- •«Убей меня поскорее!», или Отладка как одно из изящных искусств
- •Строим офлайновое приложение
- •Для дальнейшего изучения
- •Веб-формы как форма безумия
- •Приступим
- •Подсказывающий текст
- •Поля с автофокусировкой
- •Адреса электронной почты
- •Веб-адреса
- •Числа как счетчики
- •Числа как ползунки
- •Выборщики даты
- •Формы поиска
- •Выборщики цвета
- •И еще об одной вещи
- •Для дальнейшего изучения
- •Микроданные и другие красивые слова
- •Приступим
- •Что такое микроданные?
- •Структура микроданных
- •Разметка данных о человеке
- •Разметка данных об организации
- •Разметка данных о событии
- •Разметка клиентских отзывов
- •Для дальнейшего изучения
- •Приложение. Универсальный почти алфавитный определитель всего на свете
- •Элементы
- •Для дальнейшего изучения
Автофокусировка в формах |
37 |
Протестировать поддержкуподсказывающего текста можно способом 2 (см. раздел «Способы тестирования браузера» этой главы). Если ваш браузер поддерживает его, то для DOM-объекта, представляющего тег <input>, будет определено свойство placeholder (даже когда в HTML-коде ему не присвоено никакое значение). Если нет, то свойство не будет определено. Проверить поможет такая функция:
function supports_input_placeholder() { var i = document.createElement('input'); return ‘placeholder’ in i;
}
Чтобынеписатьсобственнуюфункцию,прибегнитек помощиModernizr(см.раздел «Modernizr: библиотека для тестирования HTML5-функций» данной главы):
if (Modernizr.input.placeholder) {
//подсказывающий текст будет виден!
}else {
//подсказывающий текст не поддерживается,
//вернемся к нашим сценариям
}
Автофокусировка в формах
На многих сайтах с помощью JavaScript реализована автоматическая фокусировка первого из полей веб-формы. Так, на главной странице Google..com форма поиска несет фокус, так что запрос можно вводить сразу, не помещая курсор в поле. Это удобно для большинства посетителей, но может мешать «продвинутым» пользователям и людям с особыми потребностями. Если на такой странице нажать Пробел, то прокрутка на один экран вниз не сработает, как можно ожидать; вместо этого в поле ввода появится пробел. Другой пример: если переместить фокус в другое из полей формы, пока страница еще грузится, «услужливая» система вернет курсор обратно, в начальное поле. Это сбивает с ритма, к тому же пользовательский ввод попадает не туда, куда следует.
Все эти специальные случаи трудно учесть при автофокусировке с помощью JavaScript. Еще недавно пользователей, которых раздражает «кража» фокуса вебстраницами, ничем нельзя было утешить.
ДлярешенияпроблемывHTML5введенатрибутautofocus,которыйможетбыть применен к любому элементу веб-формы. Этот атрибут работает в полном соответствиисназванием,тоестьперемещаеткурсорводноизполейвводанаформе.Ноэто не сценарное решение, а HTML-код, значит, его поведение на всех сайтах будет одинаково. Со своей стороны, разработчики браузеров и браузерных расширений, возможно, предложат пользователям функцию отключения автофокусировки.
Протестироватьподдержкуавтофокусировкиможноспособом2(см.раздел«Способы тестирования браузера» этой главы). Если ваш браузер поддерживает автофокусировку, то для DOM-объекта, представляющего тег <input>, будет определено свойство autofocus (даже когда в HTML-коде оно не активизируется). Если нет, то свойство не будет определено. Проверить поможет такая функция:
38 |
Глава 2.. Тестирование функций HTML5 в браузере |
function supports_input_autofocus() {
var i = document.createElement('input'); return ‘autofocus’ in i;
}
Чтобы не писать собственную функцию, прибегните к помощи Modernizr (см. раздел «Modernizr: библиотека для тестирования HTML5-функций» этой главы):
if (Modernizr.input.autofocus) {
//автофокусировка работает!
}else {
//автофокусировка не работает,
//вернемся к нашим сценариям
Микроданные
Микроданные (http://bit..ly/ckt9Rj) — это стандартизованный способ расширения се- мантикивашихвеб-страниц.Так,например,спомощьюмикроданныхможноуказать, что та или иная фотография доступна на условиях определенной лицензии Creative Commons. Как вы увидите в главе 10, при верстке страницы с личной информацией тоже можно с успехом пользоваться микроданными. Браузеры, браузерные расши- ренияипоисковыесистемыумеютпреобразовыватьHTML5-микроданныевформат vCard — стандарт обмена контактной информацией. Кроме всего названного, можно определять пользовательские словари микроданных.
Стандарт микроданных HTML5 включает в себя элементы разметки HTML (главным образом для поисковиков) и набор DOM-функций (главным образом для браузеров). Вашим веб-страницам не повредит разметка микроданных, ведь в каждом отдельном документе она состоит не более чем из нескольких уместно вписанных атрибутов. Поисковые системы, которые не умеют работать с микроданными, будут эти атрибуты просто игнорировать. Если же вы хотите оперировать микроданными посредством DOM, то нужно проверить, работает ли в браузере DOM API микроданных.
ПротестироватьподдержкуAPIHTML5-микроданныхможноспособом1(см.раз- дел «Способы тестирования браузера» этой главы). Если ваш браузер поддерживает этот API, то для глобального объекта window будет определена функция getItems(). Соответственно, если поддержки микроданных в браузере нет, то функция тоже не будет определена. Проверить можно так:
function supports_microdata_api() { return !!document.getItems;
}
Вероятно, пока вы читали эту главу, вам успели надоесть однообразные ссылки на Modernizr. Тогда вы будете рады узнать, что Modernizr пока не умеет тестировать поддержку API микроданных, и в этом случае вам придется-таки написать проверку самостоятельно.
Для дальнейшего изучения |
39 |
Для дальнейшего изучения
Спецификации и стандарты:
тег <canvas> (http://bit..ly/9JHzOf);тег <video> (http://bit..ly/a3kpiq);
типы полей ввода (http://bit..ly/akweH4);
атрибут <input placeholder> (http://bit..ly/caGl8N);атрибут <input autofocus> (http://bit..ly/db1Fj4);
локальное хранилище HTML5 (http://dev..w3..org/html5/webstorage/);фоновые вычисления (http://bit..ly/9jheof);
офлайновые веб-приложения (http://bit..ly/d8ZgzX);
API геолокации (http://www..w3..org/TR/geolocation-API/). JavaScript-библиотеки:
Modernizr (http://www..modernizr..com/) — библиотека для тестирования HTML5-
функций;
geo.js (http://code..google..com/p/geo-location-javascript/) — обертка для API геоло-
кации.
Другие статьи и материалы:
Video for Everybody! (http://camendesign..com/code/video_for_everybody);
«Элементарное введение в кодировки видеоданных» (http://diveintomark..org/ tag/give);
«Свойства разных типов видео» (http://wiki..whatwg..org/wiki/Video_type_parameters);
приложение к этой книге.
3 Что все это значит?
Приступим
В этой главе мы возьмем совершенно корректную веб-страницу в разметке HTML и… улучшим ее. Исходный код одних ее частей станет чуть короче, других — чуть длиннее, но главное, что вся страница придет в соответствие с идеей семантической сети. Вот увидите, какое это волшебное превращение.
Предметом наших опытов станет страница http://diveintohtml5..org/examples/blogoriginal..html. Вам суждено не просто изучить ее, а и буквально «сжиться» с ней, пожалуй, даже полюбить ее. Это все еще впереди. А пока заглянем в исходный код страницы.
Определение типа документа
Итак, начнем с самого начала:
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
В этих строках задано так называемое определение типа документа (ОТД). История возникновения ОТД долгая и довольно мрачная. При разработке браузера Internet Explorer 5 под операционную систему компьютеров Macintosh компания Microsoft столкнулась с неожиданной проблемой. В новой версии браузера было столько улучшений по части стандартов, что старые страницы отображались в нем неправильно. Вернее, отображались они правильно (в соответствии со спе цификацией), но пользователь думал, что неправильно. Эти страницы были сверстаны с оглядкой на странности работы популярных браузеров того времени
(2000), главным образом Netscape 4 и Internet Explorer 4. Интернет оказался не готов к той степени совершенства, которую демонстрировал IE5/Mac.
Тогда специалисты Microsoft предложили нетривиальный выход. Перед прорисовкой страницы IE5/Mac пытался найти в ее исходном тексте «тип документа», который, как правило, указывают в самых первых строках, выше открывающего тега <html>. Старые страницы, отображение которых надо было согласовать с причудами старых браузеров, обычно вообще не содержали ОТД. Эти страницы брау-
Определение типа документа |
41 |
зер IE5/Mac прорисовывал в точности так же, как и его предшественники. Чтобы включить более полную поддержку стандартов, верстальщик должен был вписать перед тегом <html> то или иное ОТД.
Этотмеханизмбыстроприобрелпопулярность.Вскоревовсехосновныхбраузерах было два режима: режим совместимости (quirks mode) и стандартный (standards mode). Но затем положение снова вышло из-под контроля, как это всегда бывает вСети.ПритестированиибраузераMozillaверсии1.1былообнаружено,чтоврежиме, называемом стандартным, некоторые страницы отображаются не в соответствии со спецификацией. Их прорисовка полагалась на один определенный «каприз» браузеров, и когда графический движок Mozilla после обновления перестал капризничать, внешний вид тысяч страниц был нарушен. Так возник «почти стандартный» режим (almost standards mode) — это название, как ни странно, общепринятое.
В основополагающей работе Генри Сивонена (Henri Sivonen) «ОТД и переключение режимов браузера» (http://hsivonen..iki..fi/doctype/) о разных режимах говорится следующее.
Режим совместимости
Приработевэтомрежимебраузеротступаетотсовременныхспецификаций,чтобы не нарушать внешний вид страниц, сверстанных по канонам конца 1990-х годов.
Стандартный режим
Работая в этом режиме, браузер пытается отобразить страницу в соответствии со спецификацией данного типа документов (и, конечно, в меру того, насколько хорошо реализованы в программе нужные для этого алгоритмы). В HTML5 стандартный режим называется режимом несовместимости (no quirks mode).
Почти стандартный режим
Браузеры Firefox, Safari, Google Chrome, Opera (начиная с версии 7.5) и IE8
также располагают «почти стандартным» режимом, в котором программы определяют высоту ячеек в таблицах не строго по спецификации CSS2, а традиционным образом. В HTML5 это называется режимом частичной совместимости (limited quirks mode).
ПРИМЕЧАНИЕ
Это очень упрощенный пересказ.. Чтобы по-настоящему войти в курс дела, надо прочесть статью Сивонена целиком.. Ведь на самом деле даже в IE5/Mac было предусмотрено, что некоторые (уже тогда устаревшие) ОТД не включали полную поддержку стандартов.. Со временем расширялись как список известных «странностей», так и список разных ОТД, которые включают режим совместимости.. В последний раз, когда я занимался подсчетами, было пять определенийтипадокумента,переключающихбраузерв «почтистандартный»режим,и еще 73, переводящих его в режим «со странностями».. Вполне возможно, что какие-то из типов я не учел.. О четырех (четырех!) режимах прорисовки страниц в IE8 вообще писать не буду.. Как происходит переключение между ними, можно видеть на диаграмме: http://hsivonen..iki..fi/ doctype/ie8-mode..png.. О таких механизмах скажу только одно: их нужно уничтожать..
На чем мы остановились? Да, точно, на типе документа:
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">