CSS3アニメーションのおさらいとローディングアイコン
「CSS3でつくるローディングアイコン」っていうのを何も考えずに作ったんですけど、同じこと考える人なんかたくさんいるので、1年くらい前から色々存在してました・・・でもせっかくつくったので、もうありますけど、公開しておきます。
あ、せっかくなのでCSS3アニメーションをおさらいしましょう!(今おもいついたから強引につかったとこだけ)
CSS3アニメーションのおさらい
ご存知の通り、アニメーションは今のところWebkitだけで実装されいるので、サンプルはWebkit系ブラウザでみてください。
ざっくり書いたので、説明していない項目もあるし、間違いあるかも。あると思います。指摘してください。草稿しっかり読めっていう話なんですけど・・・ざっくりしか読んでません ![]()
W3CのWorkingDraft – CSS Animations Module Level 3
草稿にはもちろんprefixの”@-webkit-”は含まれてません。
Keyframes
基本的にWebkit用に”@-webkit-”のprefixを付けます。
@-webkit-keyframes hoge {
}
のように、hogeのところにアニメーション名を入れて定義します。Keyframesの指定方法は
@-webkit-keyframes hogefuga {
0% { hoge }
50% { fuga }
100% { piyo }
}
みたいに、アニメーションを細かく%で指定する方法や
@-webkit-keyframes hogepiyo {
from { hoge }
to { fuga }
}
みたいに、fromとtoで指定する2つの方法があります。
Keyframesは、下記のように”-webkit-transform”やopacity、top、leftなど数値を伴うCSSプロパティが使えます。background-colorなどの色も可。
@-webkit-keyframes rotate {
0% { -webkit-transform: rotate(0); }
100% { -webkit-transform: rotate(360deg); }
}
@-webkit-keyframes fade {
0% { opacity: 1; }
50% { opacity: .2; }
100% { opacity: 1; }
}
Animation behavior
どういうアニメーションをするかをKeyframesで指定しておいたので、実行する環境を用意します。
いくつかあるのですが、ここでは”duration”, “timing-function”, “count”, “name”の指定方法だけ解説しておきます。対象要素にbehaviorプロパティを割り振ります。
duration
durationは”○s”で指定、1以下は0.8や.8のように秒で指定します。デフォルトは0。
webkit-animation-duration: .8s;
timing-function
jQueryの.animate()メソッドで言うところのeasingです。
ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier(, , , )
の6つが利用できます。デフォルトはease。
-webkit-animation-timing-function: linear;
iteration-count
実行回数を指定できます。単純に数字で指定でき、リピートしたい場合は、infiniteを指定します。デフォルトは1。
-webkit-animation-iteration-count: infinite;
name
実行するKeyframe名を指定します。これが指定されているとアニメーションが実行されます。
div.cssloading.justLoading {
-webkit-animation-name: fade, rotate;
}
CSS3 Loading
さらっとおさらいしたところで、ローディングアイコンを書いてみましょう。本当はこっちメインだったのに、もう手抜き。説明はソース見てくださいまし。
Circular
まずは超ベーシックはくるくる回転タイプ。
CSS loader – kurukuru – - jsdo.it – share JavaScript, HTML5 and CSS
アニメーション以外
div.cssloading {
width: 48px;
height: 48px;
position: relative;
}
div.cssloading span {
border-radius: 5px;
-webkit-border-radius: 5px;
display: block;
width: 10px;
height: 10px;
position: absolute;
}
div.cssloading span.loadingCircle1 {
top: 3px;
left: 19px;
background: #000;
}
div.cssloading span.loadingCircle2 {
top: 7px;
left: 30px;
}
div.cssloading span.loadingCircle3 {
top: 19px;
left: 35px;
}
div.cssloading span.loadingCircle4 {
top: 30px;
left: 30px;
}
div.cssloading span.loadingCircle5 {
top: 35px;
left: 19px;
background: #CACACA;
}
div.cssloading span.loadingCircle6 {
top: 30px;
left: 8px;
background: #979797;
}
div.cssloading span.loadingCircle7 {
top: 19px;
left: 3px;
background: #676767;
}
div.cssloading span.loadingCircle8 {
top: 7px;
left: 8px;
background: #343434;
}
アニメーション該当箇所のみ
/* 回転する name: rotate */
@-webkit-keyframes rotate {
0% { -webkit-transform: rotate(0); }
100% { -webkit-transform: rotate(360deg); }
}
/* フェードエフェクト name: fade */
@-webkit-keyframes fade {
0% { opacity: 1; }
50% { opacity: .2; }
100% { opacity: 1; }
}
/* アニメーションプロパティのセット */
div.cssloading {
-webkit-animation-duration: .8s;
-webkit-animation-timing-function: linear;
-webkit-animation-iteration-count: infinite;
}
/* classに"justLoading"が付いているときは
"fade", "rotate"のアニメーションを行う */
div.cssloading.justLoading {
-webkit-animation-name: fade, rotate;
}
Horizontal
次は横にぼいんぼいんはねる玉っぽいの
CSS loader – boinboin – - jsdo.it – share JavaScript, HTML5 and CSS
アニメーション以外
div.cssloading {
width: 200px;
height: 40px;
position: relative;
-webkit-animation-duration: 1s;
-webkit-animation-timing-function: ease-in;
-webkit-animation-iteration-count: infinite;
}
div.cssloading.justLoading {
-webkit-animation-name: move, bound, fade;
}
div.cssloading span {
border-radius: 20px;
-webkit-border-radius: 20px;
-moz-border-radius: 20px;
display: block;
width: 40px;
height: 40px;
position: absolute;
left: 80px;
background: #000;
}
アニメーション該当箇所のみ
/* ぼいんぼいん name: bound */
@-webkit-keyframes bound {
0% { -webkit-transform: scale(1.5, .5); }
10% { -webkit-transform: scale(1, 1); }
25% { -webkit-transform: scale(.5, 1); }
50% { -webkit-transform: scale(1.5, .5); }
60% { -webkit-transform: scale(1, 1); }
75% { -webkit-transform: scale(.5, 1); }
100% { -webkit-transform: scale(1.5, .5); }
}
/* 横移動 name: move */
@-webkit-keyframes move {
0% { left: 0px; }
10% { left: 70px; }
25% { left: 80px; }
35% { left: 70px; }
50% { left: 0px; }
60% { left: -70px; }
75% { left: -80px; }
85% { left: -70px; }
100% { left: 0px; }
}
/* アニメーションプロパティのセット */
div.cssloading {
-webkit-animation-duration: 1s;
-webkit-animation-timing-function: ease-in;
-webkit-animation-iteration-count: infinite;
}
/* classに"justLoading"が付いているときは
"fade", "rotate"のアニメーションを行う */
div.cssloading.justLoading {
-webkit-animation-name: move, bound, fade;
}
そんなわけで
ローディングアイコンメインのはずが、かぶったからおさらいメインになったという話。
Trackbacks: 0
- Trackback URL for this entry
- Listed below are links to weblogs that reference
- CSS3アニメーションのおさらいとローディングアイコン from 5509
Leave a comment