CSSアニメーションを使ってアイコンを動かしてみたいと思います。
以下、気をつけた点。
- CSSアニメーションに非対応のブラウザでもアイコンとして成立している
- 過剰なマークアップをしない
現実的に使えそうな路線で頑張ってみました。
アニメーションさせるのはこの「New!」と書かれたアイコン。
New!
.iconNew{
width: 3em;
text-align: center;
background: #54bb00;
color: #fff;
font-weight: bold;
text-shadow: 0 1px 0 #3f3f3f;
margin: 0 25px 25px 0;
letter-spacing: 2px;
padding-left: 4px;
}
以下、Safariかgoogle Chromeでご覧ください。
New!
.iconNew.arrange01 span{
display: block;
-webkit-animation-duration: 1.5s;
-webkit-animation-timing-function: ease-in-out;
-webkit-animation-iteration-count: infinite;
-webkit-transform-origin: middle center;
-webkit-transform: scale(1);
-webkit-animation-name: outer01;
}
@-webkit-keyframes outer01 {
0%{
-webkit-transform: scale(1);
}
70% {
-webkit-transform: scale(1);
}
85% {
-webkit-transform: scale(1.4);
}
100% {
-webkit-transform: scale(1);
}
}
New!
.iconNew.arrange02{
-webkit-animation-duration: 4s;
-webkit-animation-timing-function: ease-in-out;
-webkit-animation-iteration-count: infinite;
-webkit-transform-origin: middle center;
-webkit-animation-name: outer02;
background: #54bb00;
}
@-webkit-keyframes outer02 {
0%{
background: #54bb00;
}
30%{
background: #54bb00;
}
50% {
background: #98f139;
-webkit-box-shadow: 0 0 7px #98f139;
}
70%{
background: #54bb00;
}
100% {
background: #54bb00;
}
}
New!
.iconNew.arrange03{
position: relative;
bottom: 0;
-webkit-animation-duration: 1.5s;
-webkit-animation-timing-function: ease-in-out;
-webkit-animation-iteration-count: infinite;
-webkit-transform-origin: middle center;
-webkit-animation-name: outer03;
-webkit-transform: rotate(0deg);
}
@-webkit-keyframes outer03 {
0%{
-webkit-transform: rotate(0deg);
bottom: 0;
}
50% {
-webkit-transform: rotate(0deg);
bottom: 0;
}
60% {
-webkit-transform: rotate(5deg);
bottom: 5px;
}
70% {
-webkit-transform: rotate(-5deg);
}
80% {
-webkit-transform: rotate(4deg);
}
90% {
-webkit-transform: rotate(-3deg);
}
100% {
-webkit-transform: rotate(0deg);
}
}
New!
.iconNew.arrange04{
overflow: hidden;
}
.iconNew.arrange04 span{
-webkit-animation-duration: 6s;
-webkit-animation-timing-function: linear;
-webkit-animation-iteration-count: infinite;
-webkit-transform-origin: middle center;
-webkit-animation-name: outer04;
position: relative;
left: 0;
}
@-webkit-keyframes outer04 {
0%{
left: 3em;
}
100% {
left: -3em;
}
}
New!
.iconNew.arrange05{
-webkit-animation-duration: 4s;
-webkit-animation-timing-function: ease-in;
-webkit-animation-iteration-count: infinite;
-webkit-transform-origin: bottom center;
-webkit-animation-name: outer05;
}
@-webkit-keyframes outer05 {
0%{
-webkit-transform: scale(1, 1);
}
48%{
-webkit-transform: scale(1, 1);
}
50%{
-webkit-transform: scale(1.1, 0.9);
}
53%{
-webkit-transform: scale(0.9, 1.1) translate(0, -5px);
}
57.5%{
-webkit-transform: scale(1, 1) translate(0, -3px);
}
59%{
-webkit-transform: scale(1, 1) translate(0, 0px);
}
100% {
-webkit-transform: scale(1, 1);
}
}
過剰なマークアップになってしまいますが、一文字ずつspanで区切ればこんなことも。
New!
.iconNew02.arrange01,
.iconNew02.arrange01 span{
-webkit-animation-duration: 1.5s;
-webkit-animation-timing-function: ease-in-out;
-webkit-animation-iteration-count: infinite;
}
.iconNew02.arrange01 span{
display: inline-block;
-webkit-transform-origin: middle center;
-webkit-transform: scale(1);
-webkit-animation-name: letter01;
background: #54bb00;
color: #fff;
font-weight: bold;
padding: 4px;
}
.iconNew02.arrange01 span.letter02{
-webkit-animation-name: letter02;
-webkit-animation-delay: 0.2s;
}
.iconNew02.arrange01 span.letter03{
-webkit-animation-name: letter03;
-webkit-animation-delay: 0.4s;
}
.iconNew02.arrange01 span.letter04{
-webkit-animation-name: letter04;
-webkit-animation-delay: 0.6s;
}
@-webkit-keyframes letter01 {
0%{
-webkit-transform: scale(1);
}
70% {
-webkit-transform: scale(1);
}
85% {
-webkit-transform: scale(1.5);
}
100% {
-webkit-transform: scale(1);
}
}
@-webkit-keyframes letter02 {
0%{
-webkit-transform: scale(1);
}
70% {
-webkit-transform: scale(1);
}
85% {
-webkit-transform: scale(1.5);
}
100% {
-webkit-transform: scale(1);
}
}
@-webkit-keyframes letter03 {
0%{
-webkit-transform: scale(1);
}
70% {
-webkit-transform: scale(1);
}
85% {
-webkit-transform: scale(1.5);
}
100% {
-webkit-transform: scale(1);
}
}
@-webkit-keyframes letter04 {
0%{
-webkit-transform: scale(1);
}
70% {
-webkit-transform: scale(1);
}
85% {
-webkit-transform: scale(1.5);
}
100% {
-webkit-transform: scale(1);
}
}
New!
.iconNew02.arrange02,
.iconNew02.arrange02 span{
-webkit-animation-duration: 1.5s;
-webkit-animation-timing-function: ease-out;
-webkit-animation-iteration-count: infinite;
}
.iconNew02.arrange02 span{
display: inline-block;
-webkit-transform-origin: middle center;
-webkit-transform: scale(1);
-webkit-animation-name: letter01b;
background: #54bb00;
color: #fff;
font-weight: bold;
padding: 4px;
position: relative;
bottom: 0;
}
.iconNew02.arrange02 span.letter02{
-webkit-animation-name: letter02b;
-webkit-animation-delay: 0.2s;
}
.iconNew02.arrange02 span.letter03{
-webkit-animation-name: letter03b;
-webkit-animation-delay: 0.4s;
}
.iconNew02.arrange02 span.letter04{
-webkit-animation-name: letter04b;
-webkit-animation-delay: 0.6s;
}
@-webkit-keyframes letter01b {
0%{
bottom: 0;
}
70% {
bottom: 0;
}
85% {
bottom: 7px;
}
100% {
bottom: 0;
}
}
@-webkit-keyframes letter02b {
0%{
bottom: 0;
}
70% {
bottom: 0;
}
85% {
bottom: 7px;
}
100% {
bottom: 0;
}
}
@-webkit-keyframes letter03b {
0%{
bottom: 0;
}
70% {
bottom: 0;
}
85% {
bottom: 7px;
}
100% {
bottom: 0;
}
}
@-webkit-keyframes letter04b {
0%{
bottom: 0;
}
70% {
bottom: 0;
}
85% {
bottom: 7px;
}
100% {
bottom: 0;
}
}
ここまでできて感動するものの、実際なかなか使える機会がないですよね。
ちょっと悔しいので、今公開中のmixiアプリの中でCSSアニメーションを使ってみました。
むだづかい告白帳
Safariで遊んでみてください。プロフィールアイコンがぴょこんぴょこんします。
お知らせ
ギャル男と一緒に鎌倉で働きませんか?
マークアップエンジニア募集中です!!!!!!!!
