表示するときの動きが美しいメガメニューを作ります。
実装のポイント
- 動きはCSSアニメーションのみ
- JS(jQuery)ではClass付与の制御のみ
最近はshow()
とか使わなくてもいけるのでCSSで動きを入れるのが基本ですよね。でもshow()
とか使いたいし使ったほうが楽なときは使おう。
HTML
トリガーとなるボタンと、表示するエリアを作る
<!-- ボタンになるやつ -->
<div class="menu_toggle js-menu_toggle">
<span>Click</span>
</div>
<!-- メガメニューになるやつ -->
<div class="menu_list js-menu_item">
<ul>
<li>テキスト</li>
<li>アメリカ</li>
<li>カナダ</li>
<li>中国</li>
<li>日本</li>
</ul>
</div>
SCSS
CSSでフェードインさせたい時はdisplay:none;
じゃなくてvisibility: hidden
で要素を隠す。
ただフェードイン/アウトだけだと味気ないデザインになってしまうので、transform: scaleY();
を利用して少しニュアンスを与えてあげましょう。これで見たときの印象がぐっと変わる
.menu_toggle{
width: 300px;
height: 50px;
span{
display: block;
width: 100%;
height: 100%;
text-align: center;
text-decoration: none;
background-color: yellow;
padding-top: 12px;
box-sizing: border-box;
&:hover{
background-color: #f90;
}
}
}
.menu_list{
width: 100%;
background-color: #efefef;
padding: 20px;
box-sizing: border-box;
box-shadow: 0 10px 20px rgba(#000, 0.15);
// CSSアニメーションの設定
transition:all 0.3s;
transform-origin: center top;
transform: scaleY(.96);
opacity: 0;
visibility: hidden;
ul li{
margin-bottom: 20px;
}
&.is-show{
opacity: 1;
visibility: visible;
transform: scaleY(1);
}
}
jQuery
JSはClassの有無を判定してつけたり外したりするだけ。
var toggle = $(".js-menu_toggle");
var elm = $(".js-menu_item");
var active = "is-active";
var show = "is-show";
toggle.on ( 'click' , function(){
var elm = $(this).next(elm);
if( $(this).hasClass(active)){
$(this).removeClass(active);
elm.removeClass(show);
}else{
$(this).addClass(active);
elm.addClass(show);
}
});
完成版
こちらが完成版となります。
See the Pen メガメニュー小技版 by nagomi-753 (@nagomi-753) on CodePen.
ちなみに、scaleY()
を使わない場合はこんなかんじです。
See the Pen メガメニュー小技効いてない版 by nagomi-753 (@nagomi-753) on CodePen.
こういうニュアンスは意外と大事だと思うので
色とかフォントサイズも大事だけど、動きにも少し注目してみるとぐっと良いデザインになるかと思う。