Playing around with a mobile nav and search idea. My JS/jQuery isn't the best so comments/tips welcome.
A Pen by Ally Baird on CodePen.
<div class="wrapper"> | |
<div class="container"> | |
<!-- search bar section --> | |
<form class="searchbox" name="search"> | |
<input type="text" placeholder="What are you looking for?" required> | |
<input type="button" value="Go"> | |
</form> | |
<header role="banner"> | |
<div class="search"> | |
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="30px" height="30px" viewBox="0 0 30 30" enable-background="new 0 0 30 30" xml:space="preserve"> | |
<path class="search" fill="#ffffff" d="M19.787,12.749c0-4.209-3.412-7.584-7.584-7.584c-4.21,0-7.584,3.411-7.584,7.584 | |
c0,4.209,3.411,7.585,7.584,7.585C16.375,20.37,19.787,16.958,19.787,12.749z M25.412,25.342l-0.653,0.653L17.864,19.1 | |
c-1.524,1.344-3.484,2.177-5.698,2.177c-4.717,0-8.527-3.81-8.527-8.527c0-4.717,3.811-8.527,8.527-8.527 | |
c4.719,0,8.527,3.811,8.527,8.527c0,2.178-0.833,4.174-2.177,5.698L25.412,25.342z"/> | |
</svg> | |
</div><!-- /.search --> | |
<div class="searchclose"> | |
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="30px" height="30px" viewBox="0 0 30 30" enable-background="new 0 0 30 30" xml:space="preserve"> | |
<line <line class="grey" fill="none" stroke="#ffffff" stroke-width="1" stroke-miterlimit="10" x1="7.167" y1="7.25" x2="22.209" y2="22.291"/> | |
<line <line class="grey" fill="none" stroke="#ffffff" stroke-width="1" stroke-miterlimit="10" x1="22.209" y1="7.25" x2="7.167" y2="22.291"/> | |
</svg> | |
</div> | |
<h1 class="logo"> | |
Logo | |
</h1> | |
<nav role="navigation" class="burgerbox"> | |
<div class="hamburger"> | |
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="30px" height="30px" viewBox="0 0 30 30" enable-background="new 0 0 30 30" xml:space="preserve"> | |
<polyline class="grey" fill="#ffffff" points="2.875,6.302 26.938,6.302 26.938,5.5 2.875,5.5 "/> | |
<polyline class="grey" fill="#ffffff" points="2.875,15.276 26.938,15.276 26.938,14.474 2.875,14.474 "/> | |
<polyline class="grey" fill="#ffffff" points="2.875,24.25 26.938,24.25 26.938,23.447 2.875,23.447 "/> | |
</svg> | |
</div> | |
<div class="close"> | |
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="30px" height="30px" viewBox="0 0 30 30" enable-background="new 0 0 30 30" xml:space="preserve"> | |
<line class="grey" fill="none" stroke="#ffffff" stroke-width="1" stroke-miterlimit="10" x1="7.167" y1="7.25" x2="22.209" y2="22.291"/> | |
<line class="grey" fill="none" stroke="#ffffff" stroke-width="1" stroke-miterlimit="10" x1="22.209" y1="7.25" x2="7.167" y2="22.291"/> | |
</svg> | |
</div> | |
</nav> | |
</header> | |
<!-- hamburger dropdown section --> | |
<nav role="navigation" class="menu"> | |
<ul> | |
<a href="" title=""><li class="option">Option One</li></a> | |
<a href="" title=""><li class="option">Option Two</li></a> | |
<a href="" title=""><li class="option">Option Three</li></a> | |
<a href="" title=""><li class="option">Option Four</li></a> | |
<a href="" title=""><li class="option border-bottom" style="margin-bottom: 40px;">Option Five</li></a> | |
<li class="contact" style="overflow: hidden;"> | |
<a href="" title=""><div class="contact__one" style="float: left;"> | |
Contact 1 | |
</div></a> | |
<div class="contact__two" style="float: right;"> | |
Contact 2 | |
</div> | |
</li></a> | |
</ul> | |
</nav> | |
<section class="hero"> | |
<a class="cta" href="">Action</a> | |
</section> | |
<article class="main" role="main"> | |
Quickly put this together as an idea for a mobile nav and search combo, view the code <a href="http://codepen.io/AllyBaird/full/wMGZyx/" target="_blank">here</a>. | |
</article> | |
</div><!-- /.container --> | |
</div><!-- /.wrapper --> |
$( document ).ready(function() { | |
// search box | |
$( ".searchclose" ).hide(); | |
$( ".searchbox" ).hide(); | |
$( ".search" ).click(function() { | |
$( ".searchbox" ).slideToggle( "slow", function() { | |
$( ".search" ).hide(); | |
$( ".searchclose" ).show(); | |
}); | |
}); | |
$( ".searchclose" ).click(function() { | |
$( ".searchbox" ).slideToggle( "slow", function() { | |
$( ".searchclose" ).hide(); | |
$( ".search" ).show(); | |
}); | |
}); | |
// open hamburger | |
$( ".close" ).hide(); | |
$( ".menu" ).hide(); | |
$( ".hamburger" ).click(function() { | |
$( ".menu" ).slideToggle( "slow", function() { | |
$( ".hamburger" ).hide(); | |
$( ".close" ).show(); | |
}); | |
}); | |
// closing - when list item is clicked | |
$( ".option" ).click(function() { | |
$( ".menu" ).slideToggle( "slow", function() { | |
$( ".close" ).hide(); | |
$( ".hamburger" ).show(); | |
}); | |
}); | |
// close hamburger | |
$( ".close" ).click(function() { | |
$( ".menu" ).slideToggle( "slow", function() { | |
$( ".close" ).hide(); | |
$( ".hamburger" ).show(); | |
}); | |
}); | |
// back to top scroll | |
$('.top').click(function(){ | |
$('html, body').animate({scrollTop : 0},"slow"); | |
}); | |
}); |
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> |
@import url(https://fonts.googleapis.com/css?family=Roboto+Slab:400,300|Varela+Round); | |
body { | |
background-color: #e2e2e2; | |
color: #222; | |
font-family: 'Roboto Slab', sans-serif; | |
font-size: 1em; /* 16px */ | |
line-height: 1.5; | |
margin: 0; | |
} | |
svg { | |
display: block; | |
} | |
/* objects | |
-------------------------------- */ | |
.wrapper { | |
margin: 80px auto; | |
width: 80%; | |
} | |
.container { | |
background-color: #fff; | |
height: 600px; | |
margin: 0 auto; | |
width: 320px; | |
} | |
header { | |
background-color: #222; | |
overflow: hidden; | |
margin: 0 auto; | |
padding: 15px 10px;; | |
width: 300px; | |
} | |
/* search + logo + burgerbox | |
-------------------------------- */ | |
h1.logo, .burgerbox, .search, .searchclose { | |
height: 30px; | |
cursor: pointer; | |
width: 30px; | |
} | |
h1.logo { | |
color: #fff; | |
float: left; | |
font-size: 19px; | |
font-weight: 400; | |
letter-spacing: 0.04em; | |
line-height: 1.5; | |
margin: 0 35px; | |
text-align: center; | |
width: 160px; | |
} | |
.burgerbox { | |
float: right; | |
} | |
.search { | |
float: left; | |
} | |
svg:hover path.search { | |
fill: #ccc; | |
} | |
input { | |
cursor: pointer; | |
} | |
input[type="text"] { | |
background-color: #eaeaea; | |
border: none; | |
float: left; | |
height: 20px; | |
padding: 10px 0 10px 10px; | |
width: 250px; | |
} | |
input:focus { | |
border: none; | |
outline: none; | |
} | |
input[type="button"] { | |
background-color: #222; | |
background-image: url(assets/img/searcharrow.svg); | |
background-repeat: no-repeat; | |
background-position: center center; | |
border: none; | |
color: #fff; | |
float: right; | |
height: 40px; | |
width: 40px; | |
} | |
input[type="button"]:hover { | |
background-color: #666; | |
} | |
/* svg hover effects | |
-------------------------------- */ | |
svg:hover line.grey { | |
stroke: #ccc; | |
} | |
svg:hover polyline.grey { | |
stroke: #ccc; | |
} | |
.searchclose { | |
float: left; | |
} | |
/* hamburger navigation | |
-------------------------------- */ | |
.hamburger .close { | |
position: absolute; | |
z-index: 100; | |
} | |
.menu { | |
background-color: #eaeaea; | |
height: 540px; | |
position: fixed; | |
width: 320px; | |
} | |
.menu ul { | |
padding: 0; | |
} | |
.menu li { | |
border-bottom: 1px solid #ccc; | |
font-size: 0.88em; | |
list-style-type: none; | |
padding: 10px; | |
} | |
.menu li.option:hover, | |
.contact__one:hover, | |
.contact__two:hover { | |
background-color: #222; | |
color: #fff; | |
} | |
.dropdown li:hover { | |
background-color: none; | |
} | |
li.contact { | |
border: 0; | |
padding: 0; | |
} | |
.contact__one, | |
.contact__two { | |
background-color: #999; | |
cursor: pointer; | |
display: block; | |
padding: 10px 0; | |
text-align: center; | |
width: 150px; | |
} | |
/* links | |
-------------------------------- */ | |
a:link { | |
text-decoration: none; | |
} | |
a:visited { | |
color: #222; | |
text-decoration: none; | |
} | |
a.cta { | |
background-color: rgba(34,34,34,0.4); | |
border: 1px solid #fff; | |
border-radius: 10px; | |
color: #fff; | |
display: inline-block; | |
font-size: 16px; | |
line-height: 1; | |
letter-spacing: 0.1em; | |
margin-top: 130px; | |
padding: 9px 32px 10px 32px; | |
} | |
a.cta:hover { | |
background-color: rgba(34,34,34,0.7); | |
padding-right: 40px; | |
padding-left: 40px; | |
} | |
/* search box | |
-------------------------------- */ | |
.searchbox { | |
background-color: #fff; | |
height: 40px; | |
padding: 10px; | |
width: 300px; | |
} | |
/* hero | |
-------------------------------- */ | |
.hero { | |
background-color: #666; | |
background-image: url('http://allybaird.com/codePen/img/ny-hero.jpg'); | |
background-repeat: no-repeat; | |
height: 180px; | |
padding: 30px 10px; | |
text-align: center; | |
width: 300px; | |
} | |
/* main | |
-------------------------------- */ | |
.main { | |
margin: 30px auto; | |
width: 300px; | |
} | |
.main a { | |
color: inherit; | |
text-decoration: underline; | |
} | |
.main a:hover { | |
color: #999; | |
text-decoration: none; | |
} | |
.border-bottom { | |
border-bottom: none !important; | |
} |