解決策を提供するのに十分な問題を理解していると思います。
絶対配置要素と浮動要素はオーバーラップできます。☰をクリックすると要素が与えられ、要素float: right
も与えられdisplay: block
ます; これは100%
、幅を占有し、垂直方向のナビゲーション全体をロゴに向かって左に押し出すことを意味します。#logo
がメニューの上部にレンダリングされるというさらなる問題が発生します (ここでは機能しません)。そのため、上部に別の要素がレンダリングされているz-index
ため、☰ にはクリックが表示されなくなります。
z-index
配置された要素が新しいスタッキング コンテキストを作成するため、機能しません。詳細については、 http://philipwalton.com/articles/what-no-one-told-you-about-z-index/を参照してください。
ここでは CSSfloat
は必要ありません。値を置き換えたり、値を表示しinline-block
たりtable-cell
できます。z-index
デモでも削除しました。
最後に、クエリと同じ幅の垂直ナビゲーション$(window).resize()
クラスを削除するように計算を変更しました。これは、以前は垂直メニューが水平メニューに変更される前に消える可能性がある場合に幅があったためです。@media
100px
更新された回答(要求された設計に基づく)
追加された情報により、このソリューションはよりクリーンになりdisplay: table-cell
、元の回答から を削除することもできます (下に残っています)。
更新されたデモ
HTML
<div id="header">
<div id="logo">
<p>LOGO HERE</p>
<span id="menu">☰</span>
</div>
<ul id="nav">
<li id="homeBtn"><a href="index.php"><span id="homeBtnImg"></span></a></li>
<li><a href="#">WORK</a></li>
<li><a href="#">SERVICES</a></li>
<li><a href="#">ABOUT</a></li>
<li><a href="#">CONTACT</a></li>
</ul>
</div>
CSS
#header {
background-color: #f06060;
padding: 52px 0px;
}
#logo {
display:inline-block;
width: 348px;
height: 57px;
border:1px dotted black;
position:relative;
}
#menu {
position: absolute;
right: 0;
top: 15px;
display:none;
}
#nav {
list-style: none;
padding: 0;
display: inline-block;
}
#nav.vertical {
display: block;
padding-left: 20px;
}
#nav.vertical li {
display: list-item;
line-height: 40px;
}
#nav li {
display:inline-block;
padding-right: 40px;
}
#nav li:last-child {
padding-right: 0;
}
@media screen and (max-width: 800px) {
#menu {
display: inline-block;
}
#nav {
display: none;
}
}
JavaScript
以下の元の回答と同じです。
元の答え
このデモまたは以下のコードを参照してください。
HTML
<div id="header">
<div id="wrap">
<div id="logo">
<p>LOGO HERE</p>
</div>
<div id="menu_wrapper">
<div id="menu">☰</div>
<ul id="nav">
<li id="homeBtn"><a href="index.php"><span id="homeBtnImg"></span></a></li>
<li><a href="#">WORK</a></li>
<li><a href="#">SERVICES</a></li>
<li><a href="#">ABOUT</a></li>
<li><a href="#">CONTACT</a></li>
</ul>
</div>
</div>
</div>
CSS
#header {
background-color: #f06060;
padding: 52px 0px;
display:table;
width:100%;
}
#wrap {
display:table-row;
}
#logo {
display:table-cell;
width: 338px;
height: 57px;
}
#menu {
display:none;
}
#menu_wrapper {
display:table-cell;
text-align:right;
padding-right:5px;
}
#nav {
list-style: none;
padding: 0;
text-align: left;
}
#nav.vertical {
display: block;
}
#nav.vertical li {
display: list-item;
line-height: 40px;
}
#nav li {
display:inline-block;
padding-right: 40px;
}
#nav li:last-child {
padding-right: 0;
}
@media screen and (max-width: 800px) {
#menu {
display: block;
}
#nav {
display: none;
}
}
JavaScript
$(window).resize(function(){
if (window.innerWidth > 800) {
$("#nav").removeClass('vertical');
}
});
$("#menu").click(function(){
$("#nav").toggleClass('vertical');
return false;
});