Loading...

htmlコーディング 小棹制作所

この記事がよく読まれてます

tumblrでの企画など、お手伝いします
  • fullPage.js ページスクロールで紙芝居のように魅せるWebページが作れるjQueryプラグイン (37,191Views)
  • 初代から大幅にパワーアップして帰ってきた! Owl Carousel 2の紹介とかんたんな設置方法 (18,652Views)
  • 多分一番簡単!ドロワーメニューを実装するためのjQueryプラグイン「drawer」 (17,889Views)
  • [メモ]Macのメールアプリで自動転送(もしくはリダイレクト)設定をする方法 (16,303Views)
  • tumblrのオリジナルテーマ作成入門 tumblrの独自タグを理解しよう (15,940Views)
  • wow.jsとanimate.cssを組み合わせると、かんたんに、かっこいい動きがあるWebページを作れます。 (15,875Views)
  • スマートフォンサイトでよく見る横からニョキッと出現するスライドメニューの実装なら「Sidr」で (15,495Views)
  • 国産のtumblrポートフォリオ用テーマ “Illustfolio2″ がすごくいい! (11,786Views)
  • シンプルだから機能もデザインもかんたんにカスタマイズできるjQueryのカルーセルプラグイン “Owl Carousel” (11,209Views)
  • ミュージシャン・バンド・アーティスト用Webサイト作成のためのTumblrテーマを作ったので配布します (11,080Views)
  • 企業ホームページっぽいレイアウトのTumblrのテーマを作ったので無料配布します (10,677Views)
  • さくっとヘッダー固定のhtmlテーブルが作れるjQueryプラグイン「Fixed Header Table」 (10,671Views)
  • Twitter Bootstrapが3にアップグレードして、さらに使いやすくなった (10,325Views)
  • 翻訳機能をWebサイトに埋め込む方法 (10,224Views)
  • tumblrのオリジナルテーマをゼロから作るのは心が折れるので、スターターテーマを使おう (9,809Views)
  • Twitter Bootstrapの基礎 Twitter Bootstrapってなに? からモーダルウィンドウ作成まで (8,918Views)
  • 細かいカスタマイズができるCSSフレームワーク、”Gumby FRAMEWORK” (6,878Views)
  • Twitter BootstrapベースのWordPress無料テーマ “Roots” (6,609Views)
  • tumblrのテーマに無限スクロール機能を追加する方法 (5,893Views)
  • TwitterBootstrapでも採用されている、たぶんもっとも簡単なレスポンシブ対応テーブルの作り方 (5,497Views)
  • マーキー作成で学ぶ、CSS3アニメーション超入門

    2015年05月12日(火)
    1691Views

    この記事は執筆から1年以上経過しており、情報が古い可能性があります。

    CSSでマーキーを作成しつつ、CSS3アニメーションの基礎を解説します。

    マーキーとは

    マーキーは、むかーしむかしのWebサイトでよく見かけた、文字を横にスライドさせながら表示させる機能のことです。
    当時は<marquee>というhtmlタグを使って実装していましたが、htmlは文書構造を表現するものなので、アニメーションを設定するマーキーをhtmlで制御するというのはよろしくありません。

    CSS3では、アニメーションに関する機能が強化され、CSSだけでマーキーのような表現が可能になりました。
    今回は、マーキーを作成しながら、CSS3のアニメーション機能の基礎部分を解説します。

    サンプルコード

    See the Pen yNerpa by yujicosao (@yujicosao) on CodePen.

    各ブラウザのCSS3アニメーション対応状況

    CSS3アニメーションの各ブラウザ対応状況については、下記のWebページ内「CSS3 Animation」の項目でご確認いただけます。
    Can I use… Support tables for HTML5, CSS3, etc

    主要ブラウザでは、IEのバージョン9より前のバージョンが非対応になっています。
    それ以外のブラウザでは概ね、使用可能です。

    コード解説

    サンプルコードでは、すべてのブラウザに対応するため、CSSにベンダープレフィックスをつけています。
    各プロパティにある-webkit-、-moz-、-ms-、-o-がそれにあたります。
    これにより、chrome、ie、firefoxなど、複数のブラウザで同一の動作を実現します。
    ただ、これがあると、コードがながくなってしまい、解説をするには不便ということで、一度、webkit系ブラウザ以外を無視したコードを記述します。

    <code>p.marquee{
        -webkit-animation-name: marqueeAnimation;
        -webkit-animation-timing-function: linear;
        -webkit-animation-duration:10s;
        -webkit-animation-iteration-count: infinite;
      
        -moz-animation-name: marqueeAnimation;
        -moz-animation-timing-function: linear;
        -moz-animation-duration:10s;
        -moz-animation-iteration-count: infinite;
      
        -ms-animation-name: marqueeAnimation;
        -ms-animation-timing-function: linear;
        -ms-animation-duration:10s;
        -ms-animation-iteration-count: infinite;
      
        -o-animation-name: marqueeAnimation;
        -o-animation-timing-function: linear;
        -o-animation-duration:10s;
        -o-animation-iteration-count: infinite;
      
        animation-name: marqueeAnimation;
        animation-timing-function: linear;
        animation-duration:10s;
        animation-iteration-count: infinite;
      
        margin: 0;
        padding: 0;
        overflow: hidden;
        display: block;
        white-space: nowrap;
    }
    
    
    @-webkit-keyframes marqueeAnimation{
        0%{
            text-indent: 100%;
    }
        100%{
            text-indent: -50%;  
        }
    }
    @-moz-keyframes marqueeAnimation{
        0%{
            text-indent: 100%;
    }
        100%{
            text-indent: -50%;  
        }
    }
    @-ms-keyframes marqueeAnimation{
        0%{
            text-indent: 100%;
    }
        100%{
            text-indent: -50%;  
        }
    }
    @-O-keyframes marqueeAnimation{
        0%{
            text-indent: 100%;
    }
        100%{
            text-indent: -50%;  
        }
    }
    @keyframes marqueeAnimation{
        0%{
            text-indent: 100%;
    }
        100%{
            text-indent: -50%;  
        }
    }
    </code>

    See the Pen pJgYGz by yujicosao (@yujicosao) on CodePen.

    chrome以外のブラウザで見た際には、アニメーションが機能していないかもしれませんが、コードがスッキリして解説しやすくなりました。

    以下から、コード内のアニメーションに必要なCSS3要素を見ていきます。

    keyframes

    keyframesではアニメーション名の設定と、アニメーションの開始時、終了時、必要であれば途中経過における状態を、パーセンテージを使って作成します。
    開始時が0%、終了時が100%です。

    このサンプルでは、CSSコードの最後尾に位置しています。
    ここで、アニメーション名をmarqueeAnimationと名付け、アニメーションを、0%の開始時にはtext-indent:100%、終了時の100%では、text-indent:-50%と設定しています。

    text-indentは、テキストにおける一行目の左側余白の大きさを指定します。
    よってこのサンプルでは、開始時には画面に対して100%の位置、つまり右端ぎりぎり見えない位置に、終了時には-50%で、左端をオーバーした配置になります。

    keyframesでは、アニメーションの名前と、始点・終点など、地点ごとの状態を作成したのみで、
    これをどの要素に適用させるのか、アニメーションが終わるまでにかかる時間をどうするのか、といったことを別に記述していく必要があります。

    animation-name

    keyframesで作成したアニメーションを要素に適用させるためのプロパティがanimation-nameです。
    サンプルでは、.marqueeというクラスに、前述で作成したmarqueeAnimationを適用させています。

    animation-timing-function

    animation-timing-functionでは、アニメーション進行スピードの変化を制御します。
    アニメーションの目的によっては、始点から終点まで一定のスピードでアニメーションするのではなく、はじめはゆっくりで最後を素早く、などの動作が必要になることがあります。
    それを実装するのがこのプロパティです。

    値には下記のものがあります

    • ease – 開始と完了をなめらかにする
    • linear – 一定の速度を保つ
    • ease-in – ゆっくり始まる
    • ease-out – ゆっくり終わる
    • ease-in-out – ゆっくり始まってゆっくり終わる

    数値での設定については、少し複雑なので今記事では割愛します。

    animation-duration

    animation-durationでは、アニメーション1回にかかる時間を設定します。
    サンプルでは10sと設定されており、10秒をかけて、keyframesで作成したアニメーションを1回実行します。

    animation-iteration-count

    animation-iteration-countでは、アニメーションを繰り返す回数を指定します。
    値は、infiniteで無限に繰り返す設定、数値で繰り返し回数を指定できます。

    まとめると

    CSS3での、マーキーアニメーションの作成方法をまとめると、
    まず、keyframesで、アニメーションの具体的な動きとアニメーション名を決めます。
    始点ではtext-indentを100%で、テキストが画面右端に隠れているような状態にし、終点では、tex-indent:-50%で、テキストが画面左端に入り込んでいるような状態に。

    名前については、@keyframes marqueeAnimationと記述し、marqueeAnimationが設定されました。

    keyframesで作成したアニメーションを、marqueeクラスがついた要素に適用させるために、animation-name:marqueeAnimation;を.marqueeのスタイルに追加しました。

    次に、アニメーションが始点から終点まで一定のスピードで推移するように、animation-timing-function:linerとし、

    animation-duration:10s;でアニメーション1回にかかる時間を10秒に設定。

    animation-iteration-count:infiniteで、アニメーションが無限に繰り返すように設定しました。

    最後に、解説しやすいように省略していた、ベンダープレフィックスを付けてあげたのが、はじめの「サンプルコード」で示したコードです。

    まとめ

    この記事のまとめはありません。

    おわりに

    この記事はあなたのお役にたてましたか?
    もしよろしければ・・・

    この記事をみんなに教える?


    筆者に何か教える?

    たとえば、 小棹制作所はこんなこと↓を知りたがっているようです。

    feedlyでブログを購読する?

    follow us in feedly

    筆者にメーッセージを送る?

    なんでもご自由に書いて送ってください。
    ご質問等返信を希望の場合は、メールアドレス等返信先の記載をお忘れなく。

    チェックを入れて送信してください

    Copyright (C) 2012 小棹制作所.
    All rights reserved.