Основы вёрстки контента

Медиаэлементы

Вёрстка редко заканчивается расположением блоков и разметкой текста. Для большей привлекательности дизайнеры используют различные медиаэлементы: изображения, аудио и видео элементы. Всё это, вместе с хорошей вёрсткой текста, создаёт законченный облик макета.

Верстальщику важно знать нюансы вставки различных элементов. От этого зависит как скорость загрузки элементов, так и их корректное отображение на различных устройствах. К примеру, нет нужды подгружать картинку с шириной в 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://www.fillmurray.com/1280/500">
    <source media="(min-width: 700px)" srcset="https://www.fillmurray.com/700/360">

    <img src="https://www.fillmurray.com/500/360" alt="Bill Murray">
  </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 — Указание на предзагрузку видео до взаимодействия с ним. Может принимать одно из нескольких значений:
    1. metadata — подгрузка метаданных. К ним относится название видео, его длина.
    2. auto — подгружать видео с самого начала. Если видео является обязательным элементом для просмотра (например, после окончания статьи), то вы можете включить подзагрузку. Пока пользователь прочитает статью, видео для него уже будет загружено. Будьте аккуратны, думайте о пользователях с мобильным интернетом.
    3. none — не загружать видео до момента взаимодействия с пользователем.
  • poster — Ссылка на изображение, которое будет использовано в виде превью видео.

Добавим некоторые атрибуты к видео и посмотрим, как они сработают.

<video controls muted preload="none">
  <source src="big_buck_bunny.webm" type="video/webm">
  <source src="big_buck_bunny.ogv" 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 файл, внутри которого разместите несколько медиаэлементов, которые вы найдёте на своём компьютере. Попробуйте использовать различные атрибуты.


<span class="translation_missing" title="translation missing: ru.web.courses.lessons.mentors.mentor_avatars">Mentor Avatars</span>

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.
Об обучении на Хекслете

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 115 курсов, 2000+ часов теории
  • 800 практических заданий в браузере
  • 250 000 студентов

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг».

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Rambler
Логотип компании Bookmate
Логотип компании Botmother

Есть вопрос или хотите участвовать в обсуждении?

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг».