<div class="rotate-slider">
    <ul class="slides">
    <li>
      <div class="inner">
      <h2>Actual Rotating Slider</h2>
      <p>Built with math and dedication</p>
      </div>
    </li>
    <li>
      <div class="inner"></div>
    </li>
    <li>
      <div class="inner">
      <h2>Hates IE</h2>
      <p>Uses clip-path to shape slides</p>
      </div>
    </li>
    <li>
      <div class="inner">
      </div>
    </li>
    <li>
      <div class="inner">
      <h2>Easy to use</h2>
      <p>Just add list elements in the HTML and set a height and width in the JavaScript Settings</p>
      <p><small>Slider controls and proper jQuery plugin coming soon.</small></p>
      </div>
    </li>
    <li>
      <div class="inner">
      <h2>I'm not a thief!</h2>
      <p>Stock photos from www.pexels.com</p>
      </div>
    </li>
    </ul>
  </div>
  <svg>
    <defs>
      <clipPath id="slideClip">
      <path />
      </clipPath>
    </defs>
  </svg>
    @import url(https://fonts.googleapis.com/css?family=Roboto+Slab:300,700);
    body{
      background: #333;
      font-family: 'Roboto Slab', sans-serif;
      font-weight: 300;
      overflow: hidden;
    }
    .rotate-slider{
      margin: 5em auto;
      height: 360px;
      /* overflow: hidden; */
      width: 480px;
    }
    .rotate-slider ul.slides{
      height: 100%;
      margin: 0;
      overflow: hidden;
      padding: 0;
      position: relative;
        top: 0;
        left: 50%;
      -ms-transform-origin: center center;
      transform-origin: center center;
      width: 100%;
    }
    .rotate-slider ul.slides.animate{
      -webkit-transition: all 0.75s ease-in-out;
      transition: all 0.75s ease-in-out;
    }
    .rotate-slider ul.slides li{
      background-position: center;
      background-size: cover;
      display: block;
      color: #fff;
      list-style: none;
      position: absolute;
        top: 0;
        left: 50%;
      text-align: center;
      -ms-transform-origin: bottom center;
      transform-origin: bottom center;
      width: 100%;
    }
    .rotate-slider ul.slides li:nth-of-type(1){background: #3498db;}
    .rotate-slider ul.slides li:nth-of-type(2){background: url('http://static.pexels.com/wp-content/uploads/2014/05/car-oldtimer-snow-342-825x550.jpg');}
    .rotate-slider ul.slides li:nth-of-type(3){background: #e74c3c;}
    .rotate-slider ul.slides li:nth-of-type(4){background: url('http://static.pexels.com/wp-content/uploads/2014/06/analog-camera-old-olympus-om-10-1528-825x550.jpg');}
    .rotate-slider ul.slides li:nth-of-type(5){background: #f1c40f;}
    .rotate-slider ul.slides li:nth-of-type(6){background: url(http://static.pexels.com/wp-content/uploads/2014/06/bridge-city-night-645-827x550.jpg);}
    .rotate-slider ul.slides li .inner{
      box-sizing: border-box;
      padding: 2em;
      height: 100%;
      width: 100%;
    }
/* Radians to Degrees:  x * Math.PI/180; */
$(function(){
  /* Settings */
  var rotateSlider = {
    slideHeight : 360,
    slideWidth : 480,
  };

  /* Do Math and set properties */
  rotateSlider.slideCount = $('.rotate-slider .slides li').length;
  rotateSlider.slideAngle = 360 / $('.rotate-slider .slides li').length;
  rotateSlider.sliderElement = $('.rotate-slider');
  rotateSlider.slides = $('.rotate-slider .slides li');
  rotateSlider.slidesContainer = $('.rotate-slider .slides');
  rotateSlider.slideAngle = 360 / rotateSlider.slideCount;
  rotateSlider.halfAngleRad = rotateSlider.slideAngle / 2 * Math.PI/180;
  rotateSlider.innerRadius = 1 / Math.tan(rotateSlider.halfAngleRad) * rotateSlider.slideWidth / 2;
  rotateSlider.outerRadius = Math.sqrt(Math.pow(rotateSlider.innerRadius + rotateSlider.slideHeight, 2) + (Math.pow((rotateSlider.slideWidth / 2), 2)));
  rotateSlider.upperArcHeight = rotateSlider.outerRadius - (rotateSlider.innerRadius + rotateSlider.slideHeight);
  rotateSlider.lowerArcHeight = rotateSlider.innerRadius - (rotateSlider.innerRadius * (Math.cos(rotateSlider.halfAngleRad)));
  rotateSlider.slideFullWidth = (Math.sin(rotateSlider.halfAngleRad) * rotateSlider.outerRadius) * 2;
  rotateSlider.slideFullHeight = rotateSlider.upperArcHeight + rotateSlider.slideHeight + rotateSlider.lowerArcHeight
  rotateSlider.slideSidePadding = (rotateSlider.slideFullWidth - rotateSlider.slideWidth) / 2;
  rotateSlider.fullArcHeight = rotateSlider.outerRadius - (rotateSlider.outerRadius * (Math.cos(rotateSlider.halfAngleRad)));
  rotateSlider.lowerArcOffset = (rotateSlider.slideFullWidth - (Math.sin(rotateSlider.halfAngleRad) * rotateSlider.innerRadius * 2)) / 2;

  /* Set height and width of slider element */
  rotateSlider.sliderElement.css('height', rotateSlider.slideHeight+'px');
  rotateSlider.sliderElement.css('width', rotateSlider.slideWidth+'px');

  /* Set height and width of slides container and offset width*/
  rotateSlider.slidesContainer.css('height', rotateSlider.outerRadius*2+'px');
  rotateSlider.slidesContainer.css('width', rotateSlider.outerRadius*2+'px');

  /* Offset width and arc height */
  rotateSlider.slidesContainer.css('transform', 'translateX(-50%)');
  rotateSlider.slidesContainer.css('top', '-'+ rotateSlider.upperArcHeight +'px');

  /* Generate path for slide clipping */
  var pathCoords = 'M 0 '+rotateSlider.fullArcHeight;
  pathCoords += ' A '+rotateSlider.outerRadius+' '+rotateSlider.outerRadius+' 0 0 1 '+rotateSlider.slideFullWidth+' '+rotateSlider.fullArcHeight;
  pathCoords += ' L '+(rotateSlider.slideFullWidth-rotateSlider.lowerArcOffset)+' '+rotateSlider.slideFullHeight;
  pathCoords += ' A '+rotateSlider.innerRadius+' '+rotateSlider.innerRadius+' 0 0 0 '+rotateSlider.lowerArcOffset+' '+rotateSlider.slideFullHeight+' Z';
  $('#slideClip').find('path').attr('d', pathCoords);

  /* Apply styles to each slide */
  var i = 0;
  rotateSlider.slides.each(function(){
    /* Set distance from point of rotation */
    $(this).css('transform-origin', 'center '+(rotateSlider.innerRadius + rotateSlider.slideHeight)+'px');

    /* Set slide Height and Width */
    $(this).css('height', rotateSlider.slideHeight+'px');
    $(this).css('width', rotateSlider.slideWidth+'px');

    /* Set calculated padding for width, upper arc height, and lower arc height */
    $(this).css('padding', rotateSlider.upperArcHeight +'px '+rotateSlider.slideSidePadding+'px '+rotateSlider.lowerArcHeight+'px '+rotateSlider.slideSidePadding+'px ');

    /* Offset container Arc Height */
    $(this).css('top', rotateSlider.upperArcHeight +'px');

    /* Offset Width, then Rotate Slide, then offset individual Top Arcs  */
    $(this).css('transform', 'translateX(-50%) rotate('+rotateSlider.slideAngle * i+'deg) translateY(-'+ rotateSlider.upperArcHeight +'px)');

    /* Add clipping path  */
    $(this).css('-webkit-clip-path', 'url(#slideClip)');
    $(this).css('clip-path', 'url(#slideClip)');

    i++;
  });

  /* Set Interval to rotate */
  var currentRotation = 0;
  var rotateInterval = window.setInterval(function(){
    if(!rotateSlider.slidesContainer.hasClass('animate')){
      rotateSlider.slidesContainer.addClass('animate')
    }
    currentRotation = currentRotation - rotateSlider.slideAngle;
    rotateSlider.slidesContainer.css('transform', 'translateX(-50%) rotate('+currentRotation+'deg)');
  }, 4000);
});

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

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