Based on a Dribbble shot that caught my eye http://drbl.in/pWyx
A Pen by Manar Kamel on CodePen.
<!-- Menu App Interface | |
<!-- Based on a Dribbble shot | |
<!-- that caught my eye | |
<!-- http://drbl.in/pWyx | |
<!-- ---------------------------------- --> | |
<div class="paper preview-1"> | |
<div class="box"> | |
<div class="bar"> | |
<div class="menu"> | |
<span></span> | |
<span></span> | |
<span></span> | |
</div> | |
<p>Menu</p> | |
<span><span class="items-total">0</span> Items</span> | |
<div class="action">Done</div> | |
</div> | |
<div class="item coffee"> | |
<div class="box"> | |
<div class="item-icon coffee"></div> | |
<p>Coffee</p> | |
<div class="detail"> | |
<div> | |
<p>Espresso</p> | |
<div class="counter"> | |
<span class="number">0</span> | |
<div class="plus">+</div> | |
<div class="minus">-</div> | |
</div> | |
</div> | |
<div> | |
<p>Cappuccino</p> | |
<div class="counter"> | |
<span class="number">0</span> | |
<div class="plus">+</div> | |
<div class="minus">-</div> | |
</div> | |
</div> | |
<div> | |
<p>Lato</p> | |
<div class="counter"> | |
<span class="number">0</span> | |
<div class="plus">+</div> | |
<div class="minus">-</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
<div class="item sweet"> | |
<div class="box"> | |
<div class="item-icon sweet"></div> | |
<p>Sweet</p> | |
<div class="detail"> | |
<div> | |
<p>Baklava</p> | |
<div class="counter"> | |
<span class="number">0</span> | |
<div class="plus">+</div> | |
<div class="minus">-</div> | |
</div> | |
</div> | |
<div> | |
<p>Kunafeh Nabulsia</p> | |
<div class="counter"> | |
<span class="number">0</span> | |
<div class="plus">+</div> | |
<div class="minus">-</div> | |
</div> | |
</div> | |
<div> | |
<p>Basbousa</p> | |
<div class="counter"> | |
<span class="number">0</span> | |
<div class="plus">+</div> | |
<div class="minus">-</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
<div class="item food"> | |
<div class="box"> | |
<div class="item-icon food"></div> | |
<p>Food</p> | |
<div class="detail"> | |
<div> | |
<p>Shawarma</p> | |
<div class="counter"> | |
<span class="number">0</span> | |
<div class="plus">+</div> | |
<div class="minus">-</div> | |
</div> | |
</div> | |
<div> | |
<p>Foul Mudammes</p> | |
<div class="counter"> | |
<span class="number">0</span> | |
<div class="plus">+</div> | |
<div class="minus">-</div> | |
</div> | |
</div> | |
<div> | |
<p>Falafel</p> | |
<div class="counter"> | |
<span class="number">0</span> | |
<div class="plus">+</div> | |
<div class="minus">-</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
<div class="item drink"> | |
<div class="box"> | |
<div class="item-icon drink"></div> | |
<p>Drink</p> | |
<div class="detail"> | |
<div> | |
<p>Tamer Hindi</p> | |
<div class="counter"> | |
<span class="number">0</span> | |
<div class="plus">+</div> | |
<div class="minus">-</div> | |
</div> | |
</div> | |
<div> | |
<p>Jalab</p> | |
<div class="counter"> | |
<span class="number">0</span> | |
<div class="plus">+</div> | |
<div class="minus">-</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
<div class="paper preview-2 item-active"> | |
<div class="box"> | |
<div class="bar"> | |
<div class="menu"> | |
<span></span> | |
<span></span> | |
<span></span> | |
</div> | |
<p>Menu</p> | |
<span><span class="items-total">2</span> Items</span> | |
<div class="action">Done</div> | |
</div> | |
<div class="item coffee active"> | |
<div class="box"> | |
<div class="item-icon coffee"></div> | |
<p>Coffee</p> | |
<div class="detail"> | |
<div> | |
<p>Espresso</p> | |
<div class="counter"> | |
<span class="number" style="display:inline">2</span> | |
<div class="plus">+</div> | |
<div class="minus">-</div> | |
</div> | |
</div> | |
<div> | |
<p>Cappuccino</p> | |
<div class="counter"> | |
<span class="number">0</span> | |
<div class="plus">+</div> | |
<div class="minus">-</div> | |
</div> | |
</div> | |
<div> | |
<p>Lato</p> | |
<div class="counter"> | |
<span class="number">0</span> | |
<div class="plus">+</div> | |
<div class="minus">-</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
<div class="item sweet"> | |
<div class="box"> | |
<div class="item-icon sweet"></div> | |
<p>Sweet</p> | |
<div class="detail"> | |
<div> | |
<p>Baklava</p> | |
<div class="counter"> | |
<span class="number">0</span> | |
<div class="plus">+</div> | |
<div class="minus">-</div> | |
</div> | |
</div> | |
<div> | |
<p>Kunafeh Nabulsia</p> | |
<div class="counter"> | |
<span class="number">0</span> | |
<div class="plus">+</div> | |
<div class="minus">-</div> | |
</div> | |
</div> | |
<div> | |
<p>Basbousa</p> | |
<div class="counter"> | |
<span class="number">0</span> | |
<div class="plus">+</div> | |
<div class="minus">-</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
<div class="item food"> | |
<div class="box"> | |
<div class="item-icon food"></div> | |
<p>Food</p> | |
<div class="detail"> | |
<div> | |
<p>Shawarma</p> | |
<div class="counter"> | |
<span class="number">0</span> | |
<div class="plus">+</div> | |
<div class="minus">-</div> | |
</div> | |
</div> | |
<div> | |
<p>Foul Mudammes</p> | |
<div class="counter"> | |
<span class="number">0</span> | |
<div class="plus">+</div> | |
<div class="minus">-</div> | |
</div> | |
</div> | |
<div> | |
<p>Falafel</p> | |
<div class="counter"> | |
<span class="number">0</span> | |
<div class="plus">+</div> | |
<div class="minus">-</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
<div class="item drink"> | |
<div class="box"> | |
<div class="item-icon drink"></div> | |
<p>Drink</p> | |
<div class="detail"> | |
<div> | |
<p>Tamer Hindi</p> | |
<div class="counter"> | |
<span class="number">0</span> | |
<div class="plus">+</div> | |
<div class="minus">-</div> | |
</div> | |
</div> | |
<div> | |
<p>Jalab</p> | |
<div class="counter"> | |
<span class="number">0</span> | |
<div class="plus">+</div> | |
<div class="minus">-</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> |
// Items Magic [Preview-1] | |
$('.paper.preview-1 .item').click(function () { | |
$('.paper.preview-1 .item').not(this).removeClass('active'); | |
$(this).toggleClass('active'); | |
if ($('.paper.preview-1 .item').hasClass('active')) { | |
$('.paper.preview-1').addClass('item-active'); | |
} else { | |
$('.paper.preview-1').removeClass('item-active') | |
}; | |
}); | |
// Preventing Closing when Click inside counter | |
$('.minus,.plus').click(function (a) { | |
a.stopPropagation(); | |
}); | |
// Adding Counter [Preview-1] | |
$('.paper.preview-1 .plus').click(function () { | |
$(this).parent().find('.number').html(function (y, val) { | |
return val * 1 + 1 | |
}); | |
}); | |
$('.paper.preview-1 .minus').click(function () { | |
var increased = parseInt($(this).parent().find('.number').text()); | |
if (isNaN(increased) || increased > 0) { | |
$(this).parent().find('.number').html(function (t, val) { | |
return val * 1 - 1 | |
}); | |
} else { | |
return false; | |
} | |
}); | |
$('.paper.preview-1 .plus, .paper.preview-1 .minus').click(function () { | |
var increased = parseInt($(this).parent().find('.number').text()); | |
var itemsTotal = 0; | |
$('.paper.preview-1 .number').each(function () { | |
itemsTotal += ($(this).html() * 1); | |
}); | |
$('.paper.preview-1 .items-total').html(itemsTotal); | |
var itemsTotalAll = parseInt($('.paper.preview-1 .items-total').text()); | |
if (isNaN(itemsTotalAll) || itemsTotalAll <= 0) { | |
$('.paper.preview-1 .action').hide(); | |
} else { | |
$('.paper.preview-1 .action').show(); | |
} | |
if (isNaN(increased) || increased <= 0) { | |
$(this).parent().find('.number').hide(); | |
} else { | |
$(this).parent().find('.number').show(); | |
} | |
}); | |
// JavaScript code is done | |
// the rest are just repeating | |
// for Paper Preview-2 functionality | |
// Items Magic [Preview-2] | |
$('.paper.preview-2 .item').click(function () { | |
$('.paper.preview-2 .item').not(this).removeClass('active'); | |
$(this).toggleClass('active'); | |
if ($('.paper.preview-2 .item').hasClass('active')) { | |
$('.paper.preview-2').addClass('item-active'); | |
} else { | |
$('.paper.preview-2').removeClass('item-active') | |
}; | |
}); | |
// Adding Counter [Preview-2] | |
$('.paper.preview-2 .plus').click(function () { | |
$(this).parent().find('.number').html(function (p, val) { | |
return val * 1 + 1 | |
}); | |
}); | |
$('.paper.preview-2 .minus').click(function () { | |
var increased = parseInt($(this).parent().find('.number').text()); | |
if (isNaN(increased) || increased > 0) { | |
$(this).parent().find('.number').html(function (k, val) { | |
return val * 1 - 1 | |
}); | |
} else { | |
} | |
}); | |
$('.paper.preview-2 .plus, .paper.preview-2 .minus').click(function () { | |
var increased = parseInt($(this).parent().find('.number').text()); | |
var itemsTotal = 0; | |
$('.paper.preview-2 .number').each(function () { | |
itemsTotal += ($(this).html() * 1); | |
}); | |
$('.paper.preview-2 .items-total').html(itemsTotal); | |
var itemsTotalAll = parseInt($('.paper.preview-2 .items-total').text()); | |
if (isNaN(itemsTotalAll) || itemsTotalAll <= 0) { | |
$('.paper.preview-2 .action').hide(); | |
} else { | |
$('.paper.preview-2 .action').show(); | |
} | |
if (isNaN(increased) || increased <= 0) { | |
$(this).parent().find('.number').hide(); | |
} else { | |
$(this).parent().find('.number').show(); | |
} | |
}); |
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> |
/* I'm using Ubuntu Condensed font | |
/* instead of the original shot font, | |
/* I think Ubuntu font is a better fit, | |
/* What do you think? | |
/* **************************** */ | |
* {box-sizing:border-box} | |
html,body {height:100%} | |
body { | |
background: #d3e2d4; | |
background: linear-gradient(135deg, #d3e2d4,#819083) top left fixed; | |
font: 14px 'Ubuntu Condensed', sans-serif; | |
line-height:1; | |
min-height:580px; | |
-webkit-font-smoothing: antialiased; | |
} | |
.paper { | |
width:280px; | |
height:480px; | |
border-radius:4px; | |
box-shadow: 0 5px 25px rgba(0,0,0,.15); | |
position:absolute; | |
top:50px; | |
right:50% | |
} | |
.box {width:100%;height:100%;overflow:hidden;border-radius:4px} | |
.bar { | |
height:80px; | |
background: #f7ffce; | |
background:linear-gradient(135deg,#f7ffce,#e2e4b8); | |
border-radius:4px 4px 0 0; | |
color:#af9a50; | |
padding:20px; | |
box-shadow: 0 2px 5px rgba(0,0,0,.3); | |
position:relative; | |
z-index:5 | |
} | |
.menu {float:left;width:12px} | |
.menu span { | |
height:1px; | |
background:#af9a50; | |
display:block; | |
margin-bottom:3px; | |
} | |
.bar p { | |
float:left; | |
margin-left:10px; | |
margin-top:-3px; | |
} | |
.bar .action { | |
float:right; | |
margin-top:-13px | |
} | |
.bar>span { | |
float:left; | |
width:100%; | |
margin-top:22px | |
} | |
.item { | |
height:100px; | |
padding:20px; | |
box-shadow: 0 4px 5px rgba(0,0,0,.3); | |
position:relative; | |
font-size:21px; | |
-webkit-transition:all 200ms ease; | |
transition:all 200ms ease; | |
} | |
.item>.box>p { | |
line-height:60px; | |
-webkit-transition:all 200ms ease; | |
transition:all 200ms ease; | |
} | |
.detail { | |
font-size:17px; | |
-webkit-transition:all 200ms ease; | |
transition:all 200ms ease; | |
opacity:0 | |
} | |
.detail div {line-height:35px} | |
.detail .counter,.detail p {float:left;width:50%} | |
.detail>div {float:left;width:100%} | |
.detail .counter {text-align:right} | |
.detail .counter div { | |
width:29px; | |
height:20px; | |
float:right; | |
text-align:center; | |
line-height:20px; | |
margin-top:7px; | |
cursor: pointer | |
} | |
.detail .counter .plus { | |
margin-left:1px; | |
border-radius:0 30px 30px 0; | |
} | |
.detail .counter .minus { | |
margin-right:1px; | |
margin-left:11px; | |
border-radius:30px 0 0 30px; | |
} | |
.item.coffee { | |
background: #ffe26f; | |
background:linear-gradient(135deg,#ffe26f,#e8c962); | |
z-index:4; | |
color:#e07556; | |
} | |
.item.coffee .detail .counter div {background: #FFF2BE} | |
.item.sweet { | |
background: #f3825f; | |
background:linear-gradient(135deg,#f3825f,#f3825f); | |
z-index:3; | |
color:#9c3c53; | |
} | |
.item.sweet .detail .counter div {background: #FFC5B2} | |
.item.food { | |
background: #a7425c; | |
background:linear-gradient(135deg,#a7425c,#993950); | |
z-index:2; | |
color:#402344; | |
} | |
.item.food .detail .counter div {background: #ECA9BA} | |
.item.drink { | |
background: #563761; | |
background:linear-gradient(135deg,#563761,#502f55); | |
z-index:1; | |
color:#1c1730; | |
border-radius:0 0 4px 4px | |
} | |
.item.drink .detail .counter div {background: #8A7193} | |
.item-icon { background:url(https://5daff37b9095076ff2c103b12ce1734d19bc7fd6.googledrive.com/host/0B4GtvQ-eEGw_bGZQVkt2SEdSdlU/Codepen/Menu%20App%20Interface/items-icons-t.png) no-repeat top left; | |
height:60px; | |
width:65px; | |
float:left; | |
margin-right:10px; | |
-webkit-transition:all 200ms ease; | |
transition:all 200ms ease; | |
-webkit-transform: translateZ(0);-moz-transform: translateZ(0);-ms-transform: translateZ(0);transform: translateZ(0); | |
} | |
.item-icon.coffee {background-position:0 0} | |
.item-icon.sweet {background-position:-70px 0} | |
.item-icon.food {background-position:-137px 0} | |
.item-icon.drink {background-position:-208px 0} | |
/** Active **/ | |
.paper.item-active .item {height:60px;padding:0 20px} | |
.paper.item-active .item.active {height:260px;padding:20px;-webkit-transform: translateZ(0);-moz-transform: translateZ(0);-ms-transform: translateZ(0);transform: translateZ(0);} | |
.item.active .item-icon { | |
-webkit-transform:scale(1.5) translateZ(0); | |
-ms-transform:scale(1.5) translateZ(0); | |
-moz-transform:scale(1.5) translateZ(0); | |
transform:scale(1.5) translateZ(0); | |
margin:0 auto; | |
float:none; | |
} | |
.item.active>.box>p { | |
font-size:31px; | |
text-align:center | |
} | |
.item.active .detail {opacity:1} | |
/** Extra For Previewing **/ | |
.item .number,.paper.preview-1 .bar .action { | |
display:none | |
} | |
.paper.preview-1 { | |
margin-right:20px; | |
} | |
.paper.preview-2 { | |
margin-right:-300px; | |
} | |
/** making some things unselectable **/ | |
.item>.box>p,.counter { | |
-moz-user-select: -moz-none; | |
-khtml-user-select: none; | |
-webkit-user-select: none; | |
-o-user-select: none; | |
user-select: none; | |
} | |
.item>.box>p { | |
cursor: default | |
} | |
<link href="//fonts.googleapis.com/css?family=Ubuntu+Condensed" rel="stylesheet" /> |