Bouncy Icon Select Menu
How do I make an bouncy icon select menu?
Icon selection menus that has a bouncy transition. The buttons are skin-able using an easy to use SASS mixin.. What is a bouncy icon select menu? How do you make a bouncy icon select menu? This script and codes were developed by Yogev Ahuvia on 11 September 2022, Sunday.
Bouncy Icon Select Menu - Script Codes HTML Codes
<!DOCTYPE html>
<html >
<head> <meta charset="UTF-8"> <title>Bouncy Icon Select Menu</title> <link href='https://fonts.googleapis.com/css?family=Droid+Sans:400,700' rel='stylesheet' type='text/css'>
<link href="//netdna.bootstrapcdn.com/font-awesome/3.1.1/css/font-awesome.css" rel="stylesheet"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"> <style> /* NOTE: The styles were added inline because Prefixfree needs access to your styles and they must be inlined if they are on local disk! */ .stack { position: relative; display: inline-block; margin: 0 15px; width: 70px; height: 70px;
}
.stack > .stack-item, .stack > .stack-icon { position: absolute; top: 0; left: 0; width: 100%; height: 100%; border-radius: 100%; cursor: pointer; font-size: 20px; line-height: 70px;
}
.stack > .stack-icon { box-shadow: 0px 1px 5px 0px rgba(0, 0, 0, 0.5), inset 0px 1px 2px 0px rgba(255, 255, 255, 0.75); z-index: 10; transition: all 100ms;
}
.stack > .stack-item.selected { z-index: 100;
}
.stack:not(.open) > .stack-item { transform: translateY(0px) translateX(0px) !important;
}
.stack:not(.open) > .stack-item.selected { width: 40px; height: 40px; margin-left: 15px; margin-top: 15px; line-height: 40px;
}
.stack.open > .stack-icon, .stack:hover > .stack-icon { width: 100px; height: 100px; margin-left: -15px; margin-top: -15px; line-height: 100px;
}
.stack.open > .stack-item, .stack:hover > .stack-item { box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.3), inset 0px 1px 2px 0px white;
}
.stack.open > .stack-item:hover:after, .stack:hover > .stack-item:hover:after { content: attr(data-title); display: inline-block; position: absolute; background: rgba(0, 0, 0, 0.3); height: 24px; font-size: 16px; line-height: 24px; text-align: left; top: 50%; left: 100%; margin-top: -12px; margin-left: 10px; padding: 0 5px; border-radius: 5px;
}
.stack.skin-1 > .stack-icon { background: #FE4365; color: #ddd; text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.5);
}
.stack.skin-1 > .stack-item { color: #FE4365;
}
.stack.skin-1:not(.open) > .stack-item { background-color: #fdcdcc;
}
.stack.skin-1.open > .stack-item, .stack.skin-1:hover > .stack-item { background-color: #FC9D9A;
}
.stack.skin-1.open > .stack-item.selected, .stack.skin-1:hover > .stack-item.selected { color: #ddd; background-color: #FE4365; text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.5);
}
.stack.skin-2 > .stack-icon { background: #008C9E; color: #ddd; text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.5);
}
.stack.skin-2 > .stack-item { color: #008C9E;
}
.stack.skin-2:not(.open) > .stack-item { background-color: #30e7ff;
}
.stack.skin-2.open > .stack-item, .stack.skin-2:hover > .stack-item { background-color: #00DFFC;
}
.stack.skin-2.open > .stack-item.selected, .stack.skin-2:hover > .stack-item.selected { color: #ddd; background-color: #008C9E; text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.5);
}
.stack.skin-3 > .stack-icon { background: #8FBE00; color: #ddd; text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.5);
}
.stack.skin-3 > .stack-item { color: #8FBE00;
}
.stack.skin-3:not(.open) > .stack-item { background-color: #d3ed96;
}
.stack.skin-3.open > .stack-item, .stack.skin-3:hover > .stack-item { background-color: #C1E66A;
}
.stack.skin-3.open > .stack-item.selected, .stack.skin-3:hover > .stack-item.selected { color: #ddd; background-color: #8FBE00; text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.5);
}
.container { position: absolute; width: 100%; top: 75px; text-align: center;
}
body { background-color: #444444; *zoom: 1; filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#FF444444', endColorstr='#FF444444'); background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzQ0NDQ0NCIvPjxzdG9wIG9mZnNldD0iNTAlIiBzdG9wLWNvbG9yPSIjNjQ2NDk2Ii8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjNDQ0NDQ0Ii8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g'); background-size: 100%; background-image: -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #444444), color-stop(50%, #646496), color-stop(100%, #444444)); background-image: -moz-linear-gradient(left, #444444 0%, #646496 50%, #444444 100%); background-image: -webkit-linear-gradient(left, #444444 0%, #646496 50%, #444444 100%); background-image: linear-gradient(to right, #444444 0%, #646496 50%, #444444 100%); font-family: 'Droid Sans', sans-serif; overflow-y: scroll; padding-top: 1px;
} </style> <script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script>
</head>
<body> <div class="container"> <ul class="stack skin-1"> <li class="stack-icon"> <i class="icon-plus"></i> </li> <li class="stack-item" data-title="Camera"> <i class="icon-camera"></i> </li> <li class="stack-item" data-title="Phone"> <i class="icon-phone"></i> </li> <li class="stack-item" data-title="Music"> <i class="icon-music"></i> </li> </ul> <ul class="stack skin-2"> <li class="stack-icon"> <i class="icon-plus"></i> </li> <li class="stack-item" data-title="Poor"> <i class="icon-star-empty"></i> </li> <li class="stack-item" data-title="Moderate"> <i class="icon-star-half-full"></i> </li> <li class="stack-item" data-title="Great"> <i class="icon-star"></i> </li> </ul> <ul class="stack skin-3"> <li class="stack-icon"> <i class="icon-plus"></i> </li> <li class="stack-item" data-title="Map"> <i class="icon-map-marker"></i> </li> <li class="stack-item" data-title="Cloud"> <i class="icon-cloud"></i> </li> <li class="stack-item" data-title="Calendar"> <i class="icon-calendar"></i> </li> </ul>
</div> <script src='http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script> <script src="js/index.js"></script>
</body>
</html>
Bouncy Icon Select Menu - Script Codes CSS Codes
.stack { position: relative; display: inline-block; margin: 0 15px; width: 70px; height: 70px;
}
.stack > .stack-item, .stack > .stack-icon { position: absolute; top: 0; left: 0; width: 100%; height: 100%; border-radius: 100%; cursor: pointer; font-size: 20px; line-height: 70px;
}
.stack > .stack-icon { box-shadow: 0px 1px 5px 0px rgba(0, 0, 0, 0.5), inset 0px 1px 2px 0px rgba(255, 255, 255, 0.75); z-index: 10; transition: all 100ms;
}
.stack > .stack-item.selected { z-index: 100;
}
.stack:not(.open) > .stack-item { transform: translateY(0px) translateX(0px) !important;
}
.stack:not(.open) > .stack-item.selected { width: 40px; height: 40px; margin-left: 15px; margin-top: 15px; line-height: 40px;
}
.stack.open > .stack-icon, .stack:hover > .stack-icon { width: 100px; height: 100px; margin-left: -15px; margin-top: -15px; line-height: 100px;
}
.stack.open > .stack-item, .stack:hover > .stack-item { box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.3), inset 0px 1px 2px 0px white;
}
.stack.open > .stack-item:hover:after, .stack:hover > .stack-item:hover:after { content: attr(data-title); display: inline-block; position: absolute; background: rgba(0, 0, 0, 0.3); height: 24px; font-size: 16px; line-height: 24px; text-align: left; top: 50%; left: 100%; margin-top: -12px; margin-left: 10px; padding: 0 5px; border-radius: 5px;
}
.stack.skin-1 > .stack-icon { background: #FE4365; color: #ddd; text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.5);
}
.stack.skin-1 > .stack-item { color: #FE4365;
}
.stack.skin-1:not(.open) > .stack-item { background-color: #fdcdcc;
}
.stack.skin-1.open > .stack-item, .stack.skin-1:hover > .stack-item { background-color: #FC9D9A;
}
.stack.skin-1.open > .stack-item.selected, .stack.skin-1:hover > .stack-item.selected { color: #ddd; background-color: #FE4365; text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.5);
}
.stack.skin-2 > .stack-icon { background: #008C9E; color: #ddd; text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.5);
}
.stack.skin-2 > .stack-item { color: #008C9E;
}
.stack.skin-2:not(.open) > .stack-item { background-color: #30e7ff;
}
.stack.skin-2.open > .stack-item, .stack.skin-2:hover > .stack-item { background-color: #00DFFC;
}
.stack.skin-2.open > .stack-item.selected, .stack.skin-2:hover > .stack-item.selected { color: #ddd; background-color: #008C9E; text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.5);
}
.stack.skin-3 > .stack-icon { background: #8FBE00; color: #ddd; text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.5);
}
.stack.skin-3 > .stack-item { color: #8FBE00;
}
.stack.skin-3:not(.open) > .stack-item { background-color: #d3ed96;
}
.stack.skin-3.open > .stack-item, .stack.skin-3:hover > .stack-item { background-color: #C1E66A;
}
.stack.skin-3.open > .stack-item.selected, .stack.skin-3:hover > .stack-item.selected { color: #ddd; background-color: #8FBE00; text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.5);
}
.container { position: absolute; width: 100%; top: 75px; text-align: center;
}
body { background-color: #444444; *zoom: 1; filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#FF444444', endColorstr='#FF444444'); background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzQ0NDQ0NCIvPjxzdG9wIG9mZnNldD0iNTAlIiBzdG9wLWNvbG9yPSIjNjQ2NDk2Ii8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjNDQ0NDQ0Ii8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g'); background-size: 100%; background-image: -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #444444), color-stop(50%, #646496), color-stop(100%, #444444)); background-image: -moz-linear-gradient(left, #444444 0%, #646496 50%, #444444 100%); background-image: -webkit-linear-gradient(left, #444444 0%, #646496 50%, #444444 100%); background-image: linear-gradient(to right, #444444 0%, #646496 50%, #444444 100%); font-family: 'Droid Sans', sans-serif; overflow-y: scroll; padding-top: 1px;
}
Bouncy Icon Select Menu - Script Codes JS Codes
// itemSize and magnification should match
// corresponding variables in SASS
var itemSize = 70;
var itemPadding = 5;
var magnification = 30;
var transitionSpeed = 200;
/* Bouncy Icon Select Menu © Yogev Ahuvia * ======================================= * Icon selection menus that has a bouncy * transition. The buttons are skinnable * using an easy to use SASS mixin. */
var stacks = [];
var stackItems = [];
$(document).ready(function() { // iterate through all stacks stacks = $('.stack'); for (var i = 0; i < stacks.length; i++) { var $stack = $(stacks[i]); // set .open on hover (timer to prevent premature close) $stack.hover(function() { clearTimeout($(this).data('timer')); $(this).addClass('open'); }, function() { var $elem = $(this); var timer = setTimeout(function(){ $elem.removeClass('open'); }, 200); $elem.data('timer', timer); }); // iterate through all stack-items in each stack stackItems[i] = $stack.find('.stack-item'); for (var j = 0; j < stackItems[i].length; j++) { var item = stackItems[i][j]; // handle stack-item selection $(item).on('click', function() { var $this = $(this); if ($this.hasClass('selected')) { // toggle off pre-selected item $this.removeClass('selected'); } else { // toggle off all items in stack var siblings = $this.parent().find('.stack-item'); for (var k = 0; k < siblings.length; k++) { $(siblings[k]).removeClass('selected'); } // toggle on selected item $this.addClass('selected'); } }); // prepare item transformation params var duration = ((j+1) * transitionSpeed) + (j*50); var translate = (magnification/2) + (j+1) * (itemSize + itemPadding); // prepare trasform and translate strings var transform = duration + 'ms cubic-bezier(.40,1,.72,1.85), background-color 500ms'; var translate = 'translateY('+translate+'px)'; // implement transition and transform on stack-item $(item).css('transition', '-webkit-transform '+transform); $(item).css('transition', '-moz-transform '+transform); $(item).css('transition', '-ms-transform '+transform); $(item).css('transition', '-o-transform '+transform); $(item).css('transition', 'transform '+transform); $(item).css('transform', translate); } }
});
Developer | Yogev Ahuvia |
Username | kindofone |
Uploaded | September 11, 2022 |
Rating | 4 |
Size | 6,673 Kb |
Views | 24,288 |
Find the perfect freelance services for your business! Fiverr's mission is to change how the world works together. Fiverr connects businesses with freelancers offering digital services in 500+ categories. Find Developer!
Name | Size |
Real-Time Love Meter | 5,493 Kb |
Subtle Buttons | 4,010 Kb |
CSS Only In-Place Translation | 3,336 Kb |
Ball Bouncing On Text | 5,553 Kb |
Humble Progress | 2,766 Kb |
Tears Of Happiness | 3,667 Kb |
Reactive CSS Transitions | 4,405 Kb |
Thumbnail Animation Effects | 10,393 Kb |
Living Interfaces - Talk | 7,280 Kb |
CSS Filter Glass | 7,188 Kb |
Jasper is the AI Content Generator that helps you and your team break through creative blocks to create amazing, original content 10X faster. Discover all the ways the Jasper AI Content Platform can help streamline your creative workflows. Start For Free!
Name | Username | Size |
Fellowship of the Ring | Aussieyang | 2,639 Kb |
Spin | Elalemanyo | 8,262 Kb |
A Pen by Brendan Skousen | Bskousen | 2,954 Kb |
A Pen by Jason Kinney | Jason-kinney | 1,980 Kb |
Twitch.tv API | Ryzokuken | 2,618 Kb |
Airbnb Homepage | SindhujaD | 2,480 Kb |
Another brick in the wall | Fivera | 1,955 Kb |
Clock with full screen background | Owebboy | 2,415 Kb |
Intake Form Page 2 | Ijantje | 4,983 Kb |
Pomodoro Clock | Osycon | 3,705 Kb |
Surf anonymously, prevent hackers from acquiring your IP address, send anonymous email, and encrypt your Internet connection. High speed, ultra secure, and easy to use. Instant setup. Hide Your IP Now!