Pure CSS Progress, a pretty liquid progress-bar. I've coded Pure CSS Navigation triggers too, if you want the bar's code just follow the css comments :)
A Pen by Rafael González on CodePen.
| <div class="container"> | |
| <header> | |
| <h1>Pure <strong>CSS</strong> Progress</h1> | |
| <p>... a pretty liquid progress-bar.</p> | |
| </header> | |
| <section> | |
| <article> | |
| <input type="radio" name="switch-color" id="red" checked> | |
| <input type="radio" name="switch-color" id="cyan"> | |
| <input type="radio" name="switch-color" id="lime"> | |
| <div class="chart"> | |
| <div class="bar bar-75 white"> | |
| <div class="face top"> | |
| <div class="growing-bar"></div> | |
| </div> | |
| <div class="face side-0"> | |
| <div class="growing-bar"></div> | |
| </div> | |
| <div class="face floor"> | |
| <div class="growing-bar"></div> | |
| </div> | |
| <div class="face side-a"></div> | |
| <div class="face side-b"></div> | |
| <div class="face side-1"> | |
| <div class="growing-bar"></div> | |
| </div> | |
| </div> | |
| </div> | |
| <p>Try another color :)</p> | |
| <nav class="actions"> | |
| <label for="red">Red</label> | |
| <label for="cyan">Cyan</label> | |
| <label for="lime">Lime</label> | |
| </nav> | |
| </article> | |
| <article> | |
| <input type="radio" name="switch-pos" id="pos-0"> | |
| <input type="radio" name="switch-pos" id="pos-1"> | |
| <input type="radio" name="switch-pos" id="pos-2" checked> | |
| <input type="radio" name="switch-pos" id="pos-3"> | |
| <div class="chart"> | |
| <div class="bar bar-30 white"> | |
| <div class="face top"> | |
| <div class="growing-bar"></div> | |
| </div> | |
| <div class="face side-0"> | |
| <div class="growing-bar"></div> | |
| </div> | |
| <div class="face floor"> | |
| <div class="growing-bar"></div> | |
| </div> | |
| <div class="face side-a"></div> | |
| <div class="face side-b"></div> | |
| <div class="face side-1"> | |
| <div class="growing-bar"></div> | |
| </div> | |
| </div> | |
| </div> | |
| <p>Try another position :)</p> | |
| <nav class="actions"> | |
| <label for="pos-0">1/4</label> | |
| <label for="pos-1">2/4</label> | |
| <label for="pos-2">3/4</label> | |
| <label for="pos-3">Full</label> | |
| </nav> | |
| </article> | |
| <article> | |
| <input type="radio" name="exercises" id="exercise-1" checked> | |
| <input type="radio" name="exercises" id="exercise-2"> | |
| <input type="radio" name="exercises" id="exercise-3"> | |
| <input type="radio" name="exercises" id="exercise-4"> | |
| <div class="chart grid"> | |
| <div class="exercise second"> | |
| <div class="bar bar-45 navy lightGray-face"> | |
| <div class="face top"> | |
| <div class="growing-bar"></div> | |
| </div> | |
| <div class="face side-0"> | |
| <div class="growing-bar"></div> | |
| </div> | |
| <div class="face floor"> | |
| <div class="growing-bar"></div> | |
| </div> | |
| <div class="face side-a"></div> | |
| <div class="face side-b"></div> | |
| <div class="face side-1"> | |
| <div class="growing-bar"></div> | |
| </div> | |
| </div> | |
| <div class="bar bar-80 yellow lightGray-face"> | |
| <div class="face top"> | |
| <div class="growing-bar"></div> | |
| </div> | |
| <div class="face side-0"> | |
| <div class="growing-bar"></div> | |
| </div> | |
| <div class="face floor"> | |
| <div class="growing-bar"></div> | |
| </div> | |
| <div class="face side-a"></div> | |
| <div class="face side-b"></div> | |
| <div class="face side-1"> | |
| <div class="growing-bar"></div> | |
| </div> | |
| </div> | |
| <div class="bar bar-60 red lightGray-face"> | |
| <div class="face top"> | |
| <div class="growing-bar"></div> | |
| </div> | |
| <div class="face side-0"> | |
| <div class="growing-bar"></div> | |
| </div> | |
| <div class="face floor"> | |
| <div class="growing-bar"></div> | |
| </div> | |
| <div class="face side-a"></div> | |
| <div class="face side-b"></div> | |
| <div class="face side-1"> | |
| <div class="growing-bar"></div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <p><em>It's liquid</em>, so adding a bit of code you can make charts like this :P</p> | |
| <nav class="actions"> | |
| <label for="exercise-1">E-1</label> | |
| <label for="exercise-2">E-2</label> | |
| <label for="exercise-3">E-3</label> | |
| <label for="exercise-4">E-4</label> | |
| </nav> | |
| </article> | |
| </section> | |
| </div> |
Pure CSS Progress, a pretty liquid progress-bar. I've coded Pure CSS Navigation triggers too, if you want the bar's code just follow the css comments :)
A Pen by Rafael González on CodePen.
| @import 'compass/reset'; | |
| @import 'compass/css3'; | |
| @import url(https://fonts.googleapis.com/css?family=Open+Sans:700,300); | |
| $yellow: #f1c40f; | |
| $lime: #76c900; | |
| $navy: #0a4069; | |
| $cyan: #57caf4; | |
| $red: #ec008c; | |
| $white: #fefefe; | |
| $gray: #444; | |
| $lightGray: lighten($gray, 30); | |
| $transitionDuration: .3s; | |
| $transition: all $transitionDuration ease-in-out; | |
| body | |
| { | |
| font-family: 'Open Sans', sans-serif; | |
| font-size: 16px; | |
| font-weight: 300; | |
| line-height: 1em; | |
| text-align: center; | |
| color: $gray; | |
| background: #d0d0d0; | |
| } | |
| h1 | |
| { | |
| font-size: 2.5em; | |
| margin: 2em 0 .5em; | |
| } | |
| h2 | |
| { | |
| margin-bottom: 3em; | |
| } | |
| em, | |
| strong | |
| { | |
| font-weight: 700; | |
| } | |
| input | |
| { | |
| display: none; | |
| } | |
| header p | |
| { | |
| margin-bottom: 0; | |
| } | |
| section | |
| { | |
| display: flex; | |
| justify-content: center; | |
| flex-direction: column; | |
| margin-bottom: 2em; | |
| padding: 0; | |
| &:last-of-type | |
| { | |
| margin-bottom: 0; | |
| } | |
| article | |
| { | |
| align-self: center; | |
| width: 20em; | |
| margin-bottom: 2em; | |
| p, | |
| &:last-of-type | |
| { | |
| margin-bottom: 0; | |
| } | |
| } | |
| } | |
| p | |
| { | |
| line-height: 1.5em; | |
| max-width: 20em; | |
| margin: 1.5em auto 2em; | |
| padding-bottom: 1.5em; | |
| span | |
| { | |
| display: block; | |
| } | |
| } | |
| .container | |
| { | |
| z-index: 1; | |
| display: flex; | |
| overflow: hidden; | |
| flex-direction: column; | |
| justify-content: center; | |
| margin-bottom: 4em; | |
| } | |
| /* | |
| * | |
| * | |
| START // CHART'S RULES | |
| -> "if you're picking code, don't forget the variables :)" | |
| */ | |
| .chart | |
| { | |
| font-size: 1em; | |
| perspective: 1000px; | |
| perspective-origin: 50% 50%; | |
| backface-visibility: visible; | |
| } | |
| $faceColor: rgba($white, .3); | |
| $growColor: rgba($red, .6); | |
| .bar | |
| { | |
| font-size: 1em; | |
| position: relative; | |
| height: 10em; | |
| transition: $transition; | |
| transform: rotateX(60deg) rotateY(0deg); | |
| transform-style: preserve-3d; | |
| .face | |
| { | |
| font-size: 2em; | |
| position: relative; | |
| width: 100%; | |
| height: 2em; | |
| background-color: $faceColor; | |
| &.side-a, | |
| &.side-b | |
| { | |
| width: 2em; | |
| } | |
| } | |
| .side-a | |
| { | |
| transform: rotateX(90deg) rotateY(-90deg) translateX(2em) translateY(1em) translateZ(1em); | |
| } | |
| .side-b | |
| { | |
| transform: rotateX(90deg) rotateY(-90deg) translateX(4em) translateY(1em) translateZ(-1em); | |
| position: absolute; | |
| right: 0; | |
| } | |
| .side-0 | |
| { | |
| transform: rotateX(90deg) rotateY(0) translateX(0) translateY(1em) translateZ(-1em); | |
| } | |
| .side-1 | |
| { | |
| transform: rotateX(90deg) rotateY(0) translateX(0) translateY(1em) translateZ(3em); | |
| } | |
| .top | |
| { | |
| transform: rotateX(0deg) rotateY(0) translateX(0em) translateY(4em) translateZ(2em); | |
| } | |
| .floor | |
| { | |
| box-shadow: 0 .1em 0.6em rgba(0,0,0,.3), .6em -0.5em 3em rgba(0,0,0,.3), 1em -1em 8em $white; | |
| } | |
| } | |
| .growing-bar | |
| { | |
| transition: $transition; | |
| background-color: $growColor; | |
| width: 100%; | |
| height: 2em; | |
| } | |
| @mixin drawSkin($color, $name) | |
| { | |
| .bar.#{$name} | |
| { | |
| .side-a, | |
| // &.bar-100 .side-b, | |
| .growing-bar | |
| { | |
| background-color: rgba($color, .6); | |
| } | |
| .side-0 .growing-bar | |
| { | |
| box-shadow: -0.5em -1.5em 4em $color; | |
| } | |
| .floor .growing-bar | |
| { | |
| box-shadow: 0em 0em 2em $color; | |
| } | |
| } | |
| } | |
| @mixin drawFaces($color, $name) | |
| { | |
| .chart .bar.#{$name} .face | |
| { | |
| background-color: rgba($color, .2); | |
| } | |
| } | |
| @include drawSkin(rgba($yellow, .8), 'yellow'); | |
| @include drawSkin(rgba($red, .8), 'red'); | |
| @include drawSkin($cyan, 'cyan'); | |
| @include drawSkin(rgba($navy, .8), 'navy'); | |
| @include drawSkin($lime, 'lime'); | |
| @include drawSkin($white, 'white'); | |
| @include drawSkin($gray, 'gray'); | |
| @include drawFaces(rgba($yellow, .6), 'yellow-face'); | |
| @include drawFaces($lime, 'lime-face'); | |
| @include drawFaces(rgba($red, .6), 'red-face'); | |
| @include drawFaces(rgba($navy, .6), 'navy-face'); | |
| @include drawFaces($cyan, 'cyan-face'); | |
| @include drawFaces($gray, 'gray-face'); | |
| @include drawFaces($lightGray, 'lightGray-face'); | |
| @for $i from 0 to 101 | |
| { | |
| .bar-#{$i} | |
| { | |
| .growing-bar | |
| { | |
| width: percentage($i/100); | |
| } | |
| } | |
| } | |
| /* | |
| END // CHART'S RULES | |
| * | |
| * | |
| */ | |
| .chart.grid | |
| { | |
| display: flex; | |
| flex-direction: row; | |
| .exercise | |
| { | |
| flex: 0 0 100%; | |
| display: flex; | |
| .bar | |
| { | |
| flex: 1; | |
| margin: 0 .5em; | |
| &:nth-child(2) | |
| { | |
| z-index: 8; | |
| flex: 1 0 40%; | |
| } | |
| &:first-child | |
| { | |
| z-index: 10; | |
| margin-left: 0; | |
| } | |
| &:last-child | |
| { | |
| margin-right: 0; | |
| } | |
| } | |
| } | |
| } | |
| .actions | |
| { | |
| display: flex; | |
| justify-content: center; | |
| margin-bottom: 0; | |
| padding-bottom: 2em; | |
| border-bottom: 1px dotted rgba($gray, .4); | |
| } | |
| label | |
| { | |
| box-sizing: border-box; | |
| padding: 1em; | |
| margin: 0 .2em; | |
| cursor: pointer; | |
| transition: all .15s ease-in-out; | |
| color: $navy; | |
| border: 1px solid rgba($white, .6); | |
| border-radius: 0; | |
| flex: 1; | |
| &:first-child | |
| { | |
| margin-left: 0; | |
| border-radius: .2em 0 0 .2em; | |
| } | |
| &:last-child | |
| { | |
| margin-right: 0; | |
| border-radius: 0 .2em .2em 0; | |
| } | |
| } | |
| input[id='exercise-1']:checked ~ .actions label[for='exercise-1'], | |
| input[id='exercise-2']:checked ~ .actions label[for='exercise-2'], | |
| input[id='exercise-3']:checked ~ .actions label[for='exercise-3'], | |
| input[id='exercise-4']:checked ~ .actions label[for='exercise-4'], | |
| input[id='pos-0']:checked ~ .actions label[for='pos-0'], | |
| input[id='pos-1']:checked ~ .actions label[for='pos-1'], | |
| input[id='pos-2']:checked ~ .actions label[for='pos-2'], | |
| input[id='pos-3']:checked ~ .actions label[for='pos-3'], | |
| input[id='red']:checked ~ .actions label[for='red'], | |
| input[id='cyan']:checked ~ .actions label[for='cyan'], | |
| input[id='lime']:checked ~ .actions label[for='lime'] | |
| { | |
| color: $lime; | |
| border: 1px solid darken($navy, 15); | |
| background-color: $navy; | |
| } | |
| input[id='red']:checked ~ .chart | |
| { | |
| @extend .bar.red; | |
| } | |
| input[id='cyan']:checked ~ .chart | |
| { | |
| @extend .bar.cyan; | |
| } | |
| input[id='lime']:checked ~ .chart | |
| { | |
| @extend .bar.lime; | |
| } | |
| input[id='pos-0']:checked ~ .chart | |
| { | |
| @extend .bar-25; | |
| } | |
| input[id='pos-1']:checked ~ .chart | |
| { | |
| @extend .bar-50; | |
| } | |
| input[id='pos-2']:checked ~ .chart | |
| { | |
| @extend .bar-75; | |
| } | |
| input[id='pos-3']:checked ~ .chart | |
| { | |
| @extend .bar-100; | |
| } | |
| input[id='exercise-2']:checked ~ .chart.grid | |
| { | |
| .exercise .bar | |
| { | |
| &:nth-child(1) | |
| { | |
| flex: 1 0 0%; | |
| @extend .bar-20; | |
| } | |
| &:nth-child(2) | |
| { | |
| flex: 1; | |
| @extend .bar-50; | |
| } | |
| &:nth-child(3) | |
| { | |
| flex: 1 0 30%; | |
| @extend .bar-80; | |
| } | |
| } | |
| } | |
| input[id='exercise-3']:checked ~ .chart.grid | |
| { | |
| .exercise .bar | |
| { | |
| &:nth-child(1), | |
| &:nth-child(2), | |
| &:nth-child(3) | |
| { | |
| flex: 1; | |
| @extend .bar-70; | |
| } | |
| } | |
| } | |
| input[id='exercise-4']:checked ~ .chart.grid | |
| { | |
| .exercise .bar | |
| { | |
| &:nth-child(1), | |
| &:nth-child(2) | |
| { | |
| flex: 1 0 30%; | |
| @extend .bar-50; | |
| } | |
| &:nth-child(3) | |
| { | |
| flex: 1; | |
| @extend .bar-100; | |
| } | |
| } | |
| } | |