htmlcsssvg

Position SVG elements over an image


Is it possible to have the following elements and style them so that the SVG objects appear over the image (i.e. like part of the image)?

Currently they are displayed below it on a new row.

I know I could set the image as a background image of the parent div, but unfortunately I also need to be able to rotate it within the parent so I don't think that is an option.

<div id='edit-area' style='position:relative; overflow:none; display:inline-block; border: 1px black solid; width: 950px; height: 500px;'>
    <img src='/my_image.png' />
    <svg id="edit-svg" height="500" width="950">
        <!-- there will be lines, rectangles etc in here -->
    </svg>
</div>

Solution

  • Here's a generic example of how to do an image overlay. Basically you wrap the image and the overlay content in a relative positioned element and then absolute position the overlay content.

    .img-overlay-wrap {
      position: relative;
      display: inline-block; /* <= shrinks container to image size */
      transition: transform 150ms ease-in-out;
    }
    
    .img-overlay-wrap img { /* <= optional, for responsiveness */
       display: block;
       max-width: 100%;
       height: auto;
    }
    
    .img-overlay-wrap svg {
      position: absolute;
      top: 0;
      left: 0;
    }
    
    .img-overlay-wrap:hover {
      transform: rotate( 15deg );
    }
    <div class="img-overlay-wrap">
    
      <img src="https://placehold.co/400x400">
      <svg viewBox="0 0 200 200">
        <circle cx="75" cy="75" r="50" fill="rebeccapurple"/>
      </svg>
    
    </div>

    Added a bit-o rotation fun since you mentioned rotation (might be different than what you intended).