JSFiddle - React, Tailwind, and code Playground

by bumbu

HTML

<div class="slider">
  <div class="slider-inner">
    <div class="element">
      <div class="image">
        <img class="default" src="http://bumbu.ru/wp-content/uploads/2013/12/scroller_image_default.png" width="99" height="102" alt="">
        <img class="active" src="http://bumbu.ru/wp-content/uploads/2013/12/scroller_image_active.png" width="99" height="102" alt="">
      </div>
      <div class="title"><a href="#">Eco technology for life</a></div>
    </div>
    <div class="element">
      <div class="image">
        <img class="default" src="http://bumbu.ru/wp-content/uploads/2013/12/scroller_image_default.png" width="99" height="102" alt="">
        <img class="active" src="http://bumbu.ru/wp-content/uploads/2013/12/scroller_image_active.png" width="99" height="102" alt="">
      </div>
      <div class="title"><a href="#">Eco Power of technology for life</a></div>
    </div>
    <div class="element">
      <div class="image">
        <img class="default" src="http://bumbu.ru/wp-content/uploads/2013/12/scroller_image_default.png" width="99" height="102" alt="">
        <img class="active" src="http://bumbu.ru/wp-content/uploads/2013/12/scroller_image_active.png" width="99" height="102" alt="">
      </div>
      <div class="title"><a href="#">Power of new technology for life</a></div>
    </div>
    <div class="element">
      <div class="image">
        <img class="default" src="http://bumbu.ru/wp-content/uploads/2013/12/scroller_image_default.png" width="99" height="102" alt="">
        <img class="active" src="http://bumbu.ru/wp-content/uploads/2013/12/scroller_image_active.png" width="99" height="102" alt="">
      </div>
      <div class="title"><a href="#">New technology for life</a></div>
    </div>
    <div class="element">
      <div class="image">
        <img class="default" src="http://bumbu.ru/wp-content/uploads/2013/12/scroller_image_default.png" width="99" height="102" alt="">
        <img class="active"...

CSS

.slider{
  position: relative;
  overflow: hidden;
  height: 230px;
  background-image: linear-gradient(to bottom, #d1dfea, #adc6da);
}

.slider-inner{
  height: 230px;
  position: absolute;
  top: 0;
  left: 0;
}

/* Element properties */

.element{
  width: 200px;
  height: 230px;
  float: left;
  text-align: center;
}

.element .image{
  height: 102px;
}

.element .image .active{
  display: none;
}

.element .title{
  padding: 3px 20px 0;
  font-size: 14px;
  opacity: 0.5;
  transition: 0.2s linear opacity;
  text-transform: uppercase;
}

.element .title a{
  color: #336791;
}

/* Active element properties */

.element.active .image .default{
  display: none;
}

.element.active .image .active{
  display: none;
}

.element.active .title{
  opacity: 1;
}

/* Slider controls */


.slider-control{
  position: absolute;
  top: 60px;
  display: block;
  width: 0;
  height: 0;
  margin: 0 101px;
  border-color: transparent;
  border-style: solid;
  opacity: 0.7;
}

.slider-control:hover{
  opacity: 1;
}

.slider-control.left{
  right: 50%;
  border-width: 16px 19px 16px 0;
  border-right-color: #336791;
}

.slider-control.right{
  left: 50%;
  border-width: 16px 0 16px 19px;
  border-left-color: #336791;
}

JavaScript

$(function(){
  var $slider = $('.slider')
    , slider_width = 0
    , $slider_inner = $slider.children().first()
    , $elements = $slider_inner.children('.element')
    , elements_count = $elements.length
    , element_width = $elements.first().width()
    , element_margin = 0
    , elements_fit = 0
    , visible_width = 0

  function onResize() {
    slider_width = $slider.width()
    elements_fit = Math.floor(slider_width/element_width)

    // we have a limited number of elements
    if (elements_fit > elements_count) {
      elements_fit = elements_count
    }
    // we need only odd number
    if (elements_fit % 2 === 0) {
      elements_fit -= 1
    }

    // find element margin for balancing
    element_margin = Math.ceil((slider_width - (element_width * elements_fit))/(elements_fit * 2))

    visible_width = (element_width + element_margin * 2) * elements_fit
    // set container width * 1.5 to fit clonned elements when scroll
    $slider_inner.width(Math.ceil(visible_width * 1.5))
    // add margins
    $elements.css({'margin-left': element_margin + 'px', 'margin-right': element_margin + 'px'})
  }

  onResize()

  $(window).on('resize', onResize)
})