JSFiddle - React, Tailwind, and code Playground

by Tony Realovich

HTML

<div class="card-list">
  <div class="card-list__item">
    <div class="card">
      <div class="card__wrap">
        <div class="card__cover">
          <img src="http://placekitten.com/245/300" alt="" class="card__cover-img">
        </div>
      </div>
    </div>
  </div>
  <div class="card-list__item">
    <div class="card">
      <div class="card__wrap">
        <div class="card__cover">
          <img src="http://placekitten.com/245/300" alt="" class="card__cover-img">
        </div>
      </div>
    </div>
  </div>
  <div class="card-list__item">
    <div class="card">
      <div class="card__wrap">
        <div class="card__cover">
          <img src="http://placekitten.com/245/300" alt="" class="card__cover-img">
        </div>
      </div>
    </div>
  </div>
  <div class="card-list__item">
    <div class="card">
      <div class="card__wrap">
        <div class="card__cover">
          <img src="http://placekitten.com/245/300" alt="" class="card__cover-img">
        </div>
      </div>
    </div>
  </div>
</div>

SCSS

@keyframes img-hover-in {
  0% {
    transform: scale(1);
  }
  80% {
    transform: scale(1.2);
  }
  100% {
    transform: scale(1.15);
  }
}

@keyframes img-hover-out {
  0% {
    transform: scale(1.15);
  }
  20% {
    transform: scale(1.2);
  }
  100% {
    transform: scale(1);
  }
}

.card-list {
  display: flex;
  
  &__item {
    width: 25%;
    overflow: hidden;
  }
}

.card {
  position: relative;
  overflow: hidden;
  line-height: 0;
  
  &:hover {
    .card__cover-img {
      animation-name: img-hover-in;
      animation-duration: .5s;
      animation-fill-mode: forwards;
    }
  }

  &__cover {
    &-img {
      width: 100%;
      height: auto;
      animation-name: img-hover-out;
      animation-duration: .5s;
      animation-fill-mode: forwards;
    }
  }
}