Skip to content Skip to sidebar Skip to footer

How To Overlay A Cell Over Two Others In A Css3 Grid

I need to be able to overlay an image in the center cell of a CSS3 grid over two other cells : one in the top-right corner and the other on the bottom left corner of the grid. Like

Solution 1:

similar answer to Positioning of a Absolute Element in relation to a responsive image

grid alows you to set a few elements inside a single cell, alignement can be done simply via margin:

example

div.corner {
  display: grid;/* default will be grid of a single column */width:max-content;
  margin:auto;
}

div>* {/* put everything into the same cell */grid-row: 1;
  grid-column: 1;
}

i {
  height: 3rem;
  width: 3rem;
}

.corneri:first-of-type {
  border-top: solid;
  border-right: solid;
  margin: 00 auto auto;
}

.corneri+i {
  border-bottom: solid;
  border-left: solid;
  margin: auto auto 00;
}

img {
  margin: 1em;
}
<divclass="corner"><imgsrc="https://picsum.photos/id/1015/300/200" /><i></i><i></i><!--Why not , are these alike icones ? --></div>

Solution 2:

Use a a couple of pseudo-elements inside a single cell grid and align them as necessary. No additional HTML required.

body {
  text-align: center;
}

div {
  margin:.5em;
  display: inline-grid;
}

img {
  margin:.5em;
  grid-column:1;
  grid-row:1;
}

div:before,
div:after{
  content:"";
  border-width:2px;
  border-style:solid;
  border-color: black transparent transparent black;
  width:2em;
  height:2em;
  grid-column:1;
  grid-row:1
}

div:after {
  justify-self:flex-end;
  align-self:flex-end;
    border-color: transparent black black transparent;
}
<div><imgsrc="http://www.fillmurray.com/300/200"alt=""></div>

Solution 3:

I would go with less code using 2 gradients as background

img {
  --b:5px; /* adjust this */border:10px solid #0000; /* this */background:
    conic-gradient(from 0deg   at var(--b) calc(100% - var(--b)),#000090deg,#0000) bottom left,
    conic-gradient(from 180deg at calc(100% - var(--b)) var(--b),#000090deg,#0000) top right;
  background-size:60px50px; /* and this */background-origin:border-box;
  background-repeat:no-repeat;
}
<imgsrc="https://picsum.photos/id/1069/200/200" >

Solution 4:

Although using css grid to just chuck in L shapes around an image is an overkill, the technique I would use regardless of css grid is css positioning and divs with borders(like you already have). There are other ways also like :before or :after pseudo selectors as well.

.informacion-imagen {
    display: grid;
    grid-gap: 1px;
    grid-template-columns: 3rem min-content 3rem;
    justify-content: center;
}

#img-info {
    width: auto;
    max-width: 320px;
    height: auto;
}

#corner-top-right {
    height: 3rem;
    border-top: 6px solid black;
    border-right: 6px solid black;
    position: relative;
    left: calc(-100% + 15px);
    bottom: calc(-100% + 15px);
}

#corner-bot-left {
    height: 3rem;
    border-bottom: 6px solid black;
    border-left: 6px solid black;
    position: relative;
    right: calc(-100% + 15px);
    top: calc(-100% + 15px);
<divclass="informacion-imagen"><div></div><div></div><divid="corner-top-right"></div><div></div><div><imgid="img-info"aria-hidden="true"src="https://blog.cyclop.in/wp-content/uploads/2020/08/UNNAME1-977x720.jpg"loading="lazy"/></div><div></div><divid="corner-bot-left"></div><div></div><div></div></div>

Take a note of the following addition css I used:

grid-template-columns: 3rem min-content 3rem;
justify-content: center;

Post a Comment for "How To Overlay A Cell Over Two Others In A Css3 Grid"