<header class="header">
  <p class="number">#1</p>
  <h1>Custom<br> Checkboxes / radio buttons</h1>
</header>

<section class="content">
  <ul class="list">
    <li class="list__item">
      <label class="label--checkbox">
      	<input type="checkbox" class="checkbox" checked>
          Item 1
      </label>
    </li>
    <li class="list__item">
      <label class="label--checkbox">
      	<input type="checkbox" class="checkbox">
          Item 2
      </label>
    </li>
    <li class="list__item">
      <label class="label--checkbox">
      	<input type="checkbox" class="checkbox">
          Item 3
      </label>
    </li>
    <li class="list__item">
      <label class="label--checkbox">
      	<input type="checkbox" class="checkbox">
          Item 4
      </label>
    </li>
  </ul>
      
  <ul class="list">
    <li class="list__item">
      <label class="label--radio">
      	<input type="radio" class="radio" checked  name="foo">
          Item 1
      </label>
    </li>
    <li class="list__item">
      <label class="label--radio">
      	<input type="radio" class="radio" name="foo">
          Item 2
      </label>
    </li>
    <li class="list__item">
      <label class="label--radio">
      	<input type="radio" class="radio" name="foo">
          Item 3
      </label>
    </li>
    <li class="list__item">
      <label class="label--radio">
      	<input type="radio" class="radio" name="foo">
          Item 4
      </label>
    </li>
  </ul>
</section>
      
<footer class="footer">
	<a href="https://www.twitter.com/sambego" target="_blank" class="btn btn--twitter">
    <i class="fa fa-twitter"></i>
  </a>
  
  <a href="https://codepen.io/collection/kgtrv/" target="_blank" class="btn">
    <i class="fa fa-check"></i>
    More examples
  </a>
</footer>
@import "bourbon";

$baseFontSize: 16;

$primaryColor: #16a085;
$secondaryColor: #f2f2f2;
$twitter: #2980b9;

@function rem($val) {
  @return #{$val / $baseFontSize}rem;
}

body {
  font-size: #{$baseFontSize}px;
}

.header,
.content {
  width: 20rem;
  padding: 1rem;
  margin: 0 auto;
}

.header {
  position: relative;
 }

h1 {
  padding: .5rem 1rem;
  margin: .5rem .5rem 0 .5rem;  
  
  border-left: rem(3) solid $primaryColor;
  
  font-family: Helvetica, Arial, sans-serif;
  text-transform: uppercase;
  line-height: 130%;
}

.number {
  position: absolute;
  top: rem(35);
  left: rem(-20);
  
	color: $primaryColor;
  font-size: 2rem;
  font-family: Helvetiva, Arial, sans-serif;
}

.list {
  padding: .5rem 1rem;
  margin: .5rem .5rem 2rem .5rem;  
  
  border-left: rem(3) solid $primaryColor;
}

.list__item {
  margin: 0 0 .5rem 0;
  padding: 0;
}

.label--checkbox,
.label--radio {
  position: relative;

  margin: .5rem;
  
  font-family: Arial, sans-serif;
  line-height: 135%;
  
  cursor: pointer;
}

.checkbox {
  position: relative;
  top: rem(-6);
  
  margin: 0 1rem 0 0 ;
  
  cursor: pointer;
  
  &:before {
		@include transition(transform .4s cubic-bezier(.45,1.8,.5,.75));
     @include transform(rotate(-45deg) scale(0, 0));
    
		content: "";
    
		position: absolute;
		left: rem(3);
     top: rem(2);
		z-index: 1;
  
		width: rem(12);
		height: rem(6);
    
		border: 2px solid $primaryColor; 
     border-top-style: none;
  	 border-right-style: none;
  }
  
  &:checked {
    &:before {
       @include transform(rotate(-45deg) scale(1, 1));
      } 
  }
  
  &:after {
    content: "";
    
    position: absolute;
    top: rem(-2);
    left: 0;
    
    width: 1rem;
    height: 1rem;
    
    background: #fff;
    
    border: 2px solid $secondaryColor;
    
    cursor: pointer;
  }
}

.radio {
  position: relative;
  
  margin: 0 1rem 0 0 ;
  
  cursor: pointer;
  
  &:before {
    @include transition(transform .4s cubic-bezier(.45,1.8,.5,.75));
    @include transform(scale(0,0));
    
    content: "";

    position: absolute;
    top: 0;
    left: rem(2);
    z-index: 1;
    
    width: rem(12);
    height: rem(12);
    
    background: $primaryColor;
    
    border-radius: 50%;
  }
  
  &:checked {
    &:before {
     @include transform(scale(1,1)); 
    }
  }
  
  &:after {
    content: "";
    
    position: absolute;
    top: rem(-4);
    left: rem(-2);
    
    width: 1rem;
    height: 1rem;
    
    background: #fff;
    
    border: 2px solid $secondaryColor;
    border-radius: 50%;
  }
}

.footer {
  position: relative;
}

.btn {
  @include transition(background .3s ease-in-out);
  
  position: absolute;
  top: 0;
  right: 4.5rem;
  
  padding: .5rem;
  
  background: $primaryColor;
  
  color: #fff;
  font-family: Helvetica, Arial, sans-serif;
  text-decoration: none;
  
  &:hover {
    background: darken($primaryColor, 5%);
  }
}

.btn--twitter {
  right: 2rem;
  
  background: $twitter;

  &:hover {
    background: darken($twitter, 5%);
  }
}
View Compiled
/*
 * First example of some simple custom checkboxes and radio buttons made with pure (s)css.
 * These only work in chrome, but fallback to the native ones in other browsers.
 *
 * Check back soon for some other examples.
 *
 * Also see: 
 * - https://codepen.io/Sambego/pen/zDLxe
 * - https://codepen.io/Sambego/pen/yiruz
 * - https://codepen.io/Sambego/pen/mIhbk
 */

External CSS

  1. https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.0.3/css/font-awesome.min.css

External JavaScript

  1. //cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js