<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;
transition: all 1s;
margin-top: -0.75rem;
}
}
.inner-spin {
width: $base;
height: $base;
transform: rotate(20deg);
transition: all 1s;
/* Hardware acceleration FTW! */
transform: translateZ(0);
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 {
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;
transition: all 1s;
}
View Compiled
This Pen doesn't use any external JavaScript resources.