Заменить недоступные изображения с помощью CSS?

Можно ли заменить стандартное неработающее изображение с помощью CSS или другим способом? Все мои изображения имеют одинаковый размер и прозрачность.

Я попытался обернуть все изображения фоном div:

<div class = "no_broken">
  <img src = "http://www.web.com/found.gif"/>
</div>

<div class = "no_broken">
  <img src = "http://www.web.com/notfound.gif"/>
</div>

CSS:

div.no_broken { 
  background-image: url(standard.gif); 
}

div.no_broken, div.no_broken img { 
  width: 32px; 
  height: 32px; 
  display: block; 
}

Но это отобразит два изображения друг над другом, если IMG будет прозрачным.

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
21
0
18 314
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Насколько мне известно, не существует свойства CSS, управляющего отображением битых изображений. Может быть, есть специфичные для браузера свойства? Возможно, вам придется прибегнуть к Javascript для перебора изображений на странице и замены их src, если они сломаны.

Я не знаю, какую технологию вы используете, но в ASP.net есть что-то, что называется адаптерами управления.

Я использовал это, чтобы захватить PreRender всех изображений и заменить imageurl, если imageurl не полный.

Я не знаю, относится ли это вообще к вашей ситуации и, конечно, не сработает, когда на пути есть путь, но нет изображения.

Ответ принят как подходящий

Это работает без CSS:

<img src = "some.jpg" onerror = "this.src='alternative.jpg';">

Кажется, работает даже при отключенном Javascript.

это странно. для меня похоже на javascript: / Ну ладно. это не первая и не последняя странная функция в браузерах

Gene 04.11.2008 16:29

ЭТО не работает, когда JavaScript отключен. И это вызовет бесконечный цикл, если альтернативный jpg будет случайно пропущен.

asiby 15.04.2013 01:49

Чтобы сделать это исключительно с помощью CSS, вы можете проверить эту ссылку developer.mozilla.org/en-US/docs/CSS/:-moz-broken, а затем найти эквивалент для других браузеров, на которые вы нацеливаетесь.

asiby 15.04.2013 01:56

Это будет работать, но если образы alternative.jpg также недоступны, браузер будет делать бесконечное количество запросов на них. По этой причине я предпочитаю ответ из брошюры ниже.

cmorris 10.03.2015 04:39

Чтобы исключить бесконечное количество запросов для alternative.jpg, измените обработчик ошибок на этот: <img src = "some.jpg" onerror = "this.onerror=''; this.src='alternative.jpg';">

kmoser 08.06.2015 19:36

Если вы хотите добавить в смесь некоторый javascript, это должно хорошо работать с jQuery для обнаружения ошибок изображения и добавления какого-либо класса CSS состояния ошибки к неработающим изображениям.

$(document).ready(function () {
    $('.no_broken img').error(function () {
        $(this).addClass('broken');
    });
});

И тогда в вашем CSS может быть что-то вроде

div.no_broken, div.no_broken img { 
  width: 32px; 
  height: 32px; 
  display: block; 
}

div.no_broken img.broken {
    background-image: url(standard.gif);
    content:"";
}

Мне это нравится, но установка content: "" или display: none сломанного образа вызвала у меня другие проблемы с компоновкой. Использование opacity: 0 решило эту проблему.

cmorris 10.03.2015 04:41

Думал, что упакую комментарий от Kmoser в ответ. Очистить обработчик ошибок onerror - хорошая идея, поскольку возможны циклы.

Javascript

function epic(c) {
    c.onerror='';
    c.src='alternative.jpg';
};

HTML

<img src='some.jpg' onerror='epic(this)'>

Мы добавляем эту эпическую функцию во все наши теги изображений сейчас на Twiends, так как мы загружаем множество изображений социальных профилей, срок действия которых истекает в какой-то момент в будущем.

Да, вы можете заменить изображение на CSS, используя уловку псевдоселекторов.

Обычно ::before и ::after применяются только тогда, когда изображение не загружается. Вы можете использовать абсолютное позиционирование, чтобы разместить псевдоэлемент CSS над заполнителем сломанного изображения:

img {
    position: relative;
    width: 200px;
    height: 200px;
    display: inline-block;
    vertical-align: text-bottom;
}

    img::before {
        content: 'fall back';
        position: absolute;
        top: 0;
        left: 0;
        bottom: 0;
        right: 0;
        line-height: 200px;
        background-color: #fd0;
        color: currentColor;
        text-align: center;
        border-radius: 2px;
        display: block;
        width: 200px;
        height: 200px;
        overflow: hidden;
    }
<img src = "not-found">
<img src = "https://via.placeholder.com/200">

Этот фрагмент вообще не работает без JS, но работает только в новых браузерах.

Невероятный. Я предполагаю, что свойство :: before закрывает стандартный значок ошибки. Великолепный.

Polyducks 19.12.2018 14:58

Хотя принятый ответ мог быть точным в то время, это лучшее текущее решение. Это должен быть новый выбранный ответ.

Aaron Cicali 25.06.2019 22:09

Другие вопросы по теме