今回も引き続き、マウスポインタを重ねたときのテキストのアニメーションだ。前回はお題の3つのサンプルのうち2つ解説したので、残りのひとつを仕上げよう。今回も、擬似要素の扱いとそれらのアニメーションが鍵になる。
テキストの上を水平線が横切る
前回の「2つの項目の静的なデザイン」で<body>
要素に書いたコードに、テキストが含まれた要素をつぎのように加える。つくりは他の2項目と同じで、<div>
要素(class
属性"item")の中にリンクのための<a>
要素(class
属性"link")を含めた。ただ、テキストは直に書き込み、data-
グローバル属性が与えられた空の<span>
要素を2つ添えた。そして、<a>
要素にはアニメーションのためのclass
属性("animation-2")も加えてある。
このアニメーションのclass
属性("animation-2")には、まずつぎのような静的なスタイルを与える。まだアニメーションもマウスインタラクションもない(図1)。アニメーションのほとんどは、これから擬似要素で加えてゆくことになる。
はじめに加える擬似要素は、横に細長い線のような矩形だ。つぎのCSSで定め、位置はtransform
プロパティに与えたtranslateX()
関数でテキストの左に移した(図2)。
その水平線は、テキストにマウスポインタを重ねたとき(:hover
擬似クラス)、テキストの右端に横切ってゆく(transition
とtransform
プロパティ)。なお、テキストアニメーションのクラス(animation-2
)のoverflow
プロパティにhidden
を与えて、テキストの外側は隠した。ここまでのCSSの定めをまとめたのが以下のコード1だ。
擬似要素でつくった2つのテキストを重ねる
つぎに、テキストアニメーションの要素(class
属性"animation-2")に含めた2つの<span>
要素にも、つぎのようにそれぞれ擬似要素を加え、data-
グローバル属性からattr()
式で得た同じテキストを異なる色で定めた(図3)。
そのうえで、つぎのCSSにより擬似要素のテキストをもとのテキストに重ね合わせた(図4)。この後、2つの擬似要素のテキストにアニメーションを与える。ここまでのCSSの定めをまとめたのが以下のコード2だ。
擬似要素のテキストを垂直にアニメーションさせる
擬似要素でテキストを2つ加えたのは、テキストの上半分と下半分に別々のアニメーションを与えるためだ。先に、上半分をつくろう。つぎのように、CSSで縦を半分にして、その外は隠す(図5)。
そしてつぎのように、はじめは見えない場所に下げておいたうえで、マウスポインタが重なったらもとの位置に戻す。すると、テキストが垂直方向中央からせり上がるアニメーションになる(図6)。ここで、プロパティtransition-timing-function
は、transition
にも定められるタイミング関数を設定する(第2回の「メニューの開け閉じの動きを加える」参照)。このプロパティを使えば、マウスポインタが重なったときと、外れたときとで動き方が変えられる。なお、タイミング関数のデフォルトはease
だ。
タイミング関数のease-in
の値の変化は、つぎの図7のとおり、動き終わるところで減速する。アニメーションにこの関数を与えた擬似要素は、はじめ隠れているので、少し遅れて表れて徐々に動きが遅くなっていくように見える。
2つ目の擬似要素で下半分のテキストアニメーションを加える
前項では、2つの重なった擬似要素のテキストが同じアニメーションをしていた。これを上半分と下半分別々に定めよう。2つの<span>
要素は、擬似クラス:first-child
と:last-child
で切り分ければよい(第3回「メニュー項目の間に区切り線を入れる」参照)。そこで、上半分はつぎのように書き替える。
下半分は、<span>
要素の位置(top
プロパティ)を半分下にずらし、擬似要素は上半分とは反対にもとのテキストの上外側に隠した。そして、マウスポインタを重ねたときもとの位置に戻せば、2つの擬似要素のテキストは垂直方向の真ん中から半分ずつ上下に広がるように表れる(図8)。
仕上げに、もとのテキスト(class
属性"animation-2")にも、つぎのようにtransition
プロパティを定めた。2つめの秒数値は、アニメーションを始めるまでのタメ(遅れ)を与える。そして、マウスポインタが重なったときの値はnone
に切り替え、color
プロパティを透明(transparent
)にしたので、すぐに消える。マウスポインタを外したら、少しタメて表れるというアニメーションになる。
これで、このテキストのアニメーションもでき上がった。まとめよう。<body>
要素に加えたHTMLコードは、本稿のはじめに示したとおりだ。書き上がったCSSの定めが、つぎのコード3になる。以下のサンプル1には、前回の分も含めて3つのテキストのアニメーションを掲げた。
サンプル1 CSS3:Text styles and hover effects