<!-- Dribbble Inspiration - https://dribbble.com/shots/4889899-hover-infos -->

<div class="container">
  <div class="card">
    <div class="card--image">
      <img src="https://source.unsplash.com/-HxIhfS_dUk" alt="image">
    </div>
    <div class="card--info info--1">
      <span class="info--text">SPACIOUS</span>
      <div class="icon">
        <ion-icon name="add-outline"></ion-icon>
      </div>
      <div class="info--image">
        <img src="https://source.unsplash.com/-HxIhfS_dUk" alt="info image">
      </div>
    </div>
    <div class="card--info info--2">
      <span class="info--text">ACCESSIBLE</span>
      <div class="icon">
        <ion-icon name="add-outline"></ion-icon>
      </div>
      <div class="info--image">
        <img src="https://source.unsplash.com/-HxIhfS_dUk" alt="info image">
      </div>
    </div>
  </div>
</div>


<div class="support">
  <a href="https://twitter.com/DevLoop01" target="_blank"><i class="fab fa-twitter-square"></i></a>
  <a href="https://dribbble.com/devloop01" target="_blank"><i class="fab fa-dribbble"></i></a>
</div>
* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

body {
  width: 100%;
  height: 100vh;
  display: flex;
  justify-content: center;
  align-items: center;
  background: #db747a;
  overflow: hidden;
}

.card {
  position: relative;
  width: 260px;
  height: 320px;
  box-shadow: 0 2.8px 2.2px rgba(0, 0, 0, 0.014), 0 6.7px 5.3px rgba(0, 0, 0, 0.02),
    0 12.5px 10px rgba(0, 0, 0, 0.025), 0 22.3px 17.9px rgba(0, 0, 0, 0.03),
    0 41.8px 33.4px rgba(0, 0, 0, 0.036), 0 100px 80px rgba(0, 0, 0, 0.05);

  &--image {
    width: 100%;
    height: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
    overflow: hidden;
    img {
      width: 140%;
      height: 140%;
      object-fit: cover;
    }
  }

  &--info {
    --size: 20px;
    width: var(--size);
    height: var(--size);
    background: rgba(0, 0, 0, 0.75);
    border-radius: 2px;
    position: absolute;
    transition: width 550ms ease, height 550ms ease, right 550ms ease, background 550ms ease;
    overflow: hidden;
    box-shadow: 0 2.8px 2.2px rgba(0, 0, 0, 0.014), 0 6.7px 5.3px rgba(0, 0, 0, 0.02),
      0 12.5px 10px rgba(0, 0, 0, 0.025), 0 22.3px 17.9px rgba(0, 0, 0, 0.03),
      0 41.8px 33.4px rgba(0, 0, 0, 0.036), 0 100px 80px rgba(0, 0, 0, 0.05),
      0 0px 2.2px rgba(0, 0, 0, 0.045), 0 0px 5.3px rgba(0, 0, 0, 0.065),
      0 0px 10px rgba(0, 0, 0, 0.08), 0 0px 17.9px rgba(0, 0, 0, 0.095),
      0 0px 33.4px rgba(0, 0, 0, 0.115), 0 0px 80px rgba(0, 0, 0, 0.16),
      0 0.2px 2.2px rgba(0, 0, 0, 0.014), 0 0.6px 5.3px rgba(0, 0, 0, 0.02),
      0 1.1px 10px rgba(0, 0, 0, 0.025), 0 2px 17.9px rgba(0, 0, 0, 0.03),
      0 3.8px 33.4px rgba(0, 0, 0, 0.036), 0 9px 80px rgba(0, 0, 0, 0.05);

    &::after {
      content: "";
      position: absolute;
      left: 0;
      top: 0;
      width: 100%;
      height: 100%;
      background: linear-gradient(
        to top,
        rgba(0, 0, 0, 0.65) 0%,
        rgba(0, 0, 0, 0.25) 50%,
        transparent 100%
      );
      z-index: 1;
      opacity: 0;
      transition: opacity 550ms ease;
    }

    &.info--1 {
      bottom: 47%;
      right: 80%;
      .info--image {
        img {
          top: -80%;
          left: -20%;
        }
      }
    }

    &.info--2 {
      bottom: 25%;
      right: 15%;
      .info--image {
        img {
          right: -20%;
          bottom: -80%;
        }
      }
    }

    .icon {
      position: absolute;
      width: 100%;
      height: 100%;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
      display: flex;
      justify-content: center;
      align-items: center;
      ion-icon {
        color: white;
      }
    }

    .info--text {
      display: block;
      position: absolute;
      left: 10%;
      bottom: 5%;
      font-size: 0.55rem;
      letter-spacing: 1px;
      font-family: "Montserrat";
      font-weight: bold;
      color: #fff;
      white-space: nowrap;
      z-index: 2;
      opacity: 0;
      transform: translateY(25%);
      transition: opacity 250ms ease, transform 250ms ease;
    }

    .info--image {
      position: relative;
      width: 100%;
      height: 100%;
      overflow: hidden;
      img {
        position: absolute;
        width: 340%;
        height: 340%;
        object-fit: cover;
        opacity: 0;
        transition: opacity 550ms ease;
      }
    }
  }

  &:hover {
    .card--info {
      --size: 100px;
      &::after {
        opacity: 1;
      }
      &.info--1 {
        right: 71%;
        transition-delay: 100ms;
      }
      &.info--2 {
        right: -10%;
      }
      .info--image {
        img {
          opacity: 1;
        }
      }
      .info--text {
        transition-delay: 550ms;
        opacity: 1;
        transform: translateY(0%);
      }
    }
  }
}

.support{
  position: absolute;
  right: 10px;
  bottom: 10px;
  padding: 10px;
  display: flex;
  a{
    margin: 0 10px;
    color: #fff;
    font-size: 1.8rem;
    backface-visibility: hidden;
    transition: all 150ms ease;
    &:hover{
      transform: scale(1.1);
    }
  }

}
View Compiled
// NO JS TODAY.

External CSS

  1. https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.8.1/css/all.min.css
  2. https://fonts.googleapis.com/css?family=Montserrat&amp;display=swap"rel="stylesheet

External JavaScript

  1. https://unpkg.com/ionicons@5.0.0/dist/ionicons.js