概要

今日は小ネタです。

たまにデザインが優秀なブログ様(技術が関係ないジャンル含め)を参考にさせていただくことがあります。
(いつもありがとうございます...!)

その中で、気になっていたのは、


こんな感じ

マーカーを引いたような装飾がアニメーションするような装飾です。今回はこれを調査し、独自に実装してみようと思いました。

本記事のゴール

マーカーで引いた装飾を装飾するようにする。

作業

マーカーで引いた装飾のおさらい

すでにこのブログでも実装していたのですが、マーカーで引いたような装飾は背景色をつけるbackgroundのグラデーションを指定する linear-gradientで実現します。

.hoso {
  font-weight: bold;
  background: linear-gradient(transparent 60%, #FBB92F 60%);
}

ちょっとグラデーションを聞かせるときの概念は分かりにくいのですが ウェブ標準のためのドキュメントであるMDN Web Docsのlinear-gradiendのページによると、

を指すようです。よって、これらを調整することで色は変えられます。

例えば、以下のように指定できます。

.hoso2 {
  font-weight: bold;
  background: linear-gradient(#ff0 50%, #00f 50%); // 黄色、青の順番に指定
}
上は黄色で下は青
.futo {
  font-weight: bold;
  background:linear-gradient(transparent 20%, #FBB92F 20%);
}
太くしようとすれば、このようにします。

アニメーションを追加

さて、このような整理の中で、上記のhosoというクラスにアニメーションを追加していきます。いったんJavascriptを利用しないで済むように、CSSアニメーションを使用していきたいと思います。

.hoso {
  font-weight: bold;
  background: linear-gradient(transparent 60%, #FBB92F 60%);
  background-size: 200% 200%;
  animation: makerUp 3s ease-in-out infinite; /* アニメーション設定 */
}

@keyframes makerUp {
  0% {
    background-position: 0% 0%;
  }
  100% {
    background-size: 100% 100%;
  }
}

試行錯誤した結果、このようになりました。 わかりやすく何度も繰り返すために、無限ループにしていますがもし初回描画時のみにしたいときはinfiniteforwardsとします。

CSSでは限界がある

上記のような@keyframesを利用したCSSアニメーションは、時間の経過に合わせてCSSの状態を変化させる、という発想で書いています。

しかし、上記では背景画像を元々下のほうの「60%」描画するとしていたものを、0%~100%に変化させる という指定になり、左から右に色をつけるようなグラデーションが描けず中途半端になってしまいました。

まとめ

今回は下からせり上がるタイプのアニメーションを採用しましたが、できれば、マーカーペンを引いたように左から右に色がつく アニメーションを実現したいと思いました。これについてはJavascriptを併用しないとできない可能性もありそうで、調査が行え次第本記事に追記していこうと思っております!



この記事が何かのお役に立てれば幸いです。
最後までお読みいただきありがとうございました!