"card"
Bootstrap 3.0.0 Snippet by adarwash2012

<link href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css"> <script src="//netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script> <script src="//code.jquery.com/jquery-1.11.1.min.js"></script> <!------ Include the above in your HEAD tag ----------> <!DOCTYPE html><html class=''> <head><script src='//production-assets.codepen.io/assets/editor/live/console_runner-079c09a0e3b9ff743e39ee2d5637b9216b3545af0de366d4b9aad9dc87e26bfd.js'></script><script src='//production-assets.codepen.io/assets/editor/live/events_runner-73716630c22bbc8cff4bd0f07b135f00a0bdc5d14629260c3ec49e5606f98fdd.js'></script><script src='//production-assets.codepen.io/assets/editor/live/css_live_reload_init-2c0dc5167d60a5af3ee189d570b1835129687ea2a61bee3513dee3a50c115a77.js'></script><meta charset='UTF-8'><meta name="robots" content="noindex"><link rel="shortcut icon" type="image/x-icon" href="//production-assets.codepen.io/assets/favicon/favicon-8ea04875e70c4b0bb41da869e81236e54394d63638a1ef12fa558a4a835f1164.ico" /><link rel="mask-icon" type="" href="//production-assets.codepen.io/assets/favicon/logo-pin-f2d2b6d2c61838f7e76325261b7195c27224080bc099486ddd6dccb469b8e8e6.svg" color="#111" /><link rel="canonical" href="https://codepen.io/kunukn/pen/obJEJE?depth=everything&order=popularity&page=5&q=tablet&show_forks=false" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style class="cp-pen-styles">* { outline: none; } *, *:before, *:after { box-sizing: border-box; } html, body { height: 100%; } body { margin: 0; padding: 10px; min-height: 400px; font-family: sans-serif; display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; -webkit-box-align: start; -ms-flex-align: start; align-items: flex-start; font: 16px sans-serif; background: -webkit-radial-gradient(#b3b1cb, #e1defe); background: radial-gradient(#b3b1cb, #e1defe); } @media (min-height: 500px) { body { -webkit-box-align: center; -ms-flex-align: center; align-items: center; } } .component { position: relative; color: white; background-color: #3D3D4A; border-radius: 10px; box-shadow: 0px 20px 40px rgba(0, 0, 0, 0.5), 0px -2px 40px rgba(0, 0, 0, 0.3); min-width: 280px; display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column; } @media (min-width: 800px) { .component { -webkit-box-orient: horizontal; -webkit-box-direction: normal; -ms-flex-direction: row; flex-direction: row; } } .component:before, .component:after { content: ''; background-color: transparent; position: absolute; z-index: -1; box-shadow: 0 20px 20px rgba(0, 0, 0, 0.3); top: 100%; bottom: -5px; left: 8%; right: 8%; border-radius: 50%; } .component:after { box-shadow: 0 25px 20px rgba(0, 0, 0, 0.6); left: 12%; right: 12%; } .component aside { position: relative; display: block; background: #373641; border-top-left-radius: 10px; border-top-right-radius: 10px; } @media (min-width: 800px) { .component aside { border-top-right-radius: 0; border-bottom-left-radius: 10px; min-width: 140px; } } .component aside .preamp { height: 70px; display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } @media (min-width: 800px) { .component aside .preamp { height: 100px; } } .component aside .preamp > label { color: #DEDFE4; text-transform: uppercase; display: block; font-weight: 700; } .component main { position: relative; display: block; padding-bottom: 50px; } @media (min-width: 800px) { .component main { padding-left: 20px; padding-right: 20px; } } .component main .presets { display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; padding: 10px; padding-left: calc(40px/2 - .5em); height: 100px; color: #8e8e9b; font-weight: 700; border-color: #4F4F62; background: transparent; } @media (min-width: 800px) { .component main .presets { padding-left: calc(80px/2 - .5em); -webkit-box-pack: start; -ms-flex-pack: start; justify-content: flex-start; } } .component main .presets > label { display: inline-block; margin-right: 20px; } .component main .presets > select { -webkit-appearance: none; border-radius: 8px; border: 2px solid currentColor; max-width: 200px; padding: 4px; color: inherit; background: transparent; border-color: inherit; height: 30px; margin-right: 10px; } @media (min-width: 800px) { .component main .presets > select { min-width: 200px; padding-left: 10px; } } .component main .presets > select option { background-color: #3D3D4A; } .component main .presets > button { height: 30px; border-radius: 8px; background: transparent; color: inherit; border: 2px solid currentColor; border-color: inherit; padding: 4px 10px; cursor: pointer; outline: none; } @media (min-width: 800px) { .component main .presets > button { min-width: 80px; } } .component main .sliders { position: relative; display: inline-block; } .component main .sliders .range-slider { display: inline-block; width: 40px; position: relative; height: 300px; float: left; } @media (min-width: 800px) { .component main .sliders .range-slider { width: 80px; } } .component main .sliders .range-slider::after { position: absolute; bottom: -24px; left: calc(50% - 2em); font-size: 80%; color: #8e8e9b; content: '32'; width: 4em; text-align: center; } .component main .sliders .range-slider:nth-child(2)::after { content: '32'; } .component main .sliders .range-slider:nth-child(3)::after { content: '64'; } .component main .sliders .range-slider:nth-child(4)::after { content: '128'; } .component main .sliders .range-slider:nth-child(5)::after { content: '256'; } .component main .sliders .range-slider:nth-child(6)::after { content: '512'; } .component main .sliders .range-slider:nth-child(7)::after { content: '1K'; } .component main .sliders .range-slider:nth-child(8)::after { content: '2K'; } .component main .sliders .range-slider__thumb { opacity: 1; position: absolute; left: 10px; width: 20px; height: 20px; line-height: 20px; background-color: white; color: #8376FF; text-align: center; font-size: 40%; box-shadow: 0 0 2px #373641; border-radius: 50%; pointer-events: none; cursor: pointer; z-index: 2; } @media (min-width: 800px) { .component main .sliders .range-slider__thumb { left: 30px; } } .component main .sliders .range-slider__bar { left: 18px; bottom: 0; position: absolute; background: -webkit-linear-gradient(#9791B8, #8376FF); background: linear-gradient(#9791B8, #8376FF); pointer-events: none; width: 4px; border-radius: 10px; opacity: 1; } @media (min-width: 800px) { .component main .sliders .range-slider__bar { left: 38px; } } .component main .sliders .range-slider input[type=range][orient=vertical] { position: relative; margin: 0; height: 100%; width: 100%; display: inline-block; position: relative; -webkit-writing-mode: bt-lr; -ms-writing-mode: bt-lr; writing-mode: bt-lr; -webkit-appearance: slider-vertical; } .component main .sliders .range-slider input[type=range][orient=vertical]::-webkit-slider-runnable-track, .component main .sliders .range-slider input[type=range][orient=vertical]::-webkit-slider-thumb { -webkit-appearance: none; } .component main .sliders .range-slider input[type=range][orient=vertical]::-webkit-slider-runnable-track { border: none; background: #343440; width: 4px; border-color: #343440; border-radius: 10px; box-shadow: 0 0 0 2px #3D3D4A; } .component main .sliders .range-slider input[type=range][orient=vertical]::-moz-range-track { border: none; background: #343440; width: 4px; border-color: #343440; border-radius: 10px; box-shadow: 0 0 0 2px #3D3D4A; } .component main .sliders .range-slider input[type=range][orient=vertical]::-ms-track { border: none; background: #343440; width: 4px; border-color: #343440; border-radius: 10px; box-shadow: 0 0 0 2px #3D3D4A; color: transparent; height: 100%; } .component main .sliders .range-slider input[type=range][orient=vertical]::-ms-fill-lower, .component main .sliders .range-slider input[type=range][orient=vertical]::-ms-fill-upper, .component main .sliders .range-slider input[type=range][orient=vertical]::-ms-tooltip { display: none; } .component main .sliders .range-slider input[type=range][orient=vertical]::-webkit-slider-thumb { left: -20px; position: relative; width: 40px; height: 40px; opacity: 0; } .component main .sliders .range-slider input[type=range][orient=vertical]::-moz-range-thumb { position: relative; width: 40px; height: 40px; opacity: 0; } .component main .sliders .range-slider input[type=range][orient=vertical]::-ms-thumb { position: relative; width: 40px; height: 40px; opacity: 0; } .component main .sliders svg { z-index: 1; overflow: visible; pointer-events: none; position: absolute; top: 0; left: 0; width: 100%; height: 100%; fill: none; stroke-width: 1; } .component main .sliders svg .line { stroke: #F7ED7D; } .component main .sliders svg .line-shadow { z-index: 1; stroke-width: 2; stroke: #252525; opacity: .35; display: none; } @media (min-width: 800px) { .component main .sliders svg .line-shadow { display: block; } } .design-reference { position: fixed; bottom: 6px; right: 6px; color: #8e8e9b; font-size: 70%; display: none; } @media (min-height: 600px) { .design-reference { display: block; } } </style></head><body> <a class="design-reference" href="//100daysui.com/#cbp=ajax/shot-90" target="_blank">100 Days UI Challenge - Day 90</a> <div class="component"> <aside> <div class="preamp"> <label>preamp</label> </div> </aside> <main> <div class="presets"> <label>Presets:</label> <select name="Custom" onchange="app.selectPreset(this)"> <option value="custom">Custom</option> <option value="rock">Rock</option> <option value="pop">Pop</option> <option value="pop">Classical</option> <option value="pop">Disco</option> </select> <button class="reset" onclick="app.reset()">Reset</button> </div> <div class="sliders"> <svg preserveAspectRatio="none" viewBox="0 0 140 100"> <path d="" class="line-shadow"></path> <path d="" class="line"></path> </svg> <div class="range-slider"> <input type="range" orient="vertical" min="0" max="100" /> <div class="range-slider__bar"></div> <div class="range-slider__thumb"></div> </div> <div class="range-slider"> <input type="range" orient="vertical" min="0" max="100" /> <div class="range-slider__bar"></div> <div class="range-slider__thumb"></div> </div> <div class="range-slider"> <input type="range" orient="vertical" min="0" max="100" /> <div class="range-slider__bar"></div> <div class="range-slider__thumb"></div> </div> <div class="range-slider"> <input type="range" orient="vertical" min="0" max="100" /> <div class="range-slider__bar"></div> <div class="range-slider__thumb"></div> </div> <div class="range-slider"> <input type="range" orient="vertical" min="0" max="100" /> <div class="range-slider__bar"></div> <div class="range-slider__thumb"></div> </div> <div class="range-slider"> <input type="range" orient="vertical" min="0" max="100" /> <div class="range-slider__bar"></div> <div class="range-slider__thumb"></div> </div> <div class="range-slider"> <input type="range" orient="vertical" min="0" max="100" /> <div class="range-slider__bar"></div> <div class="range-slider__thumb"></div> </div> </div> </main> </div> <script src='//production-assets.codepen.io/assets/common/stopExecutionOnTimeout-b2a7b3fe212eaa732349046d8416e00a9dec26eb7fd347590fbced3ab38af52e.js'></script> <script >'use strict'; // String formatter if (!String.prototype.format) { String.prototype.format = function () { var args = arguments; return this.replace(/{(\d+)}/g, function (match, number) { return typeof args[number] != 'undefined' ? args[number] : match; }); }; } var app = function () { var $svgLine = document.querySelector('svg .line'); var $svgLineShadow = document.querySelector('svg .line-shadow'); var sliderThumbSize = 20; var sliderHeight = 300; var svgViewBoxHeight = 100; var svgViewBoxThumbLimit = sliderThumbSize / 2 * (svgViewBoxHeight / sliderHeight); var svgViewBoxGraphMax = svgViewBoxHeight - svgViewBoxThumbLimit; var svgViewBoxGraphMin = svgViewBoxThumbLimit; var ranges = { range1: null, range2: null, range3: null, range4: null, range5: null, range6: null, range7: null }; // Only the y values changes var points = { begin: { x: 10, y: 0 }, point1: { x: 10, y: 0 }, control1: { x: 20, y: 10 }, control2: { x: 20, y: 0 }, point2: { x: 30, y: 0 }, control3: { x: 40, y: 0 }, point3: { x: 50, y: 0 }, control4: { x: 60, y: 0 }, point4: { x: 70, y: 0 }, control5: { x: 80, y: 0 }, point5: { x: 90, y: 0 }, control6: { x: 100, y: 0 }, point6: { x: 110, y: 0 }, control7: { x: 120, y: 0 }, point7: { x: 130, y: 0 } }; function mapDataRange(value) { // stackoverflow.com/a/929107/5707008 // return (((OldValue - OldMin) * (NewMax - NewMin)) / (OldMax - OldMin)) + NewMin return (value - 0) * (svgViewBoxGraphMax - svgViewBoxGraphMin) / (svgViewBoxHeight - 0) + svgViewBoxGraphMin; } function updateSlider($element) { if ($element) { var rangeIndex = $element.getAttribute('data-slider-index'), range = ranges[rangeIndex], value = $element.value; if (range === value) { return; // No value change, no need to update then } // Update state ranges[rangeIndex] = value; var parent = $element.parentElement, $thumb = parent.querySelector('.range-slider__thumb'), $bar = parent.querySelector('.range-slider__bar'), pct = value * ((sliderHeight - sliderThumbSize) / sliderHeight); $thumb.style.bottom = pct + '%'; $bar.style.height = 'calc(' + pct + '% + ' + sliderThumbSize / 2 + 'px)'; //$thumb.textContent = `${value}%`; renderSliderGraph(); } } function updatePoints() { // Convert from percentage to coordinate values // Calculate and floor the values points.point1.y = svgViewBoxHeight - svgViewBoxHeight * ranges.range1 / 100 | 0; points.point2.y = svgViewBoxHeight - svgViewBoxHeight * ranges.range2 / 100 | 0; points.point3.y = svgViewBoxHeight - svgViewBoxHeight * ranges.range3 / 100 | 0; points.point4.y = svgViewBoxHeight - svgViewBoxHeight * ranges.range4 / 100 | 0; points.point5.y = svgViewBoxHeight - svgViewBoxHeight * ranges.range5 / 100 | 0; points.point6.y = svgViewBoxHeight - svgViewBoxHeight * ranges.range6 / 100 | 0; points.point7.y = svgViewBoxHeight - svgViewBoxHeight * ranges.range7 / 100 | 0; var max = svgViewBoxGraphMax; var min = svgViewBoxGraphMin; points.point1.y = mapDataRange(points.point1.y); points.point2.y = mapDataRange(points.point2.y); points.point3.y = mapDataRange(points.point3.y); points.point4.y = mapDataRange(points.point4.y); points.point5.y = mapDataRange(points.point5.y); points.point6.y = mapDataRange(points.point6.y); points.point7.y = mapDataRange(points.point7.y); // Update Y for the other points points.begin.y = points.point1.y; points.control1.y = points.point1.y; points.control2.y = points.point2.y; points.control3.y = points.point3.y; points.control4.y = points.point4.y; points.control5.y = points.point5.y; points.control6.y = points.point6.y; points.control7.y = points.point7.y; } function getInterpolatedLine(type) { var shadowOffset = 0; if (type === 'shadow') { shadowOffset = 10; // simple simulation, no fancy shadow algorithm } return 'M {0},{1} L {2},{3} C {4},{5} {6},{7} {8},{9} S {10} {11}, {12} {13} S {14} {15}, {16} {17} S {18} {19}, {20} {21} S {22} {23}, {24} {25} S {26} {27}, {28} {29}'.format( // M points.begin.x, points.begin.y, // L points.point1.x, points.point1.y, // C points.control1.x, points.control1.y, points.control2.x, points.control2.y + shadowOffset, points.point2.x, points.point2.y + shadowOffset, // S points.control3.x, points.control3.y, points.point3.x, points.point3.y, // S points.control4.x, points.control4.y + shadowOffset, points.point4.x, points.point4.y + shadowOffset, // S points.control5.x, points.control5.y, points.point5.x, points.point5.y, // S points.control6.x, points.control6.y + shadowOffset, points.point6.x, points.point6.y + shadowOffset, // S points.control7.x, points.control7.y, points.point7.x, points.point7.y); } function reset() { var inputs = app.inputs; inputs.forEach(function (input) { return input.value = 50; }); inputs.forEach(function (input) { return app.updateSlider(input); }); } function renderSliderGraph() { updatePoints(); $svgLine.setAttribute('d', getInterpolatedLine()); $svgLineShadow.setAttribute('d', getInterpolatedLine('shadow')); } function selectPreset(type) { // Generate random graph var inputs = app.inputs; inputs.forEach(function (input) { return input.value = Math.random() * 100 | 0; }); inputs.forEach(function (input) { return app.updateSlider(input); }); } return { inputs: [].slice.call(document.querySelectorAll('.sliders input')), updateSlider: updateSlider, reset: reset, selectPreset: selectPreset }; }(); (function initAndSetupTheSliders() { var inputs = app.inputs; var index = 1; inputs.forEach(function (input) { return input.setAttribute('data-slider-index', 'range' + index++); }); inputs.forEach(function (input) { return input.value = 50; }); inputs.forEach(function (input) { return app.updateSlider(input); }); // Cross-browser support where value changes instantly as you drag the handle, therefore two event types. inputs.forEach(function (input) { return input.addEventListener('input', function (element) { return app.updateSlider(input); }); }); inputs.forEach(function (input) { return input.addEventListener('change', function (element) { return app.updateSlider(input); }); }); app.selectPreset('custom'); })(); //# sourceURL=pen.js </script> </body></html>

Related: See More


Questions / Comments: