/** * Cassette Tape UI Prototype (09/2012) * ALPHA build / experimental state, unsupported; use at own risk * Requires CSS3 border-radius + support * -------------------------------------------------- * http://www.schillmania.com/projects/soundmanager2/ * * Tape UI elements (spokes, reels, textures) by Brian Scates * http://sxates.com/ */ html { position: relative; width: 100%; height: 100%; /* prevent scrollbars within the draggable case. */ overflow: hidden; background: #000 url(../image/demo_backgrounds/sfatnight_1600.jpg) no-repeat 0px 0px; } body { color: #fff; } .tape.draggable { position: absolute; display: inline-block; margin: 0px; box-shadow: 0px 0px 16px rgba(0,0,0,0.1); border-color: rgba(0,0,0,0.25); background: transparent; border: 1px solid rgba(0,0,0,0.1); } .tape.draggable .rail-left, .tape.draggable .rail-right { /* hack: would reuse metal texture, but not dark enough due to dynamically-applied gradient. */ display: none; } .tape.draggable .reel-mask { background-color: rgba(255,255,255,0.1); background-color: transparent; } .tape.draggable .blur-image-wrapper { position: absolute; left: 0px; top: 0px; width: 100%; border-radius: 12px; overflow: hidden; z-index: -1; } .tape.draggable .blur-image { position: absolute; left: 0px; top: 0px; width: 100%; height: 100%; border-radius: 12px; /* hack for now */ margin-left: 100%; margin-right: 100%; } .tape.draggable .transparency-sheet { /* wash out everything slightly */ position: absolute; left: 0px; top: 0px; width: 100%; background: rgba(255,255,255,0.25); border-radius: 12px; } .tape.draggable .blur-image-wrapper, .tape.draggable .transparency-sheet { /* fade and blur, same height */ height: 81%; } .tape.draggable .tape-shell { background: transparent url(../image/ma-r90-metal-pattern-v2.png); background-size: normal; } .tape.draggable .tape-gradient { background: transparent url(../image/gradient.png) no-repeat 0px 0px; /* TODO: use a native CSS gradient. Save 2 KB image request, but maybe slower to draw? */ /* display: none; */ } .tape.draggable .tape-shell, .tape.draggable .tape-gradient { position: absolute; left: 0px; top: 0px; width: 100%; height: 100%; border-radius: 12px; /** * TODO: consider using webkit-mask-box-image where supported, and canvas otherwise? */ /* -webkit-mask-box-image: url(../image/ma-r90-mask.png); -moz-mask-image: url(../image/ma-r90-mask.png); -moz-mask-image: -moz-linear-gradient(bottom, rgba(255,0,0,1), rgba(0,255,0,1), rgba(0,0,255,0), rgba(128,0,128,0)); -moz-mask-size: 480px 300px; */ } .tape.draggable .tape-pad-holder { background: transparent; bottom: 0px; height: 7px; } .tape.draggable .tape-pad { background: rgba(96,48,0,0.9); height: 100%; top: -1px; } .tape.draggable .tape-pad-line { display: block; border-top: 1px solid rgba(64,32,0,0.5); bottom: auto; top: 0px; margin-left: -46%; width: 188%; } .tape.draggable .controls { top: 0px; } /* a few loading transition bits */ .tape.draggable { opacity: 0; } .tape.draggable.ready { opacity: 1; } .tape.draggable.dropin { -o-animation: dropin 0.75s; -moz-animation: dropin 0.75s; -ms-animation: dropin 0.75s; -webkit-animation: dropin 0.75s; } @-o-keyframes dropin { 0% { opacity: 0; -o-transform: scale(2); -o-animation-timing-function: ease-out; } 33% { opacity: 0.5; -o-transform: scale(0.85); -o-animation-timing-function: ease-in-out; } 55% { opacity: 1; -o-transform: scale(1); -o-animation-timing-function: ease-in-out; } 77% { opacity: 1; -o-transform: scale(0.98); -o-animation-timing-function: ease-in-out; } 100% { opacity: 1; -o-transform: scale(1); -o-animation-timing-function: ease-in-out; } } @-moz-keyframes dropin { 0% { opacity: 0; -moz-transform: scale3d(2, 2, 1); -moz-animation-timing-function: ease-out; } 33% { opacity: 0.5; -moz-transform: scale3d(0.85, 0.85, 1); -moz-animation-timing-function: ease-in-out; } 55% { opacity: 1; -moz-transform: scale3d(1.05, 1.05, 1); -moz-animation-timing-function: ease-in-out; } 77% { opacity: 1; -moz-transform: scale3d(0.98, 0.98, 1); -moz-animation-timing-function: ease-in-out; } 100% { opacity: 1; -moz-transform: scale3d(1, 1, 1); -moz-animation-timing-function: ease-in-out; } } @-ms-keyframes dropin { 0% { opacity: 0; -ms-transform: scale3d(2, 2, 1); -ms-animation-timing-function: ease-out; } 33% { opacity: 0.5; -ms-transform: scale3d(0.85, 0.85, 1); -ms-animation-timing-function: ease-in-out; } 55% { opacity: 1; -ms-transform: scale3d(1.05, 1.05, 1); -ms-animation-timing-function: ease-in-out; } 77% { opacity: 1; -ms-transform: scale3d(0.98, 0.98, 1); -ms-animation-timing-function: ease-in-out; } 100% { opacity: 1; -ms-transform: scale3d(1, 1, 1); -ms-animation-timing-function: ease-in-out; } } @-webkit-keyframes dropin { 0% { opacity: 0; -webkit-transform: scale3d(2, 2, 1); -webkit-animation-timing-function: ease-out; } 33% { opacity: 0.5; -webkit-transform: scale3d(0.85, 0.85, 1); -webkit-animation-timing-function: ease-in-out; } 55% { opacity: 1; -webkit-transform: scale3d(1.05, 1.05, 1); -webkit-animation-timing-function: ease-in-out; } 77% { opacity: 1; -webkit-transform: scale3d(0.98, 0.98, 1); -webkit-animation-timing-function: ease-in-out; } 100% { opacity: 1; -webkit-transform: scale3d(1, 1, 1); -webkit-animation-timing-function: ease-in-out; } } .tape.draggable .blur-image-wrapper { opacity: 0; -moz-transition: opacity 0.1s ease-out; -webkit-transition: opacity 0.1s ease-out; transition: opacity 0.1s ease-out; } .tape.draggable.ready .blur-image-wrapper { opacity: 1; } .tape.draggable { -moz-transition: -moz-transform 0.1s ease-out; -moz-transform: scale3d(1, 1, 1); -ms-transition: -ms-transform 0.1s ease-out; -ms-transform: scale3d(1, 1, 1); -o-transition: -o-transform 0.1s ease-out; -o-transform: scale(1); -webkit-transition: -webkit-transform 0.1s ease-out; -webkit-transform: scale3d(1, 1, 1); } .tape.draggable.dragging { -ms-transform: scale3d(1.025, 1.025, 1); -moz-transform: scale3d(1.025, 1.025, 1); -o-transform: scale(1.025); -webkit-transform: scale3d(1.025, 1.025, 1); } .tape.draggable.dropping { -o-animation: dragdrop 0.5s; -ms-animation: dragdrop 0.5s; -moz-animation: dragdrop 0.5s; -webkit-animation: dragdrop 0.5s; } @-ms-keyframes dragdrop { 0% { -ms-transform: scale3d(1.025, 1,025, 1); -ms-animation-timing-function: ease-in-out; } 33% { -ms-transform: scale3d(0.99, 0.99, 1); -ms-animation-timing-function: ease-in-out; } 55% { -ms-transform: scale3d(1.005, 1.005, 1); -ms-animation-timing-function: ease-in-out; } 77% { -ms-transform: scale3d(0.997, 0.997, 1); -ms-animation-timing-function: ease-in-out; } 100% { -ms-transform: scale3d(1, 1, 1); -ms-animation-timing-function: ease-in-out; } } @-moz-keyframes dragdrop { 0% { -moz-transform: scale3d(1.025, 1,025, 1); -moz-animation-timing-function: ease-in-out; } 33% { -moz-transform: scale3d(0.99, 0.99, 1); -moz-animation-timing-function: ease-in-out; } 55% { -moz-transform: scale3d(1.005, 1.005, 1); -moz-animation-timing-function: ease-in-out; } 77% { -moz-transform: scale3d(0.997, 0.997, 1); -moz-animation-timing-function: ease-in-out; } 100% { -moz-transform: scale3d(1, 1, 1); -moz-animation-timing-function: ease-in-out; } } @-o-keyframes dragdrop { 0% { -o-transform: scale(1.025); -o-animation-timing-function: ease-in-out; } 33% { -o-transform: scale(0.99); -o-animation-timing-function: ease-in-out; } 55% { -o-transform: scale(1.005); -o-animation-timing-function: ease-in-out; } 77% { -o-transform: scale(0.997); -o-animation-timing-function: ease-in-out; } 100% { -o-transform: scale(1); -o-animation-timing-function: ease-in-out; } } @-webkit-keyframes dragdrop { 0% { -webkit-transform: scale3d(1.025, 1,025, 1); -webkit-animation-timing-function: ease-in-out; } 33% { -webkit-transform: scale3d(0.99, 0.99, 1); -webkit-animation-timing-function: ease-in-out; } 55% { -webkit-transform: scale3d(1.005, 1.005, 1); -webkit-animation-timing-function: ease-in-out; } 77% { -webkit-transform: scale3d(0.997, 0.997, 1); -webkit-animation-timing-function: ease-in-out; } 100% { -webkit-transform: scale3d(1, 1, 1); -webkit-animation-timing-function: ease-in-out; } }