STEP 5:ざまざまなバリエーション
これでメニューアイコンのマウスホバー時およびクリック時のアニメーションが完成した。同様の手法で動きを考えていくと、メニューアイコンにさまざまなアニメーションがつけられる。
ここでは、以下のような25種類のバリエーションを用意した。以降は、その中から3つをピックアップして解説する。
HTMLの構造
HTMLの構造は最初のメニューアイコンとほぼ同じだ。違いは、.toggle_menuとしていたクラスに「.demo数字」というclass名を併記し、さまざまなバリエーションに対応できるようにしたこと。また、アイコンクリック後のアニメーションのために、.demo数字の親要素に「#btns」を追加している。
■ソースコード(HTML)
<div id="btns">
<div>
<a href="#" class="toggle_menu demo1">
<span class="first"></span>
<span class="second"></span>
<span class="third"></span>
</a>
</div>
...
<div>
<a href="#" class="toggle_menu demo25">
<span class="first"></span>
<span class="second"></span>
<span class="third"></span>
</a>
</div>
</div>
■ソースコード(CSS)
.toggle_menu{
overflow: hidden;
border-radius: 90px;
padding: 31px 29px;
border:2px solid #fff;
display:block;
width:24px;
height:20px;
position:relative;
}
.toggle_menu span{
display: block;
height: 3px;
width: 24px;
margin:0 0 5px 0;
background: #fff;
transition: all .3s;
position: relative;
}
demo No.2
transformプロパティを使用し、1番目のspan要素と3番目のspan要素を上下に移動させspan要素を重ねている。マウスホバー時にこの上下の移動をリセットし、閉じた状態から開いた状態へと変化させる。
■ソースコード(CSS)
.demo2 span.first{
-webkit-transform: translate(0,8px);
transform: translate(0,8px);
}
.demo2 span.third{
-webkit-transform: translate(0,-8px);
transform: translate(0,-8px);
}
.demo2:hover span.first,
.demo2:hover span.second,
.demo2:hover span.third{
-webkit-transform: translate(0,0);
transform: translate(0,0);
}
demo No.6
No.2の移動にrotate()による回転を加えて、矢印の形状を作成している。No.2同様に、マウスホバーによって開いた状態へと変化させる。
■ソースコード(CSS)
.demo6 span{
transition: all .2s;
}
.demo6 span.first {
width: 12px;
-webkit-transform: translate(0,3px) rotate(-45deg);
transform: translate(0,3px) rotate(-45deg);
}
.demo6 span.third {
width: 12px;
-webkit-transform: translate(0,-3px) rotate(45deg);
transform: translate(0,-3px) rotate(45deg);
}
.demo6:hover span.first,
.demo6:hover span.third{
width: 24px;
-webkit-transform: translate(0,0) rotate(0deg);
transform: translate(0,0) rotate(0deg);
}
demo No.15
3つのspan要素それぞれに疑似要素:beforeと:afterを追加し、position:absolute;によって前後関係をつけて配置している。:beforeは最前面に配置され、マウスホバーにより透明に変化する。
■ソースコード(CSS)
.demo15 span:after,
.demo15 span:before{
content:"";
position: absolute;
height: 3px;
width: 24px;
background: #256942;
transition: all .2s;
}
.demo15 span:after{
box-shadow: inset 1px 1px 0px 0px rgba(0, 0, 0, 0.2);
}
.demo15 span:before{
background: #fff;
z-index: 2;
}
.demo15:hover span:before{
-webkit-transform: scale(1.5);
transform: scale(1.5);
}
.demo15:hover span:before{
opacity: 0;
}
.demo15 span.first:before{
transition-delay:.05s;
}
.demo15 span.second:before{
transition-delay:.1s;
}
.demo15 span.third:before{
transition-delay:.15s;
}
このほかのバリエーションも、ピックアップした3つの動きを変化させて作成している。すべてのバージョンのコードはDEMOページの[ Show Code ]にて参照できる。
バリエーションにおけるクリック後の動作
25個のバリエーションでは、クリックイベント発生時に、「.activate」というclass名を付与して動きをつけている。クリック後は1番目と3番目の要素を45度回転させ、2番目の要素を透過させることで、「×印」に変化させる。また、親要素である#btnsを使って、マウスホバーでのアニメーションや疑似要素:before、:afterを無効化し、×印から変形しないように指定している。
■ソースコード(CSS)
/* デモ内の全バリエーションに共通 */
.activate #btns a{
-webkit-transform:rotate(360deg);
transform:rotate(360deg);
transition: all .5s;
-webkit-animation:none;
animation:none;
box-shadow: none;
background: none;
}
.activate #btns a span{
-webkit-transform: translate(0,0) rotate(0deg);
transform: translate(0,0) rotate(0deg);
height: 3px;
width: 24px;
margin:0 0 5px 0;
background: #fff;
border: none;
box-shadow: none;
opacity: 1;
transition: all .5s;
-webkit-animation:none;
animation:none;
}
.activate #btns a span:before,
.activate #btns a span:after{
display: none;
}
.activate #btns a span.first{
-webkit-transform: translate(0px,8px) rotate(45deg);
transform: translate(0px,8px) rotate(45deg);
}
.activate #btns a span.second{
opacity: 0;
}
.activate #btns a span.third{
-webkit-transform: translate(0px,-8px) rotate(-45deg);
transform: translate(0px,-8px) rotate(-45deg);
}
■ソースコード(jQuery)
$(function(){
$(document).on('click', '#btns a', function(event) {
event.preventDefault();
$('html').toggleClass('activate');
});
});
著者:谷岡 蘭(たにおか・らん)
1992年生まれ。株式会社レターズのデザイナー。2014年からWebデザイナーとして働き始める。Webに関する活動拠点「Stronghold」というサイトでブログを書いたり、デザインの実験をしている。
著者:利倉健太(としくら・けんた)
1985年生まれ。株式会社レターズのデザイナー。2010年からWebデザイナーとして働き始める。