パン屑リストとハンバーガーメニューを一体化させたものを作成してみた

更新日:2017年8月6日

ウェブサイトといえばPCから見るものだったのはもう昔の話になってしまって久しいですね。外に出て周りを見渡せば誰もがスマホを触っています。そうです、現代ではウェブサイトはスマホから見るものになっています。

スマホ対応となると、メニューにはハンバーガーメニューがよく採用されます。
誰もが見たことがあるかと思いますが、白の三本の横線の入ったアレです。

そんなよく使われるハンバーガーメニューを作成してみたのでご紹介します。そのまま使って頂いてもいいですし、カスタマイズして使って頂いても問題ございません。勿論商用フリーです。
今回の例ではパン屑リストとハンバーガーメニューを一体化させています。

完成すると下記のようになります。
ブラウザのウインドウ幅が600px以下の時にしかハンバーガーメニューは表示されませんので、もし表示されていないとう方はウインドウ幅を狭めてみて下さい。表示されます。
ちなみに画像は一切使わず、HTML、CSS、jQueryだけで作られています。

Home > ページタイトル

それではどのように実装するかというと、HTMLで

Home > ページタイトル

と記述します。

説明は割愛しますが、スマホ時に上記のHTMLを表示させるといった構造になります。
つまりPC時には上記のHTMLは表示させない構造となっていますので、PC時用のHTNLは別途記述して頂く必要があります。

次にCSSには

#hamburger_menu, #menu {
	display: none;
}

@media only screen and (max-width: 600px) {

#hamburger_menu {
	display: block;
	width: 100%;
	position: relative;
}

#pankuzu {
	float: left;
	width: 100%;
	font-size: 10px;
	color: #4D4D4D;
	border-top: #449268 solid 4px;
	padding-top: 9px;
}

#menu_text_wrap {
	position: relative;
	float: left;
	width: 100%;
	height: 25px;
	border-top: #449268 solid 4px;
	padding-top: 9px;
	background-color: #449268;
}

#menu_text {
	font-size: 15px;
	font-weight: bold;
	text-align: center;
	color: #FFF;
	margin-top: -4px;
}

.hamburger_line_wrap {
	position: absolute;
	right: 0;
}

.hamburger_line {
	position: relative;
	float: left;
	width: 28px;
	height: 24px;
	cursor: pointer;
	overflow: hidden;
	z-index: 1;
	background-color: #449268;
	border-top: #449268 solid 3px;
	padding: 3px 6px 8px 6px;
}

.hamburger_line1, .hamburger_line2, .hamburger_line3 {
	position: absolute;
	width: 28px;
	height: 3px;
	background-color: #FFF;
	border-radius: 20px;
	transition: all 0.5s ease-out; -o-transition: all 0.5s ease-out;
	-moz-transition: all 0.5s ease-out;
	-webkit-transition: all 0.5s ease-out;
	-ms-transition: all 0.5s ease-out;
}

.hamburger_line1 {
	top: 5px;
}

.hamburger_line2 {
	top: 15px;
}

.hamburger_line3 {
	top: 25px;
}

.hamburger_line1-anime {
	top: 15px;
	-o-transform: rotate(405deg);
	-moz-transform: rotate(405deg);
	-webkit-transform: rotate(405deg);
	-ms-transform: rotate(405deg);
	transform: rotate(405deg);
}

.hamburger_line2-anime {
	background-color: rgba(255,255,255,0);
}

.hamburger_line3-anime {
	top: 15px;
	-o-transform: rotate(-405deg);
	-moz-transform: rotate(-405deg);
	-webkit-transform: rotate(-405deg);
	-ms-transform: rotate(-405deg);
	transform: rotate(-405deg);
}

#menu_wrap {
	position: relative;
	width: 100%;
}

#menu {
	position: absolute;
	top: 0;
	width: 100%;
	display: block;
	position: absolute;
	top: 30px;
	text-align: center;
	margin-top: 8px;
	padding: 0;
}

#menu li {
	list-style: none;
	background-color: #449268;
}

#menu li a {
	color: #FFF;
	text-decoration: none;
}

}

と記述します。

もっと簡潔にまとめられるかも知れませんが、いざ書いてみるとこんなにも長くなってしまいました。ポイントとしては
@media only screen and (max-width: 600px) {
でブラウザのウインドウ幅が600px以下の時にハンバーガーメニューを出現させています。

仮にブラウザのウインドウ幅が480px以下の時にハンバーガーメニューを表示させたいのであれば、
@media only screen and (max-width: 480px) {
とすればOKです。

最後にjQueryには下記のように記述します。

$(function() {
	$("#menu_text_wrap").hide();
	$("#menu_wrap").hide();

	$(".hamburger_line").click(function() {
		$(".hamburger_line1").toggleClass("hamburger_line1-anime");
		$(".hamburger_line2").toggleClass("hamburger_line2-anime");
		$(".hamburger_line3").toggleClass("hamburger_line3-anime");
		$(".hamburger_line").css("background-color","#60A17F");
		$(".hamburger_line").css("border-top","#60A17F solid 3px");
		$("#pankuzu").hide();
		$("#menu_text_wrap").show();

		if($("#menu_wrap").css("display") == "none") {
			$("#menu_wrap").slideDown("fast");
		}else{
			$("#menu_wrap").slideUp("fast");
			$(".hamburger_line").css("background-color", "#449268");
			$(".hamburger_line").css("border-top", "#449268 solid 3px");
			$("#pankuzu").show();
			$("#menu_text_wrap").hide();
		}
	});
});

これにて完成。
「私の探していたハンバーガーメニューはまさにこれだ!」
なんて方がいらっしゃいましたらどうぞご自由にお使い下さい!