今回はハンバーガーメニューをクリックするとサイドバーがtransform:scaleで拡大しながら表示されるCSSアニメーションをご紹介いたします。
スライドにtransform:scaleを使用した拡大アニメーションに加えてtranslateのスライドとrotateの回転もプラスした3種類のマテリアルデザインを作りました。
この記事の信頼性(筆者はこんな人)
- 現役Webデザイナーが執筆
- 継続して月収80万円超のフリーランス
- 完全未経験から独学でWeb制作スキルを習得
- Twitterフォロワー数1,700人超(→@twinzvlog_yk)
- Web制作の無料メンター経験多数
- 認定ランサー(ランサーズ最高ランク)
マテリアルデザインなのでそのまますぐにでもコピペして使用できるように仕上がっています。
htmlとcssだけしか使っていません。
コードの説明や実際の動きも詳しくまとめてみたので自由にお使いください。
こちらのデザイン・コードはすべて完全オリジナルなのでコピペ大歓迎です。
1. サイドバーがブワーッと拡大表示されるハンバーガーメニュー
動きは下の画像のような感じになります
コードを見る
<div>
<div class="hamburger">
<div class="borders">
<a href="#sidemenu" class="hamburger-menu">
<div class="first-border"></div>
<div class="second-border"></div>
<div class="third-border"></div>
</a>
</div>
</div>
<header id="sidemenu" class="sidenavs">
<a href="#" class="close-btn">×</a>
<div class="sidebar-btn">
<p><a href="#">About</a></p>
<p><a href="#">Services</a></p>
<p><a href="#">Clients</a></p>
<p><a href="#">Contact</a></p>
</div>
</header>
</div>
.hamburger-menu div {
height: 5px;
background-color: black;
margin: 5px auto;
}
.hamburger-menu .first-border {
width: 25px;
/* メニューアイコンの線の長さを調整 */
}
.hamburger-menu .second-border {
width: 18px;
/* メニューアイコンの線の長さを調整 */
}
.hamburger-menu .third-border {
width: 12px;
/* メニューアイコンの線の長さを調整 */
}
.hamburger .borders {
padding-top:5px;
}
.hamburger {
width:52px;
height:50px;
border:2px solid white;
border-radius:10px;
/* ボーダーにradiusで丸みをつける */
transition: .5s;
/* アニメーションの時間を0.5秒に指定 */
opacity:1;
/* 透明度を指定 */
background:#f1f1f1;
}
.hamburger:hover {
opacity:0.5;
/* 透明度を指定 */
}
.hamburger + .sidenavs:target {
overflow-x: visible;
/* ボックスからはみ出る箇所をそのまま表示 */
width: 40%;
/* サイドメニューの幅 */
display:block;
transform:scale(1);
/* 伸縮率を指定 */
}
.sidenavs:target {
overflow-x: hidden;
/* ボックスからはみ出る箇所を隠す */
width: 0;
transition-duration:1.2s;
/* アニメーションの時間を0.5秒に指定 */
}
/* ハンバーガーメニュー表示時 */
.sidenavs {
height: 100%;
width: 0;
position: fixed;
/* 画像の配置を指定 */
z-index: 1;
top: 0;
left: 0;
background-image:url("https://source.unsplash.com/1000x803");
/* サイドバーの背景画像を指定 */
overflow-x: hidden;
/* 横スクロールを無効にする */
padding-top: 60px;
transition: .8s;
/* アニメーションの時間を0.5秒に指定 */
transform:scale(0);
/* 伸縮率を指定 */
}
/* ハンバーガーメニュー表示時のリンク */
.sidenavs a {
text-decoration: none;
font-size: 45px;
/* 文字サイズを大きめに調整 */
color: white;
display: block;
transition: 0.5s;
/* アニメーションの時間を0.5秒に指定 */
font-weight:bold;
}
/* マウスオーバー後のリンク */
.sidebar-btn a {
transform:skewX(0deg);
/* X軸の傾斜角度を指定 */
}
.sidebar-btn a:hover {
color: black;
transform:skewX(-20deg);
/* X軸の傾斜角度を指定 */
}
.sidenavs p {
margin:20px 80px;
/* サイドバーのボタン位置を調整 */
width:250px;
}
/* クローズボタン */
.sidenavs .close-btn {
position: absolute;
/* 親要素との絶対位置を指定 */
top: 0;
right: 25px;
font-size: 36px;
margin-left: 50px;
}
ここがポイント!
- 長さの異なるボーダーを縦に並べることで「ドネルメニュー(Doner Menu)」を実現
- ドネルメニューをクリックするとtransform:scaleが実行されサイドバーが拡大しながら現れるアニメーションを実現
- ドネルメニューをhoverするとopacityが実行されて透明化する
- サイドバーのwidthを40%に調整
- transitionプロパティを指定して開始から終了までの自然なアニメーションを実現
- サイドバーのボタンをhoverするとtransform:skewが実行されボタンが斜めに傾くアニメーションとなるように傾斜角度を調整(transformの使い方については【transform完全網羅】hoverで動き出す!transformを網羅できるCSSボタンアニメーション16選)
2. サイドバーが超拡大しながらスライド表示されるハンバーガーメニュー
動きは下の画像のような感じになります
コードを見る
<div>
<div class="hamburger">
<div class="borders">
<a href="#sidemenu" class="hamburger-menu">
<div class="first-border"></div>
<div class="second-border"></div>
<div class="third-border"></div>
</a>
</div>
</div>
<header id="sidemenu" class="sidenavs">
<a href="#" class="close-btn">×</a>
<div class="sidebar-btn">
<p><a href="#">About</a></p>
<p><a href="#">Services</a></p>
<p><a href="#">Clients</a></p>
<p><a href="#">Contact</a></p>
</div>
</header>
</div>
.hamburger-menu div {
height: 5px;
background-color: black;
margin: 5px auto;
}
.hamburger-menu .first-border {
width: 25px;
/* メニューアイコンの線の長さを調整 */
}
.hamburger-menu .second-border {
width: 18px;
/* メニューアイコンの線の長さを調整 */
}
.hamburger-menu .third-border {
width: 12px;
/* メニューアイコンの線の長さを調整 */
}
.hamburger .borders {
padding-top:5px;
}
.hamburger {
width:52px;
height:50px;
border:2px solid white;
border-radius:10px;
/* ボーダーにradiusで丸みをつける */
transition: .5s;
/* アニメーションの時間を0.5秒に指定 */
opacity:1;
/* 透明度を指定 */
background:#f1f1f1;
}
.hamburger:hover {
opacity:0.5;
/* 透明度を指定 */
}
.hamburger + .sidenavs:target {
overflow-x: visible;
/* ボックスからはみ出る箇所をそのまま表示 */
width: 40%;
/* サイドメニューの幅 */
display:block;
transform:scale(1) translate(865px,0px);
/* 伸縮率とXY軸(横縦)の移動距離を指定 */
}
.sidenavs:target {
overflow-x: hidden;
/* ボックスからはみ出る箇所を隠す */
width: 0;
transition-duration:1.2s;
/* アニメーションの時間を0.5秒に指定 */
}
/* ハンバーガーメニュー表示時 */
.sidenavs {
height: 100%;
width: 0;
position: fixed;
/* 画像の配置を指定 */
z-index: 1;
top: 0;
left: 0;
background-image:url("https://source.unsplash.com/1000x802");
/* サイドバーの背景画像を指定 */
overflow-x: hidden;
/* 横スクロールを無効にする */
padding-top: 60px;
transition: 0.8s;
/* アニメーションの時間を0.5秒に指定 */
transform:scale(0) translate(0px,2000px);
/* 伸縮率とXY軸(横縦)の移動距離を指定 */
}
/* ハンバーガーメニュー表示時のリンク */
.sidenavs a {
text-decoration: none;
font-size: 45px;
/* 文字サイズを大きめに調整 */
color: white;
display: block;
transition: 0.5s;
/* アニメーションの時間を0.5秒に指定 */
font-weight:bold;
}
/* マウスオーバー後のリンク */
.sidebar-btn a {
transform:skewX(0deg);
/* X軸の傾斜角度を指定 */
}
.sidebar-btn a:hover {
color: black;
transform:skewX(-20deg);
/* X軸の傾斜角度を指定 */
}
.sidenavs p {
margin:20px 80px;
/* サイドバーのボタン位置を調整 */
width:250px;
}
/* クローズボタン */
.sidenavs .close-btn {
position: absolute;
/* 親要素との絶対位置を指定 */
top: 0;
right: 25px;
font-size: 36px;
margin-left: 50px;
}
ここがポイント!
- 長さの異なるボーダーを縦に並べることで「ドネルメニュー(Doner Menu)」を実現
- ドネルメニューをクリックするとtransform:scale, translateXYが実行されサイドバーが拡大&下から斜め上にスライドしながら現れるアニメーションを実現
- ドネルメニューをhoverするとopacityが実行されて透明化する
- サイドバーのwidthを40%に調整
- transitionプロパティを指定して開始から終了までの自然なアニメーションを実現
- サイドバーのボタンをhoverするとtransform:skewが実行されボタンが斜めに傾くアニメーションとなるように傾斜角度を調整(transformの使い方については【transform完全網羅】hoverで動き出す!transformを網羅できるCSSボタンアニメーション16選)
3. サイドバーが超拡大&回転しながらスライド表示されるハンバーガーメニュー
動きは下の画像のような感じになります
コードを見る
<div>
<div class="hamburger">
<div class="borders">
<a href="#sidemenu" class="hamburger-menu">
<div class="first-border"></div>
<div class="second-border"></div>
<div class="third-border"></div>
</a>
</div>
</div>
<header id="sidemenu" class="sidenavs">
<a href="#" class="close-btn">×</a>
<div class="sidebar-btn">
<p><a href="#">About</a></p>
<p><a href="#">Services</a></p>
<p><a href="#">Clients</a></p>
<p><a href="#">Contact</a></p>
</div>
</header>
</div>
.hamburger-menu div {
height: 5px;
background-color: black;
margin: 5px auto;
}
.hamburger-menu .first-border {
width: 25px;
/* メニューアイコンの線の長さを調整 */
}
.hamburger-menu .second-border {
width: 18px;
/* メニューアイコンの線の長さを調整 */
}
.hamburger-menu .third-border {
width: 12px;
/* メニューアイコンの線の長さを調整 */
}
.hamburger .borders {
padding-top:5px;
}
.hamburger {
width:52px;
height:50px;
border:2px solid white;
border-radius:10px;
/* ボーダーにradiusで丸みをつける */
transition: .5s;
/* アニメーションの時間を0.5秒に指定 */
opacity:1;
/* 透明度を指定 */
background:#f1f1f1;
}
.hamburger:hover {
opacity:0.5;
/* 透明度を指定 */
}
.hamburger + .sidenavs:target {
overflow-x: visible;
/* ボックスからはみ出る箇所をそのまま表示 */
width: 40%;
/* サイドメニューの幅 */
display:block;
transform:scale(1) translate(865px,0px) rotate(360deg);
/* 伸縮率とXY軸(横縦)の移動距離とZ軸の回転角度を指定 */
}
.sidenavs:target {
overflow-x: hidden;
/* ボックスからはみ出る箇所を隠す */
width: 0;
transition-duration: .8s;
/* アニメーションの時間を0.5秒に指定 */
}
/* ハンバーガーメニュー表示時 */
.sidenavs {
height: 100%;
width: 0;
position: fixed;
/* 画像の配置を指定 */
z-index: 1;
top: 0;
left: 0;
background-image:url("https://source.unsplash.com/1000x801");
/* サイドバーの背景画像を指定 */
overflow-x: hidden;
/* 横スクロールを無効にする */
padding-top: 60px;
transition: 0.8s;
/* アニメーションの時間を0.5秒に指定 */
transform:scale(-0.1) translate(0px,750px) rotate(-360deg);
/* 伸縮率とXY軸(横縦)の移動距離とZ軸の回転角度を指定 */
}
/* ハンバーガーメニュー表示時のリンク */
.sidenavs a {
text-decoration: none;
font-size: 45px;
/* 文字サイズを大きめに調整 */
color: white;
display: block;
transition: 0.5s;
/* アニメーションの時間を0.5秒に指定 */
font-weight:bold;
}
/* マウスオーバー後のリンク */
.sidebar-btn a {
transform:skewX(0deg);
/* X軸の傾斜角度を指定 */
}
.sidebar-btn a:hover {
color: black;
transform:skewX(-20deg);
/* X軸の傾斜角度を指定 */
}
.sidenavs p {
margin:20px 80px;
/* サイドバーのボタン位置を調整 */
width:250px;
}
/* クローズボタン */
.sidenavs .close-btn {
position: absolute;
/* 親要素との絶対位置を指定 */
top: 0;
right: 25px;
font-size: 36px;
margin-left: 50px;
}
ここがポイント!
- 長さの異なるボーダーを縦に並べることで「ドネルメニュー(Doner Menu)」を実現
- ドネルメニューをクリックするとtransform:scale, translateXYが実行されサイドバーが拡大&下から斜め上にスライドすることに加えて、transform:rotateが実行されサイドバーが手裏剣のように回転しながら現れるアニメーションを実現
- ドネルメニューをhoverするとopacityが実行されて透明化する
- サイドバーのwidthを40%に調整
- transitionプロパティを指定して開始から終了までの自然なアニメーションを実現
- サイドバーのボタンをhoverするとtransform:skewが実行されボタンが斜めに傾くアニメーションとなるように傾斜角度を調整(transformの使い方については【transform完全網羅】hoverで動き出す!transformを網羅できるCSSボタンアニメーション16選)
【独学なら】Udemy講座で『稼げるWeb制作スキル』を完全マスター|オンライン講座
- Web制作スキルを絶対に完全マスターしたい・・
- 独学でできるだけ安い方法で習得したい・・
- 初心者でも独学でWebデザイナー・Webエンジニアになれるかな・・
こんな疑問や不安をお持ちの方は今回紹介するUdemy講座に目を通しておいて損はありません。
「Udemyって何?」という方もいらっしゃるかと思いますので簡単にUdemyを使うメリットを説明いたします。
【Udemyを使うべき5つの理由】
- 新規受講生割引
Udemy新規登録で6時間限定のセール発生。ほぼ全講座が90%割引
- 30日間の返金保証
理由問わず30日間の返金保証。気に入らないなら即返金
- 動画の速度調整
0.5, 0.75, 1, 1.25, 1.5, 1.75, 2倍で速度を調整可能。学習時間の短縮
- 講座購入後の学習期限なし
Udemyアカウントを持っている限り、購入後はいつまでも講座を受講できる
- 毎月不定期に発生する大特価セール
通常価格の90%OFFが基本。セール中を狙って購入するのが鉄則
筆者自身、Web制作の必須スキルのほとんどをUdemy講座で身につけました。
ありがたいことに、Udemyで応用力のあるスキルを身につけたことで実際の案件対応ではほとんど困ることはありませんでした。
またTwitterのDMで相談を受けることが多いのですが、Webデザイン初学者にはUdemy講座で学習するように薦めています。
理由としては安易にスクールや高額商材に手を出すよりも確実にスキルを習得できるからです。
「安かろう悪かろう」
確かに普通ならそうかもしれません。
しかしUdemyは元値20,000円以上する講座がほとんどです。
その高額な講座でも、Udemyを初めて利用する方なら最大95%OFFで受講できます。
未経験からプロのWebデザイナーになる! 400レッスン以上の完全マスターコース
まとめ
HTMLとCSSを使うと今回紹介したようなことも簡単にできてしまうんです。
『CSSアニメーションやエフェクトだけではなくWebサイトをゼロから作って稼いでいきたい』
『3ヶ月くらいで最低でも月10万円は稼ぎたい』
『営業とかやったことないけどWeb制作だけで稼いでいきたい』
こんな方のためにWeb制作で月80万超稼ぐ筆者が自身の経験を踏まえて【失敗しない】Webデザイナー(Web制作)独学ロードマップを執筆しました。
少額の投資で3ヶ月後には月10〜30万稼げるよう設計してあります。
(学習教材やAdobeなど最低限のコストはかかります)
ロードマップの構成
- Web制作に特化した『確実に身に付く』学習方法
- Web制作会社が喰いつく理想的なポートフォリオの作成手順
- 返信率10%以上!Web制作会社へのメール営業
有料公開も考えましたが「Webデザイナー(Web制作)はまだまだ稼げることを証明したい!」という思いが強く、期間限定で無料公開をすることにしました。
2021年半ばまでは無料公開する予定ではありますが前倒しすることもあり得ますのでご興味ある方はお早めにどうぞ!