HeelMega
HeelMega

Reputation: 518

Overlay to be the same shape as the image

I need overlay to be the same shape as the image but the overlay is covering the whole container. I need it to be rounded and the same size as the image.

I tried removing the width 100% on the overlay but then the overlay doesn't appear at all. What am I doing wrong? Any help would be appreciated.

HTML:

<div class="imgoverlay text-light"><img src="https://www.ardenestates.co.uk/resource/team-photos/andy-lansbury-headshot.png">
  <div class="overlay"><span class="overlaycolor"></span>
    <div class="overlayinfo" style="margin-top: -14px;">
      <ul class="socialmedia-widget">
        <li><a href="https://twitter.com" target="_blank"><i class="fab fa-twitter"></i></a></li>
      </ul>
    </div>
  </div>
</div>

CSS:

.imgoverlay {
  position: relative;
  overflow: hidden;
  display: block;
  max-width: 100%;
}

.imgoverlay img {
  -webkit-transition: all 0.4s ease;
  -moz-transition: all 0.4s ease;
  -o-transition: all 0.4s ease;
  -ms-transition: all 0.4s ease;
  transition: all 0.4s ease;
  border-radius: 100%;
}

.imgoverlay .overlay {
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0;
  left: 0;
  z-index: 0;
  opacity: 0;
  filter: alpha(opacity=0);
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
  -webkit-transition: opacity 0.3s ease;
  -moz-transition: opacity 0.3s ease;
  -o-transition: opacity 0.3s ease;
  -ms-transition: opacity 0.3s ease;
  transition: opacity 0.3s ease;
}

.imgoverlay .overlaycolor {
  width: 100%;
  height: 100%;
  background: #000000;
  position: absolute;
  top: 0;
  left: 0;
  z-index: 0;
  opacity: 0.8;
  filter: alpha(opacity=80);
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)";
}

.imgoverlay .overlayinfo {
  width: 100%;
  text-align: center;
  display: block;
  position: absolute;
  top: 45%;
  left: 0;
  -webkit-transition: top 0.3s ease;
  -moz-transition: top 0.3s ease;
  -o-transition: top 0.3s ease;
  -ms-transition: top 0.3s ease;
  transition: top 0.3s ease;
}

.imgoverlay:hover img {
  transform: scale(1.07);
  -ms-transform: scale(1.07);
  -webkit-transform: scale(1.07);
}

.imgoverlay:hover .overlay {
  opacity: 1;
  filter: alpha(opacity=100);
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
}

JSFiddle Demo

Upvotes: 1

Views: 45

Answers (2)

Foysal Remon
Foysal Remon

Reputation: 301

Make the .imgoverlay display to inline-block and give the border-radius: 100%;(50% is enough) on .imgoverlay not on img. So your CSS should be

.imgoverlay {
  position: relative;
  overflow: hidden;
  display: inline-block;
  max-width: 100%;
  border-radius: 100%;
}

.imgoverlay img {
  -webkit-transition: all 0.4s ease;
  -moz-transition: all 0.4s ease;
  -o-transition: all 0.4s ease;
  -ms-transition: all 0.4s ease;
  transition: all 0.4s ease;
}

.imgoverlay .overlay {
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0;
  left: 0;
  z-index: 0;
  opacity: 0;
  filter: alpha(opacity=0);
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
  -webkit-transition: opacity 0.3s ease;
  -moz-transition: opacity 0.3s ease;
  -o-transition: opacity 0.3s ease;
  -ms-transition: opacity 0.3s ease;
  transition: opacity 0.3s ease;
}

.imgoverlay .overlaycolor {
  width: 100%;
  height: 100%;
  background: #000000;
  position: absolute;
  top: 0;
  left: 0;
  z-index: 0;
  opacity: 0.8;
  filter: alpha(opacity=80);
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)";
}

.imgoverlay .overlayinfo {
  width: 100%;
  text-align: center;
  display: block;
  position: absolute;
  top: 45%;
  left: 0;
  -webkit-transition: top 0.3s ease;
  -moz-transition: top 0.3s ease;
  -o-transition: top 0.3s ease;
  -ms-transition: top 0.3s ease;
  transition: top 0.3s ease;
}

.imgoverlay:hover img {
  transform: scale(1.07);
  -ms-transform: scale(1.07);
  -webkit-transform: scale(1.07);
}

.imgoverlay:hover .overlay {
  opacity: 1;
  filter: alpha(opacity=100);
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
}

Upvotes: 2

Jordan Quartermain
Jordan Quartermain

Reputation: 652

Try this

.imgoverlay {
  position: relative;
  overflow: hidden;
  display: inline-block;
  max-width: 100%;
  border-radius: 50%;
}

.imgoverlay img {
  -webkit-transition: all 0.4s ease;
  -moz-transition: all 0.4s ease;
  -o-transition: all 0.4s ease;
  -ms-transition: all 0.4s ease;
  transition: all 0.4s ease;
  border-radius: 100%;
  display: block;
}

.imgoverlay .overlay {
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0;
  left: 0;
  z-index: 0;
  opacity: 0;
  filter: alpha(opacity=0);
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
  -webkit-transition: opacity 0.3s ease;
  -moz-transition: opacity 0.3s ease;
  -o-transition: opacity 0.3s ease;
  -ms-transition: opacity 0.3s ease;
  transition: opacity 0.3s ease;
}

.imgoverlay .overlaycolor {
  width: 100%;
  height: 100%;
  background: #000000;
  position: absolute;
  top: 0;
  left: 0;
  z-index: 0;
  opacity: 0.8;
  filter: alpha(opacity=80);
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)";
}

.imgoverlay .overlayinfo {
  width: 100%;
  text-align: center;
  display: block;
  position: absolute;
  top: 45%;
  left: 0;
  -webkit-transition: top 0.3s ease;
  -moz-transition: top 0.3s ease;
  -o-transition: top 0.3s ease;
  -ms-transition: top 0.3s ease;
  transition: top 0.3s ease;
}

.imgoverlay:hover img {
  transform: scale(1.07);
  -ms-transform: scale(1.07);
  -webkit-transform: scale(1.07);
}

.imgoverlay:hover .overlay {
  opacity: 1;
  filter: alpha(opacity=100);
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
}
<div class="imgoverlay text-light"><img src="https://www.ardenestates.co.uk/resource/team-photos/andy-lansbury-headshot.png">
  <div class="overlay"><span class="overlaycolor"></span>
    <div class="overlayinfo" style="margin-top: -14px;">
      <ul class="socialmedia-widget">
        <li><a href="https://twitter.com" target="_blank"><i class="fab fa-twitter"></i></a></li>
      </ul>
    </div>
  </div>
</div>

Upvotes: 0

Related Questions