
ハンバーガーメニューのデザインでjqueryやcssの意味が分からない。
どのような理由でスライドしたり動きがつくのか?
今回は
・ハンバーガーメニューの作り方
・なぜ動くのか?の理論的な内容
についてお話しします。
・ハンバーガーメニューの仕組みを理解できる
・様々なWebデザインの設計に応用できる
まずは今回の土台となるHTMLについて
<!DOCTYPE html> <html lang="ja" dir="ltr"> <head> <link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"> <link rel="stylesheet" href="test.css"> <meta charset="utf-8"> </head> <body> <i class="fa fa-bars fa-2x" aria-hidden="true"></i> <ul> <li>List0_1</li> <li>List0_2</li> <li>List0_3</li> <li>List0_4</li> <li>List0_5</li> <li>List0_6</li> </ul> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script><!--jquery--> </body> </html>
リストを6個書きました。
(見やすいように省けるところは省いてデザインも簡素なものになっています。)
“fa-bars”のクラスを持つ要素が、ハンバーガーメニューの棒になります。
これは上の方に長いコードがありますが、font-awsomeのものです。
css、jqueryのコードと補足(“z-indexが効かない時の裏ワザ “も紹介!)
body{ margin: 0; padding: 0; } .fa-bars{ position: relative;/*z-indexが効かない時の裏ワザ*/ cursor: pointer;/*バーの上で手になる*/ z-index: 100; } ul{ position: absolute; top:0; left: -100%;/*これで消す*/ margin: 0; padding: 5%; background-color: #FFCC99; width: 10%;/*任意にどうぞ*/ transition: .5s;/*滑らかな動き*/ } .appeare{ left: 0;/*これで現れる*/ }
ではcssの説明をします。
ここでミソとなるのは、left:-100%で消すということです。
(実際は消えておらず、見えない画面の左側に行ってる。)
実際にこの一文をコメントアウトするとメニューが現れます。
そう考えると、
“もし、このulが『left:-100%』ではなく『left:0』だったら、メニューが現ている状態”
ですよね!
このことを頭に入れておいてください。
『left:0』及び『.appeare』については後述します。
“left”をいじったので、メニューが現れる際は左からスライドする感じで出現します。
「transition」は”メニューが出てくる時のゆっくりさ”を指定します。
これが無いとメニューが一瞬で現れていしまい、スライドする感じがありません
そしてこのcssにはもう一つ、覚えて欲しいことがあります。それは
「position:relative」で z-index を有効にする
ことです。
「z-indexがなぜか効かない!!」ということありませんか?
その時はこの裏ワザをやってみてください。
$('.fa-bars').on('click', function () { $('ul').toggleClass('appeare'); //classの付け外し })
次はjqueryについてです。
「.fa-bars」は先にも言った通り、ハンバーガーメニューの棒です。
つまり
「ハンバーガーの棒(.fa-bars)をクリックしたら何か機能せよ!」
という命令です。
{ }の中にその機能の内容が記述されています。
『$(‘ul’).toggleClass(‘appeare’)』は、ulにclassとして「appeare」を付け外しせよの意味です。
「toggleClass」は、これから付けようとしているクラスが、その対象に既に付いていたら外す。対象に付いていなければ付けるという機能です。
まとめると
.fa-barsを押すたびに、ulのclassに”appeare”を付ける→外す→付ける→外す…(繰返)
理論的構造の説明 – 難しくないのでその構造を理解してスッキリしましょ
さて。
なぜ以上のコードでメニューが動いて、横から出たり入ったりするのか?
ここまでまとめたのをご覧になっても分からない方は多いと思います。
でも実はそんなんに難しくはありません.。
まず、あのハンバーガー(3本線)をクリックするとulにclassとして”appeare”が設定されます (∵ jqueryのtoggleClassより)。
すると、cssの記述で .appeare{ left:0 } がありますので、left:-100% の効力が無くなり、その結果メニューが表示されるという仕組みです。
そして、もう一度ハンバーガーをクリックすると、ul から class の appeare が剥ぎ取られます (∵ jqueryのtoggleClassより)。
ulには元々 ul{ left:-100% } というcssの記述がありますので、ulすなわちメニューは見えなくなります。
この繰り返しでハンバーガーメニューは存在します。
最後に
お疲れ様でした😆。
以上が(今回の)ハンバーガーメニューの構造になります。
何度も読み返すことにより必ず分かるようになりますから頑張ってください!