CSS или Javascript - отображать резервный текст, если фоновое изображение не загружено

Как отображать текст вместо логотипа, если графический файл логотипа не загружен или отсутствует? У меня есть div с фоновым изображением PNG:

<div class="iHaveBgImage">
this text should be displayed if bg image is not loaded
</div>

.iHaveBgImage { background-image: url('img.png') }

Он не должен быть чистым CSS, разрешение Javascript разрешено. Я думал о событии onerror, но он работает с изображениями, а не с элементами, которые имеют фоновые изображения.

EDIT: Мне сказали, что на это уже был дан ответ, но есть и другая ситуация. Я не сказал, что можно изменить DOM, применять CSS и JS. Во-вторых, в том, что другое решение sugested, я должен использовать атрибут title, и я попробовал его, и он не отображает текст, но только его.

Ответ 1

Попробуйте так:

HTML

<div class="iHaveBgImage">
  <p>this text should be displayed if bg image is not loaded</p>
</div>

CSS

.iHaveBgImage { background-image:
url('https://s31.postimg.org/yqv51r5xn/6936671_hd_wallpapers_for_ipad.jpg');
color:red;
}

.iHaveBgImage > p {
  position: relative;
  z-index: -1;
}

Работает отлично https://jsfiddle.net/s0gt2eng/

Ответ 2

Это то, что я предложил в дублирующем теге:

.iHaveBgImage{
  width:500px;
  height:200px;
  background-image: url('http://www.menucool.com/slider/jsImgSlider/images/image-slider-5.jpg');
  }
<div class="iHaveBgImage" title="this text should be displayed if bg image is not loaded">
</div>

Ответ 3

Обходным путем для этого было бы изменить

<div class="iHaveBgImage">
this text should be displayed if bg image is not loaded
</div>

.iHaveBgImage { background-image: url('img.png') }

To:

<img src="img.png" alt="Seems like this image failed to load" />

В качестве альтернативы я не уверен, что следующее будет работать, но вы можете MAYBE сделать что-то в соответствии с:

<img class="iHaveBgImage" alt="Seems like this image failed to load" />

.iHaveBgImage { background-image: url('img.png') }

РЕДАКТИРОВАТЬ: Что-то, что только что появилось в моей голове, которое могло бы также работать, состояло в следующем:

<div class="iHaveBgImage">
<p class="bgText">this text should be displayed if bg image is not loaded</p>
</div>

.iHaveBgImage { 
background-image: url('img.png') 
}
.bgText {
  z-index: -9999;
}

Ответ 4

Попробуйте это

P.hidden {
    visibility: hidden;
}
.iHaveBgImage {
  background-image: url('https://s31.postimg.org/yqv51r5xn/6936671_hd_wallpapers_for_ipad.jpg');
  color: red;
width:700px;
  height:300px;
}
<div class="iHaveBgImage">
   <p class="hidden> This text should be displayed if bg image is not loaded</p>
</div>