css アニメーションを使ってハンバーガーメニューを作ってみた

ハンバーガーメニューアイコン アニメーションアイコン

cssのアニメーションで 「ハンバーガーメニュー」 アイコンを作成してみました。

クリックするとメニューが動きます。

mouseoverの記述ですが、iPhoneでこれがあるとフォーカスが外れないようで動きが止まってしまいましたので、コメントアウトしました。
 


 

ソース

html

<div id="svg_box_01" class="svg_box">
    <input type="checkbox" class="menu_open" name="menu_open_01" id="menu_open_01">
    <label class="menu_open_button menu_button_01" for="menu_open_01" id="menu_open_button_01">
        <span class="hamburger hamburger_1"></span>
        <span class="hamburger hamburger_2"></span>
        <span class="hamburger hamburger_3"></span>
    </label>
</div>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
    <defs>
        <filter id="filter_01">
            <fegaussianblur in="SourceGraphic" stdDeviation="10" result="blur" />
            <fecolormatrix in="blur" mode="matrix" values="1 0 0 0 0  0 1 0 0 0  0 0 1 0 0  0 0 0 19 -9" result="filter_01" />
            <fecomposite in="SourceGraphic" in2="filter_01" operator="atop"/>
        </filter>
    </defs>
</svg>

css

svg {
	position: absolute;
	top: 0;
	left: 0;
	width: 0;
	height: 0;
}

.svg_box {
  position: relative;
  display: block;
  text-align: center;
  margin: 0;
  width: 160px;
  height: 160px;
}

.menu_open {
  display: none;
}

.menu_open_button {
	position: absolute;
	top: 0;
	left: 0;
	width: 160px;
	height: 160px;
	color: #fff;
	text-align: center;
	line-height: 160px;
	background: #39a9d6;
	border-radius: 100%;
	-webkit-transition-timing-function: ease;
		    transition-timing-function: ease;
	-webkit-transition-duration: 400ms;
		    transition-duration: 400ms;
	-webkit-transform: scale(1.0, 1.0) translate3d(0, 0, 0);
		    transform: scale(1.0, 1.0) translate3d(0, 0, 0);
	cursor: pointer;
}

.hamburger {
	display: block;
	position: absolute;
	top: 50%;
	left: 50%;
	margin-left: -30px;
	margin-top: -3px;
	width: 60px;
	height: 3px;
	background: #fff;
	-webkit-transition: -webkit-transform 200ms;
		    transition: transform 200ms;
}

.hamburger_1 {
  -webkit-transform: translate3d(0, -24px, 0);
          transform: translate3d(0, -24px, 0);
}

.hamburger_2 {
  -webkit-transform: translate3d(0, 0, 0);
          transform: translate3d(0, 0, 0);
}

.hamburger_3 {
  -webkit-transform: translate3d(0, 24px, 0);
          transform: translate3d(0, 24px, 0);
}

#svg_box_01 {
	-webkit-filter: url("#filter_01");
		    filter: url("#filter_01");
}

/* checkbox */
#menu_open_01:checked + #menu_open_button_01 .hamburger_1 {
  -webkit-transform: translate3d(0, 0, 0) rotate(45deg) scale(1.2, 1.2);
          transform: translate3d(0, 0, 0) rotate(45deg) scale(1.2, 1.2);
}
#menu_open_01:checked + #menu_open_button_01 .hamburger_2 {
  -webkit-transform: translate3d(0, 0, 0) scale(0.1, 1);
          transform: translate3d(0, 0, 0) scale(0.1, 1);
}
#menu_open_01:checked + #menu_open_button_01 .hamburger_3 {
  -webkit-transform: translate3d(0, 0, 0) rotate(-45deg) scale(1.2, 1.2);
          transform: translate3d(0, 0, 0) rotate(-45deg) scale(1.2, 1.2);
}
/* mouseover */
/*
.menu_button_01:hover .hamburger_1 {
  -webkit-transform: translate3d(0, 0, 0) rotate(45deg) scale(1.2, 1.2);
          transform: translate3d(0, 0, 0) rotate(45deg) scale(1.2, 1.2);
}
.menu_button_01:hover .hamburger_2 {
  -webkit-transform: translate3d(0, 0, 0) scale(0.1, 1);
          transform: translate3d(0, 0, 0) scale(0.1, 1);
}
.menu_button_01:hover .hamburger_3 {
  -webkit-transform: translate3d(0, 0, 0) rotate(-45deg) scale(1.2, 1.2);
          transform: translate3d(0, 0, 0) rotate(-45deg) scale(1.2, 1.2);
}
*/