スマートフォンやタブレットで見たときのメニュー表現[2]

2014-07-02

こちらで書いた記事ではナビゲーションを単純に縦並びにしていますが、これはスマートフォンサイトで見かけるアイコンを右上に表示し、ナビゲーションをスライドして表示させるバージョンです。

サンプル

パソコン用スタイル

/***********************************************
 * navigation
 ***********************************************/
#menu_button{
	display:none;
}
#menu_list{
	display:none;
}
#menu_list ul{
	display:none;
}

#navigation{
  display: block;
	width: 1000px;
	margin-right: auto;
	margin-left: auto;
	height: 30px;
	line-height: 30px;
	overflow:hidden;
}
#navigation ul li{
	list-style:none;
	float:left;
	width:20%;
	text-align:center;
}
#navigation ul li a{
	display: block;
	background: #537EB8;
	color: #FFF;
	text-decoration: none;
	border: 1px solid #FFFFFF;
}
#navigation ul li a:hover{
	filter:alpha(opacity=70);
	-moz-opacity:0.70;
	opacity:0.70;
}

スマートフォン用スタイル

#navigation{
	display:none;
}
#navigation ul{
}
#navigation ul li{
}

#menu_button{
	float: right;
	width: 35px;
	text-align: center;
	font-size: 24px;
	padding-top: 10px;
	cursor:pointer;
	display:block;
}
#menu_list{
	position: absolute;
	top: 0px;
	right: 0px;
	width: 250px;
	background-color: #000;
	filter:alpha(opacity=70);
	-moz-opacity:0.70;
	opacity:0.70;
	padding:10px;
}
#menu_list ul{
  display: inline;
}
#menu_list ul li{
	list-style:none;
}
#menu_list ul li a{
	display: block;
	text-decoration: none;
	border-bottom: 2px dotted #DDD;
	color: #FFF;
}
#menu_list #close{
	text-align:right;
	font-weight:bold;
}

jQuery

jQuery(document).ready(function(){
//三をクリックしたら
  jQuery(document).on('click','#menu_button',function(){
    
  //ナビゲーションのLI要素を取り出す
    var list = jQuery("#navigation ul li");
    
  //HTMLを作る
    var html = '<ul>';
        html += '<li><a href="#" id="close">&chi;</a></li>'; //閉じるボタンの分を追加
        
    for(var i=0; i<list.length; i++){
      html += '<li>'+jQuery(list[i]).html()+'</li>'; //ナビゲーションのAタグを追加
    }
    html += '</ul>';
    
    jQuery("#menu_list").show().html(html); //スマートフォン用のメニューへ挿入し表示する
  });
  
 //閉じる
  jQuery(document).on('click','#close',function(e){
    jQuery("#menu_list").slideUp();
    e.preventDefault();
  });
});

ナビゲーションのAタグ要素を取得し、タップで開くメニューにLI要素として追加しています。jQuery使ってますんで、appendで要素を追加するって手も有りますが、私はHTMLを先に作って一気に入れるって手をよく使います。多分appendの方がスマート?かも

ちなみに&equiv;で表示しています。