<div class="container">
  <div class="intro">
    <h1>Half Circle Hover Effect</h1>
    <p>A simple hover effect using two half circles made from a border-radius and some CSS3 animations.</p>
  </div>
  <hr />
  <div class="spinner-wrapper">
    <div class="spinner">
      <div class="inner-spin"></div>
      <span class="spinner-content">
        <p>Yesterday's Special</p>
        <img src="http://lorempixel.com/600/600/food/">
      </span>
    </div>
    <div class="spinner">
      <div class="inner-spin"></div>
      <span class="spinner-content">
        <p>Today's Special</p>
        <img src="http://lorempixel.com/600/600/food/">
      </span>
    </div>
    <div class="spinner">
      <div class="inner-spin"></div>
      <span class="spinner-content">
        <p>Tomorrow's Special</p>
        <img src="http://lorempixel.com/600/600/food/">
      </span>
    </div>
  </div>
</div>
$base: 20em;
$base_minus_one: $base - 1;

* {
  box-sizing: border-box;
}

html {
  background: url(http://subtlepatterns.subtlepatterns.netdna-cdn.com/patterns/bedge_grunge.png) repeat;
}

body {
  color: #222;
}

.intro {
  text-align: center;
  display: block;
  padding-bottom: 0.5em;
  margin: 0 auto;
}

h1 {
  font-family: "Oleo Script";
  text-shadow: white 1px 1px 0;
  color: rgb(39, 75, 106);
}

.container {
  width: 90%;
  margin: 0 auto;
}

.spinner-wrapper {
  width: 72em;
  margin: 0 auto;
}

.spinner {
  width: $base;
  height: $base;
  margin: 0 2em;
  cursor: pointer;
  position: relative;
  float: left;

  p {
    position: absolute;
    top: 50%;
    width: 100%;
    text-align: center;
    font-size: 1.5rem;
    color: #222;
    font-weight: bold;
    opacity: 0;
    -webkit-transition: all 1s;
    margin-top: -0.75rem;
  }
}

.inner-spin {
  width: $base;
  height: $base;
  -webkit-transform: rotate(20deg);
  -webkit-transition: all 1s;

  /* Hardware acceleration FTW! */
  -webkit-transform: translateZ(0);
  -moz-transform: translateZ(0);

  &:before, &:after {
    display: block;
    margin: 0 auto;
    position: absolute;
  }

  &:before, &:after {
    content: "";
    height: $base / 2;
    width: $base;
    z-index: 1;
  }

  &:before {
    border-radius: $base $base 0 0;
    background: #105B63;
  }

  &:after {
    top: $base / 2;
    border-radius: 0 0 $base_minus_one $base_minus_one;
    background: #FFD34E;
  }
}

.spinner-content {
  display: block;
  margin: 0 auto;
  position: absolute;
  width: $base - 1;
  height: $base - 1;
  background: white;
  border-radius: $base - 1;
  z-index: 2;
  top: 50%;
  left: 50%;
  margin-top: -(($base - 1) / 2);
  margin-left: -(($base - 1) / 2);
}

.spinner:hover {
  opacity: 0.95;

  .inner-spin {
    -webkit-transform: rotate(180deg);
  }

  img {
    opacity: 0.25;
  }

  p {
    opacity: 1;
  }
}

img {
  width: $base_minus_one;
  height: $base_minus_one;
  border-radius: $base_minus_one;
  opacity: 1;
  -webkit-transition: all 1s;
}
View Compiled

External CSS

  1. https://fonts.googleapis.com/css?family=Oleo+Script

External JavaScript

This Pen doesn't use any external JavaScript resources.