Как установить стандартное изображение при неверном src в HTML
Быстрый ответ
Если при загрузке основного изображения в теге <img>
возникают проблемы, специальный атрибут onerror
позволит заменить его альтернативным:
<img src="broken.jpg" onerror="this.src='default.png';" alt="описание" />
В данном случае, если broken.jpg
не удалось загрузить, используется запасное default.png
. Это гарантирует плавный переход на альтернативное изображение и улучшает пользовательский опыт.
Использование HTML-тега Object
Интересной альтернативой может стать тег <object>
, в который можно вложить тег <img>
для случая недоступности основного изображения:
<object data="image.jpg" type="image/jpeg">
<img src="default.png" alt="описание" />
</object>
Если загрузка image.jpg
не происходит, пользователь увидит default.png
. В свою очередь, поддержка тега <object>
большинством браузеров делает его надёжным инструментом.
Игрушки с подменой изображений: делаем процесс интерактивным
Такой подход к обработке ошибок возможно превратить в творческую игру:
<!-- Кто живет здесь, вообще-то? -->
<object data="easterbunny.jpg" type="image/jpeg">
<!-- Ой, да это же Пасхалка! -->
<img src="eastereggs.png" alt="описание" />
</object>
Работаем с CSS: появление и исчезновение изображения
Создадим псевдоэлемент с изображением-гвоздикой, используя :before
и content
в CSS:
.img-container:before {
content: url('default.png');
display: none;
}
.img-container img {
display: block;
}
.img-container img:invalid + :before {
display: block;
/* А вот и наша гвоздика! */
}
Таким образом, для контейнера .img-container
предусмотрено запасное изображение, которое "оживает" с помощью CSS, когда основное отсутствует.
Расширяем горизонты: тег <picture>
Для создания адаптивных изображений применяется <picture>
в компании с элементами <source>
:
<picture>
<source srcset="hero-image.webp" type="image/webp" />
<source srcset="hero-image.jpg" type="image/jpeg" />
<img src="default.png" alt="Главное изображение" />
</picture>
Браузер выберет лучший вариант из доступных источников. Если же ни одно изображение не подходит, будет использовано запасное из img
.
Будьте в тренде: адаптивность — наше всё
Атрибут media
позволяет выбрать наиболее подходящее изображение в зависимости от размера экрана:
<picture>
<source media="(min-width: 800px)" srcset="large.jpg" />
<source media="(max-width: 799px)" srcset="small.jpg" />
<img src="default.png" alt="описание" />
</picture>
Человечность прежде всего: альтернативный текст
При формулировке альтернативного текста в атрибуте alt старайтесь быть конкретными и описательными. Это улучшит доступность:
<img src="broken.jpg" onerror="this.src='default.png';" alt="Добрые слова бывают дороже золота." />
Надёжный механизм onerror
Если вы не используете JavaScript, можете интегрировать обработку ошибки прямо в тег <img>
:
<img src="image.jpg" onerror="if(this.src != 'default.png') this.src='default.png';" alt="Illustration description" />
Обязательно убедитесь, что в скрипте onerror
сработает условие, чтобы избежать зацикливания ошибок.
Впереди планеты всей: проверяем и учитываем совместимость
Перед применением любого подхода не забудьте проверить поддерживает ли ваши теги браузер, воспользовавшись, например, ресурсом Can I Use.
Играемся с оттенками в CSS
С помощью CSS-классов можно с лёгкостью контролировать различные ситуации, указав для них стандартные изображения:
.img-error {
background: url('default.png') no-repeat center center;
display: inline-block; /* или block, если вам больше нравится */
}
Так, даже если возникли проблемы с главным изображением, вы получите стильный результат:
<img src="broken.jpg" class="img-error" alt="описание" />
jQuery всегда готов помочь
Используйте jQuery для динамической замены повреждённых изображений:
$('img').on('error', function() {
if (this.src !== 'default.png') {
this.src = 'default.png';
}
});
Несмотря на потребность в jQuery, этот скрипт является гибким и быстрым за счёт своей динамичности.
Демонстрируем возможности CSS
Сделайте свой проект более лёгким, используя CSS для обработки ошибок загрузки:
.img-error:after {
content: '';
background-image: url('default.png');
/* сюда добавьте дополнительные стили для контейнера */
}
Если вы стараетесь минимизировать использование JavaScript, CSS может стать отличным решением для вас.
onerror
идёт на помощь
onerror
может без лишних сложностей заменить src
в <img>
на картинку по умолчанию, если произойдёт ошибка загрузки:
<img src="image.jpg" onerror="this.onerror=null;this.src='default.png';" alt="описание" />
Добавление дополнительной проверки onerror
предотвратит бесконечный цикл загрузки нестабильного изображения.
Визуализация
Представьте HTML-элемент как картину в раме:
Рама 🖼️: |______|
Вот наша рама без идеальной картины (src):
<img src="starrynight.jpg" onerror="this.src='empty_frame.jpg';" />
В таком случае за рамой всегда находится запасное изображение:
Рама 🖼️: |🌌 (starrynight.jpg)|
|🖼️ (empty_frame.jpg) — на всякий случай|
Таким образом обеспечивается непрерывность дизайна стены (веб-страницы), незаметно скрывая отсутствие основного произведения искусства.