Pure CSS3 animated illustration based on the concept of a page being 'under construction'. Easily change the color theme with one variable.
A Pen by Marian Arlt on CodePen.
| - var objects = ['line lineOne', 'line lineTwo', 'line lineThree', 'stand', 'weight', 'cabin', 'arm'] | |
| - var n = 0 | |
| #content | |
| h1 < building /> | |
| p Working day and night! | |
| #outerCraneContainer | |
| .buildings | |
| while n < 5 | |
| div(class= n++) | |
| .crane.craneThree | |
| for i in objects | |
| div(class= i) | |
| .crane.craneTwo | |
| for i in objects | |
| div(class= i) | |
| .crane.craneOne | |
| for i in objects | |
| div(class= i) | |
| a(rel='license' href='http://creativecommons.org/licenses/by-nc-sa/4.0/' id='license') | |
| img(alt='Creative Commons License' style='border-width:0' src='https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png') |
| // Please respect a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. That means only share and adapt giving a fair credit and do not use for commercial projects. Thank you. | |
| @import url('https://fonts.googleapis.com/css?family=Ubuntu') | |
| $craneWidth = 260px | |
| $craneHeight = $craneWidth / 1.53 | |
| $craneBorder = 1px | |
| $teal = rgba(68, 192, 166, 1) | |
| $purp = rgba(64, 42, 79, 1) | |
| $cityColor = tomato | |
| #outerCraneContainer | |
| position absolute | |
| width 100% | |
| height 100% | |
| bottom 0 | |
| overflow hidden | |
| display flex | |
| justify-content center | |
| box-shadow inset 0 -60px 0 -30px $cityColor | |
| .buildings | |
| height ($craneHeight / 2) | |
| width 100% | |
| left 0 | |
| div | |
| height inherit | |
| width ($craneHeight / 4) | |
| background $cityColor | |
| position absolute | |
| bottom 10% | |
| &:after | |
| content '' | |
| width 80% | |
| height 60% | |
| left 10% | |
| bottom 30% | |
| background url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAFElEQVQImWP4////fwYYIJKDEwAAfPsP8eFXG40AAAAASUVORK5CYII=') repeat | |
| position absolute | |
| .buildings div:nth-of-type(1) | |
| width ($craneHeight / 4) | |
| height ($craneHeight / 8) | |
| right 37% | |
| bottom 18% | |
| &:after | |
| bottom 11% | |
| .buildings div:nth-of-type(2) | |
| width ($craneHeight / 3.5) | |
| height ($craneHeight / 6) | |
| right 30% | |
| bottom 35% | |
| transform rotate(180deg) | |
| &:after | |
| width 60% | |
| left 11% | |
| .buildings div:nth-of-type(3) | |
| width ($craneHeight / 7) | |
| height ($craneHeight / 4.5) | |
| left 40% | |
| bottom 35% | |
| &:after | |
| bottom 0 | |
| width 20% | |
| height 85% | |
| left 70% | |
| .buildings div:nth-of-type(4) | |
| width ($craneHeight / 2) | |
| height ($craneHeight / 8) | |
| left 24% | |
| bottom 20% | |
| &:after | |
| background none | |
| .buildings div:nth-of-type(5) | |
| width ($craneHeight / 2.75) | |
| height ($craneHeight / 2.5) | |
| left 47% | |
| bottom 10% | |
| &:after | |
| bottom 0 | |
| width 40% | |
| height 85% | |
| left 20% | |
| .crane, .buildings | |
| position absolute | |
| bottom 0 | |
| .crane div | |
| border-radius 2px | |
| position absolute | |
| .crane .line | |
| border none | |
| background $cityColor | |
| outline 1px solid transparent | |
| z-index 0 | |
| .crane .lineOne | |
| width 60% | |
| left 11% | |
| top 0 | |
| .crane .lineTwo | |
| width 19% | |
| right 8% | |
| top 0 | |
| .crane .line.lineThree | |
| height 30% | |
| top 22% | |
| left 9% | |
| &:after | |
| content '' | |
| position absolute | |
| height .2em | |
| width 9000% | |
| background lighten($cityColor, 20%) | |
| display block | |
| bottom 0 | |
| left -4500% | |
| border solid $craneBorder $cityColor | |
| .craneTwo .line.lineThree:after | |
| height .1em | |
| .craneThree .line.lineThree:after | |
| height .05em | |
| .stand | |
| height 100% | |
| width 5% | |
| right 25% | |
| z-index 1 | |
| background linear-gradient(to top, $cityColor, desaturate(lighten($cityColor, 30%), 20%)) | |
| .craneTwo .stand | |
| background linear-gradient(to top, $cityColor, desaturate(lighten($cityColor, 25%), 20%)) | |
| .craneThree .stand | |
| background linear-gradient(to top, $cityColor, desaturate(lighten($cityColor, 20%), 20%)) | |
| .weight | |
| height 20% | |
| width 8% | |
| right 4% | |
| top 12% | |
| z-index 2 | |
| background desaturate(lighten($cityColor, 25%), 10%) | |
| .craneTwo .weight | |
| background desaturate(lighten($cityColor, 20%), 10%) | |
| .craneThree .weight | |
| background desaturate(lighten($cityColor, 15%), 10%) | |
| .cabin | |
| height 9% | |
| width 12% | |
| right 24% | |
| top 20% | |
| z-index 2 | |
| background desaturate(lighten($cityColor, 25%), 10%) | |
| &:after | |
| content '' | |
| position absolute | |
| height 10% | |
| width 100% | |
| background white | |
| display block | |
| top 60% | |
| left 0 | |
| .craneTwo .cabin | |
| background desaturate(lighten($cityColor, 20%), 10%) | |
| .craneThree .cabin | |
| background desaturate(lighten($cityColor, 15%), 10%) | |
| .arm | |
| height 7% | |
| width 100% | |
| top 15% | |
| z-index 3 | |
| background desaturate(lighten($cityColor, 25%), 10%) | |
| .craneTwo .arm | |
| background desaturate(lighten($cityColor, 20%), 10%) | |
| .craneThree .arm | |
| background desaturate(lighten($cityColor, 15%), 10%) | |
| .crane div.arm | |
| border-top-left-radius 10px | |
| .brick | |
| height 6% | |
| width 9% | |
| bottom 0 | |
| left 40% | |
| background lighten($cityColor, 10%) | |
| .brickTwo | |
| left 48% | |
| .brickThree | |
| bottom 5.5% | |
| left 44% | |
| .craneOne | |
| width $craneWidth | |
| height $craneHeight | |
| left 20% | |
| div | |
| border solid $craneBorder $cityColor | |
| .line | |
| height $craneBorder | |
| .lineThree | |
| width $craneBorder | |
| .craneTwo | |
| width ($craneWidth / 1.3) | |
| height ($craneHeight / 1.3) | |
| transform scaleX(-1) | |
| left 40% | |
| z-index -1 | |
| div | |
| border solid 1px $cityColor | |
| .line | |
| height ($craneBorder / 1.3) | |
| .lineThree | |
| width ($craneBorder / 1.4) | |
| animation-delay 3s | |
| .cabin, .arm, .picker, .weight | |
| animation-delay 3s | |
| .craneThree | |
| width ($craneWidth / 2) | |
| height ($craneHeight / 2) | |
| left 60% | |
| z-index -1 | |
| div | |
| border solid 1px $cityColor | |
| .line | |
| height ($craneBorder / 2) | |
| .lineThree | |
| width ($craneBorder / 2) | |
| animation-delay 1.5s | |
| .brickThree | |
| bottom 5% | |
| .brickOne, .brickTwo | |
| bottom 0 | |
| .cabin, .arm, .picker, .weight | |
| animation-delay 1.5s | |
| .crane | |
| perspective 600px | |
| .lineOne | |
| transform-origin right 0 | |
| animation moveLineOne 12s infinite alternate | |
| .lineTwo | |
| transform-origin top left | |
| animation moveLineTwo 12s infinite alternate | |
| .lineThree | |
| transform-origin right center | |
| animation moveLineThree 12s ease-in-out infinite alternate | |
| .cabin, .arm, .picker | |
| transform-origin 80% center | |
| animation moveCrane 12s infinite alternate | |
| .weight | |
| transform-origin 0 center | |
| animation moveWeight 12s infinite alternate | |
| @keyframes moveCrane | |
| 0%, 20% | |
| transform rotateY(0) | |
| 70%, 100% | |
| transform rotateY(45deg) | |
| @keyframes moveWeight | |
| 0%, 20% | |
| transform rotateY(0) translateX(0) | |
| 70%, 100% | |
| transform rotateY(45deg) translateX(-50%) | |
| @keyframes moveLineOne | |
| 0%, 20% | |
| transform rotateY(0) rotateZ(-10deg) | |
| 70%, 100% | |
| transform rotateY(45deg) rotateZ(-10deg) | |
| @keyframes moveLineTwo | |
| 0%, 20% | |
| transform rotateY(0) rotateZ(29deg) | |
| 70%, 100% | |
| transform rotateY(15deg) rotateZ(29deg) | |
| @keyframes moveLineThree | |
| 0% | |
| transform translate(0, 0) | |
| 20% | |
| transform translate(2500%, -18%) | |
| 60% | |
| transform translate(11000%, -25%) | |
| 70% | |
| transform translate(9100%, -25%) | |
| height 30% | |
| 90%, 100% | |
| transform translate(9100%, -15%) | |
| height 80% | |
| html | |
| -ms-text-size-adjust 100% | |
| -webkit-text-size-adjust 100% | |
| -webkit-tap-highlight-color transparent | |
| html, body | |
| height 100% | |
| * | |
| box-sizing border-box | |
| body | |
| background linear-gradient(to top, lighten($cityColor, 40%), hue($cityColor, 40%)) | |
| -webkit-font-smoothing antialiased | |
| -moz-osx-font-smoothing grayscale | |
| text-shadow 1px 1px 1px rgba(0,0,0,0.004) | |
| #content | |
| height 100% | |
| width 100% | |
| display flex | |
| flex-direction column | |
| align-items center | |
| justify-content center | |
| font-family Ubuntu | |
| color white | |
| h1, p | |
| margin -8rem 0 0 1rem | |
| p | |
| margin-top .5rem | |
| #license | |
| position absolute | |
| bottom 0 | |
| right 5px |
Pure CSS3 animated illustration based on the concept of a page being 'under construction'. Easily change the color theme with one variable.
A Pen by Marian Arlt on CodePen.