原文: A Beginner's Introduction to CSS Anime
翻訳: A Beginner's Introduction to CSS Anime
翻訳者: dwqs
現在、GIF などのさまざまな形式でアニメーションを使用する Web サイトがますます増えています。 SVG、WebGL、背景ビデオなどアニメーションが Web で適切に使用されると、Web サイトに活力とインタラクティブ性が注入され、ユーザーに追加のフィードバックとエクスペリエンスが提供されます。
この記事では、CSS アニメーションについて紹介します。CSS アニメーションは、ブラウザーのアニメーションのサポートが向上するにつれてますます人気が高まっている効率的な方法です。基本を念頭に置いて、正方形から円に変化するアニメーションの例を手早く構築していきます。
まず効果を見てみましょう: http://jsfiddle.net/Web_Code/tchoafyh/embedded/result/
@keyframes とアニメーションの紹介
CSS アニメーションの主なコンポーネントは @keyframes です。ルールを使用してアニメーションを作成します。 @keyframes はタイムラインのさまざまなステージと考えてください。その中で、各ステージに異なる CSS 宣言を使用して、タイムラインのさまざまなステージをカスタマイズできます。
次に、CSS アニメーションを有効にするには、@keyframes をセレクターにバインドする必要があります。最後に、@keyframes 内のすべてのコードが段階的に解析され、段階に分けられ、元のスタイルが徐々に新しいスタイルに変更されます。
@keyframes要素
まず、アニメーションの区切りを定義します。 @keyframes の属性は次のとおりです:
1. 名前を選択します (この場合は tutsFade を選択します)
2. ステージ分割: 0% から 100% まで
3.各ステージで使用するスタイルは何ですか
例:
@keyframe tutsFade{ 0%{ opacity:1; } 100%{ opacity:0; }}
または:
@keyframe tutsFade{ from{ opacity:1; } to{ opacity:0; }}
abもあります短縮形:
@keyframe tutsFade{ to{ opacity:0; }}
上記のコード要素の透明度にトランジションを適用します。 効果: 1 から 0 まで、3 つのメソッドの最終効果は同じです。
Animation
Animation は @keyframes を呼び出すセレクターとして機能します。アニメーションには多くの属性があります:
1. アニメーション名: @keyframe の名前 (tutsFade など)
2. アニメーション期間: アニメーションの継続時間
3. 速度効果を設定します。アニメーションの、linear/ease-in/ease/ease-out/ease-in-out/cubic-bezier を選択できます
4. アニメーション遅延: アニメーションが開始されるまでの時間遅延
5. iteration-count: アニメーションのループ数
6. アニメーションの方向: アニメーションが逆方向に回転されるかどうかを指定します。Normal は、アニメーションが逆方向に回転されることを示します。 -fill-mode: アニメーションを逆方向に回転するか、再生前に回転するかを指定します。その後、そのアニメーション効果が表示されるかどうか (なし/前方/後方/両方)例:
.element { animation-name: tutsFade; animation-duration: 4s; animation-delay: 1s; animation-iteration-count: infinite; animation-timing-function: linear; animation-direction: alternate;}
:
.element { animation: tutsFade 4s 1s infinite linear alternate;}
プライベート プレフィックスを追加
最高のブラウザ サポートを確保するには、ブラウザ固有のプライベート プレフィックスを追加する必要があります: chrome&Safari:-webkit-;Firefox:-moz-;Opera:-o-;IE:- ms-
最高のブラウザサポートを確保します: chrome&Safari:-webkit-; Firefox:-o-;.element { -webkit-animation: tutsFade 4s 1s infinite linear alternate; -moz-animation: tutsFade 4s 1s infinite linear alternate; -ms-animation: tutsFade 4s 1s infinite linear alternate; -o-animation: tutsFade 4s 1s infinite linear alternate; animation: tutsFade 4s 1s infinite linear alternate;}
ブラウザベンダーのプライベートプレフィックスを取得するには、次のようにします。 http://css3please.com/ にアクセスして見つけてください。非常に豊富なリソースが提供されています。
複数のアニメーション
カンマで区切って複数のアニメーションを追加できます。
@-webkit-keyframes tutsFade { /* your style */ }@-moz-keyframes tutsFade { /* your style */ }@-ms-keyframes tutsFade { /* your style */ }@-o-keyframes tutsFade { /* your style */ }@keyframes tutsFade { /* your style */ }
四角から円へのアニメーションのチュートリアル
上記のルールを使用して、簡単なグラフィック アニメーションを作成します。合計 5 つのステージがあり、各ステージでは要素に対して異なる境界線の半径、回転、背景色が定義されます。
1. 基本要素
2. キーフレームを宣言する
5 つのステージを含む、square-to-circle という名前のキーフレーム要素を作成します。
3. アニメーションを適用します
定義したアニメーションを前の div に追加します
.element { animation: tutsFade 4s 1s infinite linear alternate, tutsRotate 4s 1s infinite linear alternate;}@keyframes tutsFade { to { opacity: 0; }}@keyframes tutsRotate { to { transform: rotate(180deg); }}
4. time 関数を使用してプライベート プレフィックスを追加します
最后要添加的一个动画属性是animation-timing-function,它对动画元素的速度、加速和减速进行定义。一个类似的工具是:CSS Easing Animation Tool,可以使用它来计算时间函数。
在案例中,我给动画添加了一个cubic-bezier函数。
div { width: 200px; height: 200px; background-color: coral; animation: square-to-circle 2s 1s infinite cubic-bezier(1,.015,.295,1.225) alternate; }
为了保证最好的浏览器支持,还必须添加私有前缀(没有添加前缀的代码如下)
div { width: 200px; height: 200px; background-color: coral; animation: square-to-circle 2s .5s infinite cubic-bezier(1,.015,.295,1.225) alternate;} @keyframes square-to-circle { 0% { border-radius:0 0 0 0; background:coral; transform:rotate(0deg); } 25% { border-radius:50% 0 0 0; background:darksalmon; transform:rotate(45deg); } 50% { border-radius:50% 50% 0 0; background:indianred; transform:rotate(90deg); } 75% { border-radius:50% 50% 50% 0; background:lightcoral; transform:rotate(135deg); } 100% { border-radius:50%; background:darksalmon; transform:rotate(180deg); }}
这个在FireFox显示会有点异常,为了在FireFox有绝佳的显示效果,可以给div添加如下样式
outline: 1px solid transparent;