Auto width and height for SVG image

前端 未结 3 403
南方客
南方客 2021-02-07 04:36

I am new to SVG, so sorry if this is a bit of a noob question. I am trying to figure out how to get an image to display with the full width and height of the refere

相关标签:
3条回答
  • 2021-02-07 05:03

    I don't think 'auto' is a valid value for the 'length' attr of a svg image element. Take a look at the spec here. You might want to use '100%'

    You could load the image then inspect the width and height onload.

    JSFiddle: http://jsfiddle.net/WQBPC/4/

    var logoUrl = 'http://placehold.it/100x50&text=Logo';
    
    //SVG Setup stuff
    var svg =  d3.select("body").append("svg")
      .attr('id','mySVG')
      .attr({
          "width": '100%',
          "height": '100%'
      })
    
    var svg_img=  svg.append('image')
      .attr('image-rendering','optimizeQuality')
      .attr('x','0')
      .attr('y','0');
    
    //Load image and get size.
    var img = new Image();
    img.src = logoUrl;
    img.onload = function() {
     var width = this.width;
     var height = this.height;
    
     svg_img .attr('height', height)
      .attr('width',width)
      .attr('xlink:href', logoUrl)
    
    }
    
    0 讨论(0)
  • 2021-02-07 05:11

    It's a couple years since this has been asked but I'm currently trying to determine some things about the use of auto as a value for width or height myself and thought I would share what I've found. According to Amelia Bellamy-Royds' 2015 article on scaling SVGs and the codepen example she provides, if you put auto in as either the width or the height value of your <svg>, along with a value for the viewBox, you should be able to see the content scaling proportionately. Unfortunately, she also points out that at the time this only worked in "Blink/Firefox" browsers. Blink is a fork of part of WebKit, so it's possible that by now Chrome will support this as well. I am seeing behavior in Chrome which would seem to support this possibility, but I'm also getting an error so YMMV.

    0 讨论(0)
  • 2021-02-07 05:24
    d3.select("svg")
      .append("image")
        .attr("id", "myImage")
        .attr("xlink:href", "myImage.png")
        .on("load", function(d) { 
            var myImage = new Image();
            myImage.onload = function() {
                d3.select("#myImage")
                    .attr("width", this.width)
                    .attr("height", this.height);
            }
            myImage.src = "myImage.png";
        });
    
    0 讨论(0)
提交回复
热议问题