レスポンシブメニュー実装
ハンバーガーメニュー
トグルボタン(ハンバーガーボタン)が完成できたら、いよいよレスポンシブメニューを構築していきます。まずは、下記のUI仕様を事前に確認します。
横幅が狭いスマホ画面の場合、ナビメニューが4つ以上あると、横へ並べることが困難になることが予測されます。そこで、メニューを縦へ集約し一旦非表示にします。トグルボタンを配置し、クリックすることで非表示にしたメニューが出現する仕様を考えます。また、パソコンモニターの場合は、幅広ですので、十分にメニューを横へ配置することが可能となり、トグルボタンは不要のため、非表示にさせる仕様になります。
作成のコツは、モバイルファーストです。まずは、スマートフォン仕様を構築し、メニューを画面から外へ押し出してみましょう。コーディングサンプルを図解で解説しています。
See the Pen
xxbYpEN by nakatax (@cocohp)
on CodePen.
●HTMLコード
●CSSコード
@charset "UTF-8"; img{width:100%;} /*ロゴの大きさを調整*/ #logo img { max-width:50%; } nav{ width: 100%; height: 70px; position: relative; background: #F6F6F6; } .drawer{ display: flex; flex-direction: row; align-items: center; justify-content: space-between; position: relative; height: 70px; padding: 0 1em; } /*ナビゲーション部分*/ .menu ul li a { display:block; font-weight:bold; padding: 2em; border-bottom: 1px dotted #CCC; color:#333; text-decoration:none; } .menu ul li a:hover {background-color:rgba(0,0,0,0.5); color:orange;} .menu{ text-align:center; background-color:rgba(255,255,255,0.5); transition: 0.5s ease;/*滑らかに表示*/ -webkit-transform: translateX(100%);/*画面より100%外へ押し出し非表示にさせる*/ /* transform: translateX(-100%);/*右から出す場合は、マイナス100%としてください*/ } /*OPEN時の動き*/ .menu.open { -webkit-transform: translateX(0%); transform: translateX(0%);/*メニューを元の位置へ戻す*/ } /*トグルボタンのスタイルを指定*/ .Toggle { display: block; position: fixed; /* bodyに対しての絶対位置指定 */ width: 42px; height: 42px; cursor: pointer; z-index: 3; right:15px; } .Toggle span { display: block; position: absolute; width: 50px; border-bottom: solid 4px #333; -webkit-transition: .35s ease-in-out; /*変化の速度を指定*/ -moz-transition: .35s ease-in-out; /*変化の速度を指定*/ transition: .35s ease-in-out; /*変化の速度を指定*/ } /*各ボーダー少しずつずらす*/ .Toggle span:nth-child(1) { top:5px; } .Toggle span:nth-child(2) { top: 18px; } .Toggle span:nth-child(3) { top: 32px; } .Toggle.active span:nth-child(1) { top: 18px; /* 1番目のspanをマイナス45度に */ -webkit-transform: rotate(-45deg); -moz-transform: rotate(-45deg); transform: rotate(-45deg); } /* 2番目と3番目のspanを45度に */ .Toggle.active span:nth-child(2), .Toggle.active span:nth-child(3) { top: 18px; -webkit-transform: rotate(45deg); -moz-transform: rotate(45deg); transform: rotate(45deg); } /*----------------------------------ここからPCモニターの記述-----------*/ @media screen and (min-width: 600px) { /*ロゴの大きさを調整*/ #logo img{max-width:250px;} nav{ display: flex; } .Toggle{ display: none; } .menu{ width: 100%; font-size:0.9em; background-color: transparent; margin:0 10px; -webkit-transform: translateX(0); transform: translateX(0); } .menu ul{ height: 70px; display: flex; flex-wrap: wrap; justify-content: flex-end; align-items: center; } .menu ul li a{ padding: 0 1em; border-bottom: none; } .menu ul li a:hover{ background-color:transparent; } }
●jsの記述
/*CDNを忘れず記述する*/ /*----------HTML内へ記述する場合は、で、囲いましょう*/ $(function() { $('.Toggle').click(function() { $(this).toggleClass('active'); $('.menu').toggleClass('open'); }); });
仕上がりサンプル
See the Pen
xxbYpEN by nakatax (@cocohp)
on CodePen.
【補足】ベンダープレフィックス
最新版のブラウザだけを、対象にする場合は、全く考慮する必要はありませんが、
CSS3をサポートしていない古いバージョンのブラウザを考慮する場合、
-webkit- | Google Chrome, Sfari用 |
---|---|
-moz- | Firefox用 |
など、各ブラウザ専用のベンダープレフィックスが必要になります。
記述の仕方は、セレクターの先頭に記述を追加して記述するだけです。
【例】-webkit-transform: translateX(0);
対応しているブラウザのバージョンをチェック
https://caniuse.com/

