Атрибут media тега <source>
Описание
Атрибут media для элемента <source> позволяет задать медиа-запросы, определяющие условия, при которых будет использоваться данный источник мультимедиа. Браузер выбирает первый подходящий <source> в порядке их объявления.
Пример использования:
<picture>
<source media="(min-width: 1200px)" srcset="large.jpg">
<source media="(min-width: 800px)" srcset="medium.jpg">
<img src="small.jpg" alt="Адаптивное изображение">
</picture>
Синтаксис медиа-запросов:
| Тип запроса | Пример | Описание |
|---|---|---|
| Ширина вьюпорта | (min-width: 768px) |
Для экранов шире 768px |
| Высота вьюпорта | (max-height: 600px) |
Для экранов короче 600px |
| Ориентация | (orientation: landscape) |
Горизонтальная ориентация |
| Плотность пикселей | (min-resolution: 2dppx) |
Для экранов высокой плотности |
| Комбинированные | (min-width: 800px) and (orientation: portrait) |
Несколько условий |
Пример с видео:
<video controls>
<source media="(min-width: 1024px)" src="large.mp4" type="video/mp4">
<source media="(min-width: 600px)" src="medium.mp4" type="video/mp4">
<source src="small.mp4" type="video/mp4">
</video>
Рекомендации:
- Располагайте источники от наиболее к наименее специфичным
- Всегда указывайте fallback-элемент (
<img>или последний<source>) - Используйте логические операторы (
and,not,only) для сложных условий - Тестируйте на реальных устройствах с разными характеристиками
- Сочетайте с атрибутами
srcsetиsizesдля изображений
Пример с комбинированными условиями:
<picture>
<source media="(min-width: 1024px) and (orientation: landscape)"
srcset="wide-large.jpg">
<source media="(min-width: 1024px)"
srcset="large.jpg">
<source media="(min-resolution: 2dppx)"
srcset="retina.jpg">
<img src="default.jpg" alt="Сложное адаптивное изображение">
</picture>
Отладка:
- В Chrome DevTools используйте Device Mode для тестирования разных условий
- Проверяйте свойство
currentSrcу элемента для определения выбранного источника - Используйте медиа-запросы, аналогичные вашим CSS-запросам для согласованности
Поддержка браузерами:
Атрибут media поддерживается всеми современными браузерами, включая:
- Chrome 38+
- Firefox 38+
- Safari 9.1+
- Edge 12+
- Opera 25+
Для Internet Explorer используйте полифилы или альтернативные решения.