- var n = 0;
.content
  h1.heading Card Flip
  p.description Hover over a card to flip it.
  while n++ < 6
    a(href="#!").card
      .front(style="background-image: url(//source.unsplash.com/300x40"+n+")")
        p Lorem ipsum dolor sit amet consectetur adipisi.
      .back
        div
          p Consectetur adipisicing elit. Possimus, praesentium?
          p Provident consectetur natus voluptatem quis tenetur sed beatae eius sint.
          button.button Click Here
        
View Compiled
$primary: hsl(222,80%,50%);
$primary-light: hsl(222,50%,95%);

$secondary: hsl(350,80%,50%);

$red: hsl(10,80%,50%);
$orange: hsl(50,80%,50%);

*, *:before, *:after {
  box-sizing: border-box;
}

@mixin mobile ($size: 640px) {
  @media screen and (max-width: $size) {
    @content;
  }
}

html {
  font-size: 18px;
  line-height: 1.5;
  font-weight: 300;
  color: #333;
  font-family: "Nunito Sans", sans-serif;
}

body {
  margin: 0;
  padding: 0;
  height: 100vh;
  background-color: $primary-light;
  background-attachment: fixed;
}

.content {
  display: flex;
  margin: 0 auto;
  justify-content: center;
  align-items: center;
  flex-wrap: wrap;
  max-width: 1000px;
}

.heading {
  width: 100%;
  margin-left: 1rem;
  font-weight: 900;
  font-size: 1.618rem;
  text-transform: uppercase;
  letter-spacing: .1ch;
  line-height: 1;
  padding-bottom: .5em;
  margin-bottom: 1rem;
  position: relative;
  
  &:after {
    display: block;
    content: '';
    position: absolute;
    width: 60px;
    height: 4px;
    background: linear-gradient(135deg, adjust-hue($primary, -20deg), $primary);
    bottom: 0;
  }
}

.description {
  width: 100%;
  margin-top: 0;
  margin-left: 1rem;
  margin-bottom: 3rem;
}

.card {
  color: inherit;
  cursor: pointer;
  width: calc(33% - 2rem);
  min-width: calc(33% - 2rem);
  height: 400px;
  min-height: 400px;
  perspective: 1000px;
  margin: 1rem;
  position: relative;
  @include mobile (800px) {
    width: calc(50% - 2rem);
  }
  @include mobile (500px) {
    width: 100%;
  }
}

.front,
.back {
  display: flex;
  border-radius: 6px;
  background-position: center;
  background-size: cover;
  text-align: center;
  justify-content: center;
  align-items: center;
  position: absolute;
  height: 100%;
  width: 100%;
  -webkit-backface-visibility: hidden;
  backface-visibility: hidden;
  transform-style: preserve-3d;
  transition: ease-in-out 600ms;
  // overflow: hidden;
}

.front {
  background-size: cover;
  // background-blend-mode: overlay;
  padding: 2rem;
  font-size: 1.618rem;
  font-weight: 600;
  color: #fff;
  overflow: hidden;
  font-family: Poppins, sans-serif;
  &:before {
    position: absolute;
    display: block;
    content: '';
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background: linear-gradient(135deg, adjust-hue($primary, -20deg), $primary);
    opacity: .25;
    z-index: -1;
  }
  .card:hover & {
    transform: rotateY(180deg);
  }
  .card:nth-child(even):hover & {
    transform: rotateY(-180deg);
  }
}

.back {
  background: #fff;
  transform: rotateY(-180deg);
  padding: 0 2em;
  
  .button {
    background: linear-gradient(135deg, adjust-hue($primary, -20deg), $primary);
    
    &:before {
      box-shadow: 0 0 10px 10px rgba($primary, 0.25);
    background-color: rgba($primary, 0.25);
    }
  }
  
  .card:hover & {
    transform: rotateY(0deg);
  }
  
  .card:nth-child(even) & {
    transform: rotateY(180deg);
    
    .button {
    background: linear-gradient(135deg, adjust-hue($secondary, -20deg), $secondary);
    
    &:before {
      box-shadow: 0 0 10px 10px rgba($secondary, 0.25);
    background-color: rgba($secondary, 0.25);
    }
  }
  }
  
  .card:nth-child(even):hover & {
    transform: rotateY(0deg);
  }
}

.button {
  $height: 40px;
  transform: translateZ($height);
  cursor: pointer;
  -webkit-backface-visibility: hidden;
  backface-visibility: hidden;
  font-weight: bold;
  color: #fff;
  padding: .5em 1em;
  border-radius: 100px;
  font: inherit;
  border: none;
  position: relative;
    transform-style: preserve-3d;
  transition: 300ms ease;
  
  &:before {
  transition: 300ms ease;
    position: absolute;
    display: block;
    content: '';
    transform: translateZ(-$height);
    -webkit-backface-visibility: hidden;
    backface-visibility: hidden;
    height: calc(100% - 20px);
    width: calc(100% - 20px);
    border-radius: 100px;
    left: 10px;
    top: 16px;
  }
  
  &:hover {
    transform: translateZ($height + 15px);
    
    &:before {
      transform: translateZ(-($height + 15px));
    }
  }
  
  &:active {
    transform: translateZ($height/2);
    
    &:before {
      transform: translateZ(-($height/2));
        top: 12px;
    }
  }
}
View Compiled

External CSS

  1. https://fonts.googleapis.com/css?family=Nunito+Sans:300,400,700
  2. https://fonts.googleapis.com/css?family=Poppins:300,400,700

External JavaScript

This Pen doesn't use any external JavaScript resources.