It's been a while. Just a nice process bar here where you can click on the different steps and be presented with information. The box at the top will also animate depending on the steps.
A Pen by Jamie Coulter on CodePen.
It's been a while. Just a nice process bar here where you can click on the different steps and be presented with information. The box at the top will also animate depending on the steps.
A Pen by Jamie Coulter on CodePen.
-@steps = ['Start order', 'Prepare gift', 'Pack gift', 'Decorate box', 'Send gift'] | |
.progress | |
.progress_inner | |
[email protected]_with_index do |step, i| | |
.progress_inner__step | |
%label{:for => "step-#{i + 1}"} #{step} | |
%input{:type => 'radio', :name => 'step', :id => "step-1", :checked => 'checked'} | |
-(1..4).each_with_index do |i| | |
%input{:type => 'radio', :name => 'step', :id => "step-#{i + 1}"} | |
.progress_inner__bar | |
.progress_inner__bar--set | |
.progress_inner__tabs | |
[email protected]_with_index do |step, i| | |
.tab{:class => "tab-#{i}"} | |
%h1 #{step} | |
%p Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris tortor ipsum, eleifend vitae massa non, dignissim finibus eros. Maecenas non eros tristique nisl maximus sollicitudin. | |
.progress_inner__status | |
.box_base | |
.box_lid | |
.box_ribbon | |
.box_bow | |
.box_bow__left | |
.box_bow__right | |
.box_item | |
.box_tag | |
.box_string | |
// Nope |
$font: 'Nunito', sans-serif; | |
$scheme-base: #a6cde2; | |
$color-bg: $scheme-base; | |
$color-mid: darken($scheme-base, 14); | |
$color-dark: darken($scheme-base, 40); | |
$steps: 5; // Change in html | |
$step-width: 100% / $steps; | |
$step-point-width: 30px; | |
$step-point-height: $step-point-width; | |
$step-point-color: $color-mid; | |
$step-point-bg: white; | |
$step-font-size: 14px; | |
$step-padding: 10px; | |
$step-gap: 50px; | |
$tab-spacing: 80px; | |
$form-width: 700; | |
$counter-spacing: 3px; | |
$counter-font-size: 12px; | |
$bar-transition-speed: 800ms; | |
$bar-bg: repeating-linear-gradient( | |
45deg, | |
#1ea4ec, | |
#1ea4ec 4px, | |
#1f8bc5 4px, | |
#1f8bc5 10px | |
); | |
$bar-height: 6px; | |
$status-width: 40px; | |
$box-color: #986c5d; | |
$box-color: repeating-linear-gradient( | |
45deg, | |
#986c5d, | |
#986c5d 2px, | |
#775144 2px, | |
#775144 4px | |
); | |
$lid-color: #775144; | |
$box-lid-offset: 4px; | |
$box-item-color: #be69d2; | |
$box-item-thickness: 4px; | |
$box-item-width: $status-width - 20; | |
$box-item-height: $box-item-width; | |
$ribbon-color: #ee0f29; | |
$ribbon-width: $status-width / 4; | |
$bow-width: 6px; | |
$bow-height: 10px; | |
$bow-color: darken($ribbon-color, 10); | |
@mixin move-item($item, $top, $left, $opacity) { | |
& > .#{$item} { | |
top: $top; | |
left: $left; | |
opacity: $opacity; | |
} | |
} | |
%box-animation-5{ | |
@include move-item('box_base', 50%, 0px, 1); | |
@include move-item('box_item', -30px, 0px, 0); | |
} | |
%box-animation-4{ | |
@extend %box-animation-5; | |
@include move-item('box_lid', -20px, 0px, 0); | |
@include move-item('box_item', -10px, 0px, 1); | |
} | |
%box-animation-3{ | |
@extend %box-animation-5; | |
@include move-item('box_item', 10px, 0px, 1); | |
@include move-item('box_lid', -1px, 0px, 1); | |
@include move-item('box_ribbon', 70%, 0px, 0); | |
@include move-item('box_bow', 0px, 0px, 0); | |
} | |
%box-animation-2{ | |
@extend %box-animation-5; | |
@extend %box-animation-4; | |
@extend %box-animation-3; | |
@include move-item('box_ribbon', 50%, 0px, 1); | |
@include move-item('box_bow', -10px, 0px, 1); | |
} | |
%box-animation-1{ | |
@extend %box-animation-5; | |
@extend %box-animation-4; | |
@extend %box-animation-3; | |
@extend %box-animation-2; | |
@include move-item('box_tag', 10px, 20px, 1); | |
@include move-item('box_string', 10px, 20px, 1); | |
} | |
@mixin traverse($n) { | |
$step: ''; | |
$tab: ''; | |
@for $i from 1 through $n { | |
$int: #{($n + 1) - $i}; | |
& #step-#{$int}:checked #{$step} + div { | |
width: ($n - $i) * $step-width; | |
} | |
& #step-#{$int}:checked #{$step} + div + div + div { | |
& > .tab:nth-of-type(#{$int}) { | |
opacity: 1; | |
top: 0; | |
} | |
} | |
& #step-#{$int}:checked #{$step} + div + div + div + div { | |
right: - ($step-width / 2) + ($i * $step-width); | |
@extend %box-animation-#{$i}; | |
} | |
$step: $step + '+ input'; | |
$tab: $tab + '+ div'; | |
} | |
} | |
@import url('https://fonts.googleapis.com/css?family=Nunito:400,900'); | |
* { | |
box-sizing: border-box; | |
} | |
%center { | |
position: absolute; | |
left: 0; | |
right: 0; | |
top: 50%; | |
transform: translateY(-50%); | |
margin: auto; | |
} | |
%bar { | |
height: $bar-height; | |
left: $step-width / 2; | |
background: $bar-bg; | |
transition: width $bar-transition-speed cubic-bezier(0.915, 0.015, 0.300, 1.005); | |
border-radius: $bar-height; | |
width: 0; | |
position: relative; | |
z-index: -1; | |
} | |
%counter { | |
@extend %center; | |
width: $step-point-width; | |
height: $step-point-height; | |
color: $step-point-color; | |
background: $step-point-bg; | |
line-height: $step-point-height; | |
border: $counter-spacing solid $color-bg; | |
font-size: $counter-font-size; | |
top: $bar-height / 2; | |
border-radius: 100%; | |
transition: all .4s; | |
cursor: pointer; | |
pointer-events: none; | |
} | |
%step { | |
width: $step-width; | |
font-size: $step-font-size; | |
padding: 0 $step-padding; | |
transition: all .4s; | |
float: left; | |
text-align: center; | |
position: relative; | |
label { | |
padding-top: $step-gap; | |
top: -20px; | |
display: block; | |
position: relative; | |
cursor: pointer; | |
} | |
&:before { | |
@extend %counter; | |
} | |
&:hover { | |
color: white; | |
&:before { | |
color: white; | |
background: #1ea4ec; | |
} | |
} | |
} | |
body { | |
font-family: $font; | |
background: $color-bg; | |
color: $color-dark; | |
text-align: center; | |
font-weight: 900; | |
.progress { | |
&_inner { | |
@include traverse($steps); | |
@extend %center; | |
height: 200px; | |
width: $form-width + px; | |
@for $i from 1 through $steps { | |
&__step:nth-of-type(#{$i}) { | |
&:before { | |
content: '#{$i}'; | |
} | |
} | |
} | |
&__step { | |
@extend %step; | |
} | |
&__bar { | |
@extend %bar; | |
&--set { | |
@extend %bar; | |
width: 100% - $step-width; | |
top: - $bar-height; | |
background: $color-mid; | |
position: relative; | |
z-index: -2; | |
} | |
} | |
&__tabs { | |
& .tab { | |
opacity: 0; | |
position: absolute; | |
top: 40px; | |
text-align: center; | |
margin-top: $tab-spacing; | |
box-shadow: 0px 2px 1px darken($color-bg, 10); | |
padding: 30px; | |
background: white; | |
border-radius: 10px; | |
transition: all .2s; | |
h1 { | |
margin: 0; | |
} | |
p { | |
font-weight: 400; | |
opacity: 0.8; | |
} | |
} | |
} | |
&__status { | |
width: $status-width; | |
height: $status-width; | |
top: - $status-width * 2; | |
transition: right $bar-transition-speed cubic-bezier(0.915, 0.015, 0.300, 1.005); | |
transform: translateX(50%); | |
position: absolute; | |
%animatable { | |
opacity: 0; | |
transition: all 600ms cubic-bezier(0.915, 0.015, 0.300, 1.005); | |
transition-delay: 300ms | |
} | |
div { | |
position: absolute; | |
@extend %animatable; | |
} | |
& .box_base { | |
@extend %center; | |
background: $box-color; | |
width: $status-width - $box-lid-offset; | |
height: $status-width; | |
z-index: 1; | |
border-radius: 1px; | |
} | |
& .box_lid { | |
width: $status-width; | |
height: $status-width / 3; | |
background: $lid-color; | |
z-index: 2; | |
border-radius: 1px; | |
top: 0; | |
} | |
& .box_item { | |
@extend %center; | |
width: $box-item-width; | |
height: $box-item-height; | |
background: $box-item-color; | |
z-index: 0; | |
border-radius: 4px; | |
transform: rotate(45deg); | |
} | |
& .box_ribbon { | |
@extend %center; | |
width: $ribbon-width; | |
height: $status-width + 2; | |
background: $ribbon-color; | |
z-index: 4; | |
border-radius: 1px; | |
} | |
%bow { | |
width: $bow-width; | |
height: $bow-height; | |
background: $bow-color; | |
position: absolute; | |
z-index: 3; | |
opacity: 1; | |
border-radius: 1px; | |
} | |
& .box_bow { | |
@extend %center; | |
top: - $bow-width; | |
z-index: 1; | |
transition-delay: 500ms; | |
&__left { | |
@extend %bow; | |
@extend %center; | |
left: $bow-width; | |
transform: rotate(45deg); | |
} | |
&__right { | |
@extend %bow; | |
@extend %center; | |
left: -4px; | |
transform: rotate(-45deg); | |
} | |
} | |
// Refactor | |
& .box_tag { | |
@extend %center; | |
width: 20px; | |
height: 10px; | |
background: #487ac7; | |
z-index: 4; | |
transform: rotate(-10deg) translateX(-40px) translateY(0px); | |
border-radius: 2px; | |
transition-delay: 500ms | |
} | |
& .box_string { | |
width: 17px; | |
height: 2px; | |
background: #343434; | |
@extend %center; | |
z-index: 4; | |
transform: rotate(-39deg) translateX(-22px) translateY(-12px); | |
} | |
// | |
} | |
input[type="radio"] { | |
display: none; | |
} | |
} | |
} | |
} |