Кит Джереми - HTML5 для веб-дизайнеров
На свете есть и другие аудиоформаты. Кодек Vorbis – обычно для него используется файл с расширением .ogg – никакими патентами не обременен. Firefox поддерживает Ogg Vorbis, а Safari – нет.
К счастью, есть способ использовать элемент audio, не делая при этом «выбор Софи»[10] между форматами файлов. Вместо того чтобы использовать атрибут src в открывающем теге <audio>, можно указать несколько форматов файлов с помощью элемента source:
<audio controls>
<source src="witchitalineman.ogg">
<source src="witchitalineman.mp3">
</audio>
Браузер, который может проигрывать файлы Ogg Vorbis, не станет смотреть дальше первого элемента source. Браузер, который может проигрывать файлы MP3, но не может Ogg Vorbis, пропустит первый элемент source и проиграет файл во втором элементе source.
Можно помочь браузерам и указать MIME-типы для каждого исходного файла:
<audio controls>
<source src="witchitalineman.ogg" type="audio/ogg">
<source src="witchitalineman.mp3" type="audio/mpeg">
</audio>
Элемент source – самостоятельный (или «пустой») элемент, так что если вы используете синтаксис XHTML, не забудьте включить закрывающий слэш в конца каждого тега <source />.
Запасной вариант
Возможность указывать несколько элементов source очень удобна. Но есть браузеры, которые пока не поддерживают элемент audio совсем. Угадаете, на который браузер я намекаю?
Internet Explorer и его родню нужно кормить аудиофайлами с ложечки, по старинке, через Flash. Модель содержимого элемента audio позволяет это сделать. Все, что находится между открывающим и закрывающим тегами <audio> – и что при этом не является элементом source – будет показываться браузерам, которые не понимают элемента audio:
<audio controls>
<source src="witchitalineman.ogg» type="audio/ogg">
<source src="witchitalineman.mp3» type="audio/mpeg">
<object type="application/x-shockwave-flash"data="player.swf?soundFile=witchitalineman.mp3">
<param name="movie"value="player.swf?soundFile=witchitalineman.mp3">
</object>
</audio>
В этом примере элемент object будет доступен только тем браузерам, которые не поддерживают элемент audio.
Можно пойти еще дальше. Элемент object, включающийся при «запасном варианте», тоже предоставляет вам возможность включить содержимое. Это значит, что, если больше ничего не срабатывает, можно дать старый проверенный вариант – гиперссылку:
<audio controls>
<source src="witchitalineman.ogg" type="audio/ogg">
<source src="witchitalineman.mp3" type="audio/mpeg">
<object type="application/x-shockwave-flash"data="player.swf?soundFile=witchitalineman.mp3">
<param name="movie"value="player.swf?soundFile=witchitalineman.mp3">
<a href="witchitalineman.mp3">Скачать песню</a>
</object>
</audio>
В этом примере четыре уровня постепенной деградации.
1. Браузер поддерживает элемент audio и формат Ogg Vorbis.
2. Браузер поддерживает элемент audio и формат MP3.
3. Браузер не поддерживает элемент audio, но в нем установлен Flash-плагин.
4. Браузер не поддерживает элемент audio, и в нем не установлен Flash-плагин.
Доступ на все уровни
Модель содержимого элемента audio очень удобна для предоставления «запасного варианта» содержимого. Запасное содержимое – не то же самое, что содержимое для технологий специальных возможностей.
Предположим, что вместе с аудиофайлом идет его транскрипция. Вот так не нужно размечать эти данные:
<audio controls>
<source src="witchitalineman.ogg" type="audio/ogg">
<source src="witchitalineman.mp3" type="audio/mpeg">
I am a lineman for the county…
</audio>
Транскрипция в этом примере будет видна только тем браузерам, которые поддерживают элемент audio. Размечать незвуковое содержимое таким образом никак не поможет глухому пользователю с хорошим браузером. Кроме того, так называемое содержимое для технологий специальных возможностей часто полезно для всех – так что зачем его прятать?
<audio controls>
<source src="witchitalineman.ogg" type="audio/ogg">
<source src="witchitalineman.mp3" type="audio/mpeg">
</audio>
I am a lineman for the county…
Video
Если родное для браузера воспроизведение аудио – это воодушевляюще, то перспектива родного отображения видео в браузере заставляет веб-разработчиков пускать слюнки от нетерпения. По мере того как пропускная способность интернет-каналов возросла, видеосодержимое начало становиться все более и более популярным. Сейчас главная технология для показа видео в вебе – Flash-плагин. Но HTML5 может все это изменить.
Элемент video работает примерно так же, как элемент audio. У него есть необязательные атрибуты autoplay, loop и preload. Вы можете указать расположение видеофайла либо через атрибут src элемента video, либо с помощью элементов source, вложенных внутри открывающих и закрывающих тегов <video>. Вы можете разрешить браузеру отобразить пользовательский интерфейс с помощью атрибута controls или написать свои собственные управляющие элементы.
Главная разница между аудио– и видеосодержимым состоит в том, что фильмы по своей природе будут занимать больше места на экране, поэтому, скорее всего, вам стоит определить размеры элемента:
<video src="movie.mp4" controls width="360" height="240">
</video>
Вы можете выбрать подходящее изображение для видеофайла и указать браузеру, что нужно его отобразить, через атрибут poster (рис. 3.07):
<video src="movie.mp4" controls width="360"height="240" poster="placeholder.jpg">
</video>
Рис. 3.07. Через атрибут poster показывается картинка-заполнитель
Поле битвы конкурирующих видеоформатов «залито кровью» еще сильнее, чем в мире аудио. Из больших игроков нужно назвать MP4 – по уши увязшего в патентах – и Theora Video (здесь все проще). И снова вам нужно будет указать альтернативные форматы и содержимое, которое выводится в том случае, если HTML5 video не поддерживается:
<video controls width="360" height="240"poster="placeholder.jpg">
<source src="movie.ogv" type="video/ogg">
<source src="movie.mp4" type="video/mp4">
<object type="application/x-shockwave-flash"width="360" height="240"data="player.swf?file=movie.mp4">
<param name="movie"value="player.swf?file=movie.mp4">
<a href="movie.mp4">Скачать фильм</a>
</object>
</video>
Авторы спецификации HTML5 изначально надеялись установить некий единый формат видео, который бы поддерживали все. К сожалению, производители браузеров не смогли договориться о едином формате.
Нативный режим
Возможность нативного встраивания видео в веб-страницы – пожалуй, самое заманчивое добавление к HTML со времен введения элемента img. Большие игроки, как, например Google, не стесняются выражать свой энтузиазм на этот счет. Вы можете взглянуть на то, что они приготовили для YouTube, по адресу: http://youtube.com/html5.
Одной из проблем отображения мультимедиа в плагине является то, что содержимое плагина находится в «песочнице», отдельно от всего остального документа. Нативные мультимедиа-элементы в HTML смогут работать в комплексе с остальными браузерными технологиями – JavaScript и CSS. Элементом video можно не только управлять через JavaScript, можно также назначать ему стили (рис. 3.08).
Рис. 3.08. Элемент video с примененными стилями
Попробуйте-ка сделать это с плагином.
Аудио и видео – долгожданные дополнения к HTML5, но веб – не среда вещания, а интерактивная среда. Самый старый и самый мощный способ обеспечивать интерактивность – формы. В главе 4 мы посмотрим на то, какое обновление в HTML5 получили формы.
4. Веб-формы 2.0
Когда в веб-браузерах появился JavaScript, его немедленно стали использовать для двух задач: изменения картинки при наведении мышью и улучшения форм. Когда же в CSS появился псевдокласс :hover, веб-разработчикам перестало быть нужным использовать JavaScript для того, чтобы добиться просто изменения картинки при наведении.
И эта картина зачастую повторяется. Если какое-то типовое действие достаточно популярно, практически наверняка развитие будет идти так, что вместо того чтобы писать собственный скрипт, достаточно будет более декларативного решения. Вот почему в CSS3 появляется еще больше возможностей для анимации из числа тех, что раньше требовали JavaScript.
Когда дело касается улучшения форм, у CSS есть ряд ограничений. Здесь в дело вступает HTML5. Следуя той же самой проторенной дорожкой от программного решения к декларативному, спецификация HTML5 вводит много новых улучшений форм.
Эти функции изначально были частью спецификации WHATWG, которая называлась Веб-формы 2.0 и основывалась на уже проделанной работе в W3C. Эта спецификация теперь включена в HTML5.