Верстка редко заканчивается расположением блоков и разметкой текста. Для большей привлекательности дизайнеры используют различные медиаэлементы: изображения, аудио и видео элементы. Все это, вместе с хорошей версткой текста, создает законченный облик макета.
Верстальщику важно знать нюансы вставки различных элементов. От этого зависит как скорость загрузки элементов, так и их корректное отображение на различных устройствах. К примеру, нет нужды подгружать картинку с шириной в 1980px, если разрешение экрана всего 768px по ширине. Обработка лишнего веса картинки ляжет на плечи пользователя, а точнее его интернета.
В этом уроке мы рассмотрим вставку медиаэлементов и то, как HTML помогает нам оптимизировать их загрузку.
Изображения
Изображения — несомненно самый частый медиаэлемент, с которым сталкивается верстальщик. Контекстное изображение, фон — все это является изображением, которое необходимо подгрузить. В зависимости от назначения изображения, оно может быть вставлено с помощью HTML или CSS.
Для вставки изображения с помощью HTML используется специальный тег <img>
. Это непарный тег, основными атрибутами которого являются:
src
— путь до изображения.alt
— альтернативный текст изображения.
<img src="../images/hexlet.png" alt="Логотип Hexlet">
Описание в атрибуте alt
— несправедливо забытый момент в работе верстальщика. Визуально он выдает себя только при сбое загрузки изображения, поэтому, зачастую, его заполняют «как попало». Это плохой тон! Именно этот атрибут считывают скринридеры (устройства для чтения с экрана) для передачи сути изображения. Если описание имеет вид «Картинка 1», то слепые люди никогда не поймут, что же там было.
Важно понимать, что должно быть в атрибуте alt
. Представьте, что не загрузилось изображение, показывающее результаты соц. опроса. Какие варианты описания могут быть?
- Результаты социального опроса — было описано изображение, но не его суть. Так какие в итоге результаты соц. опроса?
- Инфографика — тут уже теряется смысл, а что за инфографика? Если в тексте не было заголовка до нее, то все совсем печально.
- Результаты социального опроса. Windows используют 30% опрошенных. Linux используют 50% опрошенных. 20% используют DOS. Длинное название, но оно полностью раскрывает суть.
Работа с такими описаниями — это сложный момент. Не всегда есть возможность так описывать изображения. Ведь данные могут поступать с сервера и верстальщик уже не может полностью влиять на альтернативный текст. Хорошим тоном является продублировать информацию в виде текста, рядом с изображением. Не стоит полагаться только на визуальное представление, иногда пара строк текста поможет сильнее, чем красивое и детальное изображение.
У изображений, вставленных с помощью тега <img>
есть неприятная особенность — они не сжимаются в зависимости от устройства. Если ваше изображение имеет размер 1280 пикселей, то оно будет таким на любом разрешении экрана и в любом контейнере. Здесь не играет роли даже ограничение контейнера по ширине или высоте.
Размер контейнера в примере выше ограничен 500 пикселями. Чтобы его лучше было видно, мы добавили толстые границы. Как видите, само изображение спокойно ушло за пределы контейнера. Это не то, что хочется. Особенно учитывая большое количество устройств, с которыми приходится сталкиваться верстальщику.
Решить эту проблему позволяют два свойства:
max-width
— максимальная ширина элемента. Указав значение в 100%, вы запретите элементу занимать ширину больше своего родителя.height
— высота. Часто выставляют значениеauto
. Это позволит сохранить правильные пропорции.
Итого получится следующий CSS код, который вы будете очень часто встречать в проектах:
img {
max-width: 100%;
height: auto;
}
Если внимательно приглядеться к примеру, то можно заметить небольшой отступ между картинкой и нижней границей блока. В начале вашей карьеры можно наломать кучу дров в борьбе с этой проблемой. Но она решается очень быстро.
Такой эффект получается из-за свойства vertical-align
, которое отвечает за вертикальное выравнивание элемента. По умолчанию оно имеет значение baseline
. В будущих курсах вы больше узнаете о том, как конкретно происходит такое выравнивание. Сейчас нам важна практическая часть и решение проблемы. Для этого достаточно указать значение middle
для свойства vertical-align
у изображения.
img {
max-width: 100%;
height: auto;
vertical-align: middle;
}
Использование нескольких версий изображения
В HTML существует специальная конструкция, которая позволяет использовать разные версии изображений. Это отличная возможность адаптировать изображения для различных устройств. Основное преимущество заключается в том, что в зависимости от разрешения устройства браузер будет загружать определенное изображение. Для этого используются медиазапросы. Подробнее с ними вы познакомитесь в курсе CSS: Адаптивность.
Для указания нескольких вариантов изображения используется тег <picture>
, который имеет следующую структуру:
<picture>
<source media="медиазапрос_1" srcset="путь_к_изображению_1">
<source media="медиазапрос_2" srcset="путь_к_изображению_2">
<source media="медиазапрос_3" srcset="путь_к_изображению_3">
<img src="hexlet-images.png" alt="Альтернативное описание изображения">
</picture>
- Внутри тега
<picture>
обязательно должен находиться тег<img>
. Это основное изображение, которое будет загружено, если другие варианты не подходят. - В специальном теге
<source>
лежат другие варианты изображений. Они будут подключаться в зависимости от медиазапроса, который указывается в атрибутеmedia
.
<picture>
<source
media="(min-width: 1024px)"
srcset="https://picsum.photos/1280/500"
>
<source
media="(min-width: 700px)"
srcset="https://picsum.photos/700/360"
>
<img src="https://picsum.photos/500/360" alt="Random Images">
</picture>
Перейдите на сайт CodePen и попробуйте изменять размер окна браузера. Вы увидите, что изображение будет меняться на некоторых разрешениях.
Видео и аудио
Вставка видео и аудио файлов с помощью HTML очень похожа на добавление изображений через тег <picture>
. Необходим общий контейнер и несколько элементов <source>
внутри него. Главное отличие — большое количество дополнительных атрибутов, которые позволяют добавлять или удалять интерактивные элементы, а также влиять на предзагрузку.
Видеофайлы
Добавление видео происходит с помощью тега <video>
. Все видеофайлы добавляются внутри этого тега с помощью тегов <source>
. Исключением является ситуация, при которой видеофайл всего один. Тогда его можно добавить в виде атрибута для тега <video>
.
<video src="./video/hexlet-presentation.mp4"></video>
Если видео представлено в нескольких форматах, то все они должны быть указаны через теги <source>
, по аналогии с добавлением изображений.
<video>
<source src="./video/hexlet-presentation.mp4" type="video/mp4">
<source src="./video/hexlet-presentation.webm" type="video/webm">
<source src="./video/hexlet-presentation.ogg" type="video/ogg">
</video>
Можно заметить, что в <source>
находятся одни и те же видео, только в разных форматах. Почему это важно? Дело в том, что не каждый браузер поддерживает все возможные форматы видео. С каждым годом браузеры все улучшают поддержку форматов, но проблема старых браузеров остается актуальной. Наиболее «всеядный» формат для браузеров — mp4. Используя его можно не волноваться за то, что браузер не прочтет видеофайл. При этом разные форматы дают разную степень сжатия и качества. Именно поэтому стоит указывать несколько форматов. Браузер сам выберет необходимый.
Тег <video>
имеет множество интересных атрибутов. Не все из них стоит знать в начале своего пути, но основные из них мы изучим:
autoplay
— Автоматическое воспроизведение видео. Не добавляйте его без крайней необходимости. Всегда хочется показать все лучшее со страницы, но внезапное воспроизведение файла скорее разозлит пользователяcontrols
— добавление интерактивных элементов управления, таких как запуск, остановка, регулировка звукаmuted
— Выключение воспроизведения аудиодорожки. Если в видео важен только визуальный ряд, а фоновая музыка второстепенна, то стоит установить этот атрибут. При необходимости пользователь сам включит звукpreload
— Указание на предзагрузку видео до взаимодействия с ним. Может принимать одно из нескольких значений:metadata
— подгрузка метаданных. К ним относится название видео, его длинаauto
— подгружать видео с самого начала. Если видео является обязательным элементом для просмотра (например, после окончания статьи), то вы можете включить подзагрузку. Пока пользователь прочитает статью, видео для него уже будет загружено. Будьте аккуратны, думайте о пользователях с мобильным интернетомnone
— не загружать видео до момента взаимодействия с пользователем
poster
— Ссылка на изображение, которое будет использовано в виде превью видео
Добавим некоторые атрибуты к видео и посмотрим, как они сработают:
<video controls muted preload="none">
<source src="big_buck_bunny.webm" type="video/webm">
<source src="big_buck_bunny.ogg" type="video/ogg">
</video>
Аудиофайлы
Процесс вставки аудиофайлов почти не отличается от вставки видеофайла. Используя тег <audio>
можно задать как один файл, так и несколько, с помощью вложенных тегов <source>
.
<audio src="audio.mp3" controls></audio>
<audio controls>
<source src="audio.mp3" type="audio/mpeg">
<source src="audio.ogg" type="audio/ogg">
</audio>
Самостоятельная работа
Создайте HTML файл, внутри которого разместите несколько медиаэлементов, которые вы найдете на своем компьютере. Попробуйте использовать различные атрибуты.
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
- Статья «Как учиться и справляться с негативными мыслями»
- Статья «Ловушки обучения»
- Статья «Сложные простые задачи по программированию»
- Вебинар «Как самостоятельно учиться»
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.