Inputting a default image in case the src attribute of an html

后端 未结 22 2089
渐次进展
渐次进展 2020-11-22 16:02

Is there any way to render a default image in an HTML tag, in case the src attribute is invalid (using only HTML)? If not, what would

相关标签:
22条回答
  • 2020-11-22 16:35

    I don't think it is possible using just HTML. However using javascript this should be doable. Bassicly we loop over each image, test if it is complete and if it's naturalWidth is zero then that means that it not found. Here is the code:

    fixBrokenImages = function( url ){
        var img = document.getElementsByTagName('img');
        var i=0, l=img.length;
        for(;i<l;i++){
            var t = img[i];
            if(t.naturalWidth === 0){
                //this image is broken
                t.src = url;
            }
        }
    }
    

    Use it like this:

     window.onload = function() {
        fixBrokenImages('example.com/image.png');
     }
    

    Tested in Chrome and Firefox

    0 讨论(0)
  • 2020-11-22 16:37

    In addition to Patrick's brilliant answer, for those of you who are searching for a cross-platform angular js solution, here you go:

    <object type="image/png" data-ng-attr-data="{{ url || 'data:' }}">
        <!-- any html as a fallback -->
    </object>
    

    Here's a plunk where I was playing trying to find the right solution: http://plnkr.co/edit/nL6FQ6kMK33NJeW8DVDY?p=preview

    0 讨论(0)
  • 2020-11-22 16:38

    An HTML only solution, where the only requirement is that you know the size of the image that you're inserting. Will not work for transparent images, as it uses background-image as a filler.

    We can successfully use background-image to link the image that appears if the given image is missing. Then the only problem is the broken icon image - we can remove it by inserting a very big empty character, thus pushing the content outside the display of img.

    img {
      background-image: url("http://placehold.it/200x200");
      overflow: hidden;
    }
    
    img:before {
      content: " ";
      font-size: 1000px;
    }
    This image is missing:
    <img src="a.jpg" style="width: 200px; height: 200px"/><br/>
    And is displaying the placeholder


    An CSS only solution (Webkit only)

    img:before {
      content: " ";
      font-size: 1000px;
      background-image: url("http://placehold.it/200x200");
      display: block;
      width: 200px;
      height: 200px;
      position: relative;
      z-index: 0;
      margin-bottom: -16px;
    }
    This image is there:
    <img src="http://placehold.it/100x100"/><br/>
    
    This image is missing:
    <img src="a.jpg"/><br/>
    And is displaying the placeholder

    0 讨论(0)
  • 2020-11-22 16:39

    Found this solution in Spring in Action 3rd Ed.

    <img src="../resources/images/Image1.jpg" onerror="this.src='../resources/images/none.jpg'" />

    Update: This is not an HTML only solution... onerror is javascript

    0 讨论(0)
提交回复
热议问题