Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
脱JavaScript! CSSで作るアニメーション
Search
sizucca
June 24, 2015
Design
0
50
脱JavaScript! CSSで作るアニメーション
社内勉強会LTで「CSS3 のプロパティ transition と animation でのアニメーションの作り方」を話した時のスライド。
sizucca
June 24, 2015
Tweet
Share
More Decks by sizucca
See All by sizucca
BtoB SaaSプロダクトで「機能する」デザインシステムを目指して
sizucca
5
5.5k
「プロダクトとユーザーをつなぐ」BtoB SaaSデザインの面白さ
sizucca
2
2.5k
アンドパッドのデザインシステムの今までとこれから
sizucca
4
3.4k
PowerPointのここがスゴイ!!
sizucca
0
81
スライド資料のデザインシステムをつくっている話
sizucca
0
52
UXデザインを組織に導入する
sizucca
0
80
社内のプロダクト開発でデザインスプリントを実践して分かったこと
sizucca
0
51
効果測定の効率化のために行った3つのこと
sizucca
0
50
Other Decks in Design
See All in Design
PMとデザイナーはニコイチ! メリットと具体的なアクション10選
mosmos_noki
2
1.1k
美しいUIを作るために デザイナーが意識している ちょっとした考え方
yuichi_hara7
51
32k
アフォーダンスとシグニファイア
ryokanakai
1
320
利用者が離れないUX/UIデザイン 長く使われる業務アプリデザインのポイント
ncdc
3
170
Findy - デザイナー向け会社紹介 / Hiring Findy's Designers
findyinc
6
49k
Improve a service workshop
mastervicedesign
1
110
若手デザイナーチームが手がける CADC2024クリエイティブディレクションの全貌 / opening-design
cyberagentdevelopers
PRO
1
620
シームレスな連携を実現するデザイントークンの設計と構築
amishiratori
0
360
ブランドづくりの双視点 - GUILD #31 ブランディング勉強会
yampuu
0
110
Designship2024 Panel Discussion インハウスデザイナーは 何をデザインしているか、するべきか で使用したスライドを公開します。
kiyoshifuwa
0
2.1k
ゲーム開発における、Figma活用事例の紹介 / applibot-figma
cyberagentdevelopers
PRO
2
330
Design System for training program
mct
0
280
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
327
21k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
Building Better People: How to give real-time feedback that sticks.
wjessup
364
19k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
65k
Making Projects Easy
brettharned
115
5.9k
Typedesign – Prime Four
hannesfritz
40
2.4k
RailsConf 2023
tenderlove
29
900
How to train your dragon (web standard)
notwaldorf
88
5.7k
VelocityConf: Rendering Performance Case Studies
addyosmani
325
24k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.2k
The Cost Of JavaScript in 2023
addyosmani
45
6.7k
Into the Great Unknown - MozCon
thekraken
32
1.5k
Transcript
脱 JavaScript! CSSで作るアニメーション 2015/06/24 @sizucca
UI Designer @sizucca or @sizucca_̲ ⾃自⼰己紹介
どうやって動かすの?
(1) transition (2) animation どうやって動かすの? ➡ 簡単なアニメーション ➡ 複雑なアニメーション
(1) transition
transition 始点と終点 2点間のデザインを アニメーションで変化させる事ができる 始点 終点
transition <body> <img class="giraffe" src="images/giraffe.png" width="400" height="688" alt=“”> </body> .giraffe
{ position: relative; top: 20px; left: 20px; opacity: 0.3; -webkit-transition: 4s all ease 2s; transition: 4s all ease 2s; } .giraffe:hover { left: 1000px; opacity: 1; }
transition .giraffe { position: relative; top: 20px; left: 20px; opacity:
0.3; -webkit-transition: 4s all ease 2s; transition: 4s all ease 2s; } .giraffe:hover { left: 1000px; opacity: 1; } top: 20px left: 20px opacity: 0.3
transition .giraffe { position: relative; top: 20px; left: 20px; opacity:
0.3; -webkit-transition: 4s all ease 2s; transition: 4s all ease 2s; } .giraffe:hover { left: 1000px; opacity: 1; } top: 20px left: 20px opacity: 0.3 再⽣生時間 プロパティ 補間⽅方法 ディレイ
transition .giraffe { position: relative; top: 20px; left: 20px; opacity:
0.3; -webkit-transition: 4s all ease 2s; transition: 4s all ease 2s; } .giraffe:hover { left: 1000px; opacity: 1; } left: 1000px opacity: 1
transition .giraffe { position: relative; top: 20px; left: 20px; opacity:
0.3; -webkit-transition: 4s all ease 2s; transition: 4s all ease 2s; } .giraffe:hover { left: 1000px; opacity: 1; } left: 1000px opacity: 1 left: 20px 始点 終点
(2) animation
キーフレームを利利⽤用したアニメーションが設定できる キーフレームは アニメーションで変化させたいデザインを、 始点と終点 の間に複数設定する事ができる animation 12.5% 25% 37.5% 50%
87.5% 75% 62.5% 始点:0% 終点:100%
animation <body> <img class="bee" src=“images/bee.png" width="120" height="120" alt=“”> </body> .bee
{ position: relative; margin: 2.5em; font-size: 80px; -webkit-animation: guruguru 1s linear infinite; animation: guruguru 1s liner infinite; } @-webkit-keyframes guruguru { 0% { top: -2em; left: 0; -webkit-transform: rotate(90deg); transform: rotate(90deg); } 12.5% { top: -1.42em; left: 1.42em; -webkit-transform: rotate(135deg); transform: rotate(135deg); } 25% { top: 0; left: 2em; -webkit-transform: rotate(180deg); transform: rotate(180deg); } 37.5% { top: 1.42em; left: 1.42em; -webkit-transform: rotate(225deg); transform: rotate(225deg); } 50% { top: 2em; left: 0; -webkit-transform: rotate(270deg); transform: rotate(270deg); } 62.5% { top: 1.42em; left: -1.42em; -webkit-transform: rotate(315deg); transform: rotate(315deg); } 75% { top: 0; left: -2em; -webkit-transform: rotate(360deg); transform: rotate(360deg); } 87.5% { top: -1.42em; left: -1.42em; -webkit-transform: rotate(405deg); transform: rotate(405deg); } 100% { top: -2em; left: 0; -webkit-transform: rotate(450deg); transform: rotate(450deg); } } ×2倍くらい …
animation .bee { position: relative; margin: 2.5em; font-size: 80px; -webkit-animation:
guruguru 1s linear infinite; animation: guruguru 1s liner infinite; } @-webkit-keyframes guruguru { 0% { top: -2em; left: 0; -webkit-transform: rotate(90deg); transform: rotate(90deg); } 12.5% { top: -1.42em; left: 1.42em; -webkit-transform: rotate(135deg); transform: rotate(135deg); } 25% { top: 0; left: 2em; -webkit-transform: rotate(180deg); transform: rotate(180deg); } 37.5% { top: 1.42em; left: 1.42em; -webkit-transform: rotate(225deg); transform: rotate(225deg); } margin: 2.5em 1em = 80px 2.5em = 200px
animation .bee { position: relative; margin: 2.5em; font-size: 80px; -webkit-animation:
guruguru 1s linear infinite; animation: guruguru 1s liner infinite; } @-webkit-keyframes guruguru { 0% { top: -2em; left: 0; -webkit-transform: rotate(90deg); transform: rotate(90deg); } 12.5% { top: -1.42em; left: 1.42em; -webkit-transform: rotate(135deg); transform: rotate(135deg); } 25% { top: 0; left: 2em; -webkit-transform: rotate(180deg); transform: rotate(180deg); } top: -1.42em; … 100% { top: -2em; left: 0; -webkit-transform: rotate(450deg); transform: rotate(450deg);
animation .bee { position: relative; margin: 2.5em; font-size: 80px; -webkit-animation:
guruguru 1s linear infinite; animation: guruguru 1s liner infinite; } @-webkit-keyframes guruguru { 0% { top: -2em; left: 0; -webkit-transform: rotate(90deg); transform: rotate(90deg); } 12.5% { top: -1.42em; left: 1.42em; -webkit-transform: rotate(135deg); transform: rotate(135deg); } 25% { top: 0; left: 2em; -webkit-transform: rotate(180deg); transform: rotate(180deg); } 37.5% { top: 1.42em; left: 1.42em; -webkit-transform: rotate(225deg); transform: rotate(225deg); }
animation .bee { position: relative; margin: 2.5em; font-size: 80px; -webkit-animation:
guruguru 1s linear infinite; animation: guruguru 1s liner infinite; } @-webkit-keyframes guruguru { 0% { top: -2em; left: 0; -webkit-transform: rotate(90deg); transform: rotate(90deg); } 12.5% { top: -1.42em; left: 1.42em; -webkit-transform: rotate(135deg); transform: rotate(135deg); } 25% { top: 0; left: 2em; -webkit-transform: rotate(180deg); transform: rotate(180deg); } 37.5% { top: 1.42em; left: 1.42em; -webkit-transform: rotate(225deg); transform: rotate(225deg); }
animation .bee { position: relative; margin: 2.5em; font-size: 80px; -webkit-animation:
guruguru 1s linear infinite; animation: guruguru 1s liner infinite; } @-webkit-keyframes guruguru { 0% { top: -2em; left: 0; -webkit-transform: rotate(90deg); transform: rotate(90deg); } 12.5% { top: -1.42em; left: 1.42em; -webkit-transform: rotate(135deg); transform: rotate(135deg); } 25% { top: 0; left: 2em; -webkit-transform: rotate(180deg); transform: rotate(180deg); } 37.5% { top: 1.42em; left: 1.42em; -webkit-transform: rotate(225deg); transform: rotate(225deg); }
animation .bee { position: relative; margin: 2.5em; font-size: 80px; -webkit-animation:
guruguru 1s linear infinite; animation: guruguru 1s liner infinite; } @-webkit-keyframes guruguru { 0% { top: -2em; left: 0; -webkit-transform: rotate(90deg); transform: rotate(90deg); } 12.5% { top: -1.42em; left: 1.42em; -webkit-transform: rotate(135deg); transform: rotate(135deg); } 25% { top: 0; left: 2em; -webkit-transform: rotate(180deg); transform: rotate(180deg); } top: -1.42em; … 100% { top: -2em; left: 0; -webkit-transform: rotate(450deg); transform: rotate(450deg);
animation .bee { position: relative; margin: 2.5em; font-size: 80px; -webkit-animation:
guruguru 1s linear infinite; animation: guruguru 1s liner infinite; } @-webkit-keyframes guruguru { 0% { top: -2em; left: 0; -webkit-transform: rotate(90deg); transform: rotate(90deg); } 12.5% { top: -1.42em; left: 1.42em; -webkit-transform: rotate(135deg); transform: rotate(135deg); } 25% { top: 0; left: 2em; -webkit-transform: rotate(180deg); transform: rotate(180deg); } 37.5% { top: 1.42em; left: 1.42em; -webkit-transform: rotate(225deg); transform: rotate(225deg); } キーフレーム名 再⽣生時間 補間⽅方法 繰り返し
CSSアニメーションの メリット・デメリット
メリット • jQueryアニメーションより処理理が軽い(場合もある) • 柔軟にアニメーションが記述できる • JavaScriptが書けない⼈人でもアニメーションが 実装できる • デザインとUIアニメーションを同じCSSに書
く事ができるので、実装や修正がしやすい CSSアニメーション の メリット・デメリット
デメリット • clickイベントなどをトリガーにする事ができ ない(JavaScriptの助けが必要) • トリガーなどが書かれたJavaScriptと、アニ メーションが書かれたCSSが別管理理になる • コードの量量が多くなりがち •
すごく複雑なアニメーションはまだ難しい CSSアニメーション の メリット・デメリット
本当にJavaScriptより パフォーマンスいいの?
いい! (場合もある) ブラウザのJavaScript エンジンが何なのかとか JavaScriptの書き⽅方とか にもよるし CSS側もどんなプロパティ で動かしてるのかとか 動かす対象にどんだけ プロパティ積まれてる
のかとか アニメーション以外で 動いているJavaScriptが どんだけあるのかとか まぁでも シンプルなアニメーションなら CSSの⽅方が速い!
クロスブラウザ対応とか ⼤大丈夫なの?
⼤大丈夫! そもそもシンプルな アニメーションなら動いても 動かなくても動作に⽀支障ない っていうかそういう箇所に 使えばいいよね/ IE8とか7とか頑張る必要 そろそろ無くない? まぁクリティカルな動作は ともかくアニメーションだよ?
デザイナーは プログレッシブ エンハンスメント! を唱えた! ケースバイケースで 使い所を考えれば ⼤大丈夫!
まとめ
• CSS3で登場したプロパティ(特にtransitionとか animationとか)を使うと、今までJavaScriptでし かできなかったアニメーションがCSSでも可能に! • 簡単なアニメーションなら、CSS3で書いた⽅方がパ フォーマンスがいい! • JavaScriptと上⼿手く共存させると、デザイン修正 がしやすくなる!
• あと、タイトルに「脱JavaScript!」ってつけましたが、脱するつもりはありませんごめんなさい まとめ
エンジニアさんへ • CSSは(デザインとか考えずにプロパティだけ ⾒見見れば)怖くないよ! デザイナーさんへ • 簡単なjQuery(classの付け外しだけとか)な らそんなに怖くないよ! 最後に
ありがとうございました