スマホサイトでよく見るドロワーメニュー(三本線)を押すと前面に広がるメニューを実装してみようと思います。
HTMLとCSS
まずはメニューを出した状態で重なりを調節します。
今回は、「 header 」が一番上でその下にメニューが来て、さらに下にメインコンテンツが来ます。
コンテンツの重なりは「 z-index 」の数字が大きいほど前面に来ます。
See the Pen
前面に広がるメニュー by endebataro (@endebataro)
on CodePen.
開閉アニメーションを設定
次に、アニメーションの設定を行います。
右上の「 三 」を押したらどのような動きでメニューを表示するか決めます。
上からスルッと出てくるアニメーションをつけてみようと思います。
閉じる時には逆に上にスルッと戻る感じにしようと思います。
See the Pen
前面に広がるメニュー2 by endebataro (@endebataro)
on CodePen.
動かす方法は「 #menu 」にtransitionでアニメーションの設定をして、「 .suru 」のクラスを付けたり外したりしています。
「 .suru 」を付けると、メニューが上がって見えなくなります。逆に外すと下がってきてメニューが表示されます。
「 .suru 」には、transformが記述してあり、上にマイナス100移動します。( translateY(-100%) )
メニューを非表示にする
「 #menu 」に「 .suru 」を付け、非表示にします。
See the Pen
前面に広がるメニュー3 by endebataro (@endebataro)
on CodePen.
「 三 」を押したら「 三 」を「 ✖ 」にする
jQueryで「 三 」を押したらテキストを変更し「 ✖ 」にしよう。
そして「 ✖ 」を押したら「 三 」に戻そう。
See the Pen
前面に広がるメニュー4 by endebataro (@endebataro)
on CodePen.
jQueryのif文を使います。
「 if($(this).text() == “三”) 」
もし、「 header span 」のテキストが、「 三 」だったらという意味です。
「 $(this).text(“×”); 」
「 header span 」のテキストを「 ✖ 」にする。
「 else 」
それ以外のテキストが入っていたらという意味です。
「 $(this).text(“三”); 」
「 header span 」のテキストを「 三 」にする。
出来たif文に「 #menu 」の表示・非表示を追加しよう
上で作成したif文に「 #menu 」の表示・非表示を追加します。
「 header span 」のテキストが「 ✖ 」の時は、「 #menu 」を表示し、
「 header span 」のテキストが「 三 」の時は、「 #menu 」を非表示にします。
See the Pen
前面に広がるメニュー5 by endebataro (@endebataro)
on CodePen.
【HTML】
<header> <img src="https://hajimete.org/wp-content/uploads/2019/06/title.png" alt="logo" /> <span>三</span> </header> <main> <div id="top_contents"> <div class="top_inner"> <h1>我々は宇宙人だ。</h1> <p> 世界征服には、どうしたってUFOは欠かせない代物である。<br /> 我々のUFOを紹介しよう! </p> </div> </div> </main> <div id="menu" class="suru"> <div class="menu_inner"> <h2>MENU</h2> <ul> <li>UFOについて</li> <li>UFOとは?</li> <li>謎の飛行物体「UFO」</li> <li>UFOと未確認飛行物体</li> <li>ユーフォメーション(UFO)</li> </ul> </div> </div>
【CSS】
body { margin: 0; padding: 0; } a { text-decoration: none; color: rgb(13, 199, 143); display: block; } header { position: fixed; z-index: 10; top:0; left:0; width: 100%; height: 60px; background: #fff; box-shadow: 0 2px 30px -20px rgba(0,0,0,.4); } header img { position: absolute; top: 50%; left: 20px; height: 45%; display:block; transform: translateY(-50%); -webkit-transform: translateY(-50%); } header span { position: absolute; top: 50%; right: 20px; height: 45%; display:block; font-size: 24px; line-height: 1; font-weight: 800; transform: translateY(-50%); -webkit-transform: translateY(-50%); cursor: pointer; } #top_contents { position: relative; width: 100%; height: 800px; text-align: center; display: block; } .top_inner { position: absolute; top: 50%; left: 50%; transform:translate(-50%, -50%); -webkit-transform:translate(-50%, -50%); } .top_inner a { display: block; padding: 8px 20px; margin-top: 30px; border: 1px solid rgb(13, 199, 143); border-radius: 12px; min-width: 240px; } #menu { position: fixed; z-index: 9; top:0; left:0; width: 100%; height: 100%; background: rgba(0,0,0,.95); display: block; color: #fff; transition: .6s ease-in-out; -webkit-transition: .6s ease-in-out; } .menu_inner { position: absolute; top:50%; left: 50%; transform:translate(-50%, -50%); -webkit-transform:translate(-50%, -50%); display:block; width: 280px; padding-top: 60px; text-align: center; } .menu_inner h2 { margin-bottom: 20px; } .menu_inner ul { padding:0; } .menu_inner li { width: 100%; display: block; margin-top:20px; padding: 12px 0; border-bottom: 1px solid #fff; } .suru { transform: translateY(-100%); -webkit-transform: translateY(-100%); }
【jQuery】
$(function() { $("header span").on("click", function() { if($(this).text() == "三") { $(this).text("×"); $("#menu").removeClass("suru"); } else { $(this).text("三"); $("#menu").addClass("suru"); } }); });
コメント