このページの本文へ

差がつくメニューアイコン 25個のCSSアニメーション (2/2)

2014年07月07日 11時00分更新

文●谷岡 蘭、利倉健太 / Stronghold

  • この記事をはてなブックマークに追加
本文印刷

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デザイナーとして働き始める。

前へ 1 2 次へ

この連載の記事

一覧へ

この記事の編集者は以下の記事をオススメしています