Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How to lay an image over an image in table cell

I’m trying to lay an image on top of an image in a table cell (if you click on it).

<table>
  <tr>
    <td style="background-color:Gray;"><a id="firstcell" onclick="addImage"><img scr="snowman.png"></a></td>
  </tr>
...
</table>

Here is the addImage function:

function showMoves(fig_name,pos) {
        var image = document.createElement("img");
        var imageParent = document.getElementById("firstcell");

        image.src = "circle.png";
        image.style.position = "absolute";

        imageParent.appendChild(image);
    }

I tried it with absolute position, but it is on the right side of the table cell and not directly on top.
enter image description here

I clicked on the Lightgray cell and it place it over the gray one.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

The important thing is to add the circle with a function that is executed when you click on the snowman and the circle has to be above. Or is there a different way to mark cells in a table?

>Solution :

It’s much easier to assign a class to the image and then style that class as per the code below:

window.onload = () => {
  document.getElementById('firstcell').addEventListener('click',addImage);  //I've moved this from the 'onclick' attribute in your html to the window.onload event. It's better practice.
}

function addImage() {
  var image = document.createElement("img");
  var imageParent = document.getElementById("firstcell");

  image.src =  "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAAAAABVicqIAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAyNSBKYW4gMjAyMyAxNzozMTozNyAtMDAwMLY8BBsAAAAHdElNRQfnARkRICUUgImdAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAAAJ0Uk5TAP9bkSK1AAAB3ElEQVR42u2a0Q7DIAhFhf//5y5L1lUUFZTrtmY8LJmKx0trq1I6ksfo+eNzeXqZPUj+9ZBsENKLraAxhPrVFtAIogWpxI7H2WtB/X4G1SaIoQ8jpgmx+luatSBkioMEtQUfU26+IakQjwzLqDSInzFwqiHeUBkoFWRKxsCzhMwz3s61bwFpNVujsNJ0mvHyrB6pEjL3ThpSBGSZ0aDkELL3NaJ0lKwLSeorJ4MEBKtBuSAhwdKDwYP6acvHzKIwiFF2w73KKClcF8VL4XbVKuUaN8sKjL0gsdEqpfBCR04l4UI0yCkw2M6xw8KVj5m1wmjjXBZKCtdFgUYSArVtEPAsgSshNOS6l2514Slh5/vNwvWHuCBy+fLLSn4aoq4gEXa8IdhnCl7JByCYiXJkEMhFUXZa0DkPuybq7hch5bwMLP6BbOctHC5FrE7KAxykkmiKXGZh9iedk7vYgCk7LT3HEyOkvIUxJ2uIfXzvXDgqYPXxHKtNYhnx513aIOvjwTUpakpAhmuZoqcduNkyjvGRJM2edNOexNmsGF8KcIriT2buScs6xUwmmFM+WXCpcpv/atJf9lH106lyQpLtEbP2IYYFE/FJSRcU93FMAxT/mc+i3W/3+4d8D+QBTk2Hi2UsNw8AAAAASUVORK5CYII="; //this is just a png of a circle encoded in to base 64 so it'll work on this site 
  image.className = "overlay"; //rather than using inline styles, just set the classname to overlay and then you can use as much css as you like to get the effect you want.
  imageParent.appendChild(image);
}
img { 
display: block; /* remove that annoying space at the bottom of inline items */
}

td {
  position: relative; /* this creates a new containing block so we can position the overlay image relative to the table cell */
}

.overlay {
  position: absolute;
  left: 3px; /* 3px from the left of the table cell and... */
  top:5px; /* 5px from the left of the table cell and... */
}
<table>
  <tr>
    <td style="background-color:Gray;"><a id="firstcell"><img src="https://picsum.photos/id/64/100/100"></a></td>
  </tr>
</table>
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading