-var elSet = 5
.bar
  -for(var n = 0; n < elSet; n++)
    input.bar-input(
      type="radio"
      name="input"
      id="input_" + n
    )
    .bar-view
      label.bar-button(
        for="input_" + n
      )
      
.command click on any one of the options
View Compiled
$elSet: 5
$elCount: $elSet * 2
$orange: #FE9000
$orange-light: #FFB732
$yellow: #FFDD4A
$blue-light: #5ADBFF
$blue: #3C6997
$bounce: cubic-bezier(0, 0, 0, 1.97)
$smooth: cubic-bezier(0, 0.72, 0.58, 1)

.bar
  display: flex
  flex-direction: row-reverse
  margin: auto auto 0
  width: 300px
  max-width: calc(100% - 30px)

  &-input
    opacity: 0
    pointer-events: none
    position: absolute
    top: -9999px
    left: -9999px
  
    &:checked
      ~ .bar-view
          @for $n from 1 through $elCount
            $r: $elCount - $n + 1
            @if $r % 2 == 0
              &:nth-child(#{$r})
                &:after
                  transition-delay: 0.1s * ($n / 2 - 1)
                .bar-button:before
                  transition-delay: 0.1s * ($n / 2 - 1) + 0.06s
                
          &:after
            transform: scaleX(1)
          .bar-button:before
            transform: none
            opacity: 1
      
      + .bar-view
          .bar-button:after
            opacity: 1
            animation: bouncing 0.6s cubic-bezier(0, 0, 0.74, 1.04) infinite
  
  &-view
    display: flex
    flex-grow: 1
    position: relative
  
    &:after
      height: 2px
      top: calc(50% - 1px)
      transition: transform 0.06s $smooth
      transform: scaleX(0)
      background: $orange-light
      transform-origin: left
      z-index: 1
  
    &:not(:last-child)
      &:before,
      &:after
        content: ''
        width: calc(100% - 24px)
        position: absolute
        right: calc(50% + 12px)

      &:before
        height: 6px
        top: calc(50% - 3px)
        background: $blue
  
      @for $n from 1 through $elCount
        @if $n % 2 == 0
          &:nth-child(#{$n})
            &:after
              transition-delay: 0.1s * ($n / 2 - 1)
            .bar-button:before
              transition-delay: 0.1s * ($n / 2 - 1) + 0.06s
  
  &-button
    display: block
    width: 30px
    height: 30px
    margin: auto
    border-radius: 50%
    border: 3px solid $blue
    position: relative
    cursor: pointer
    box-shadow: inset 2px 2px 4px rgba(0, 0, 0, 0.3), 2px 2px 8px rgba(0, 0, 0, 0.1)
  
    &:hover:after
      transform: none
      opacity: 1
  
    &:before,
    &:after
      content: ''
      position: absolute
      pointer-events: none
  
    &:before
      width: 100%
      height: 100%
      border-radius: 50%
      background: radial-gradient(circle at center, $yellow, $orange) 
      transform: scale(0.3)
      opacity: 0
      transition:
        property: transform, opacity
        duration: 0.2s
        timing-function: $smooth
    
    &:after
      border: 8px solid transparent
      border-top-color: $blue-light
      bottom: calc(100% + 10px)
      left: calc(50% - 8px)
      transform: translateY(-10px)
      opacity: 0
      transition:
        property: transform, opacity
        duration: 0.2s
        timing-function: $bounce

.command
  font-family: 'Ubuntu Mono', monospace
  letter-spacing: 1px
  margin: 30px auto auto
  animation: fade 1s ease infinite

html, body
  width: 100%
  height: 100%
  display: flex
  flex-direction: column
  background: linear-gradient(to bottom right, transparentize($yellow, 0.9), #fff)

*
  box-sizing: border-box
  &:before, &:after
    box-sizing: inherit

@keyframes bouncing
  0%, 100%
    transform: translateY(0)
  50%
    transform: translateY(5px)

@keyframes fade
  50%
    opacity: 0.3
View Compiled
/*
  no JS >|
*/

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.