おしゃべりこんかい

午後もファイト~!🔥

Contact

好きなワードを検索してみよう!

好きなワードを検索してみよう!

運営者プロフィール

プロフィール
アイコン

大学生コーダー|隙間時間に学ぶWEB知識「SUKIWEB」運営者

こんかい

岡山県在住の現役大学生コーダー。高校1年生にプログラミングスクール「デイトラ」でWeb制作を学ぶ。 高校時代はECサイトの運営のバイトを経験。 2024年に開業し、大学生×フリーランスとして活動を開始する。現在は15件以上のサイト制作に携わっている。三度の飯よりコーディングが好き。

HOME > 記事アーカイブ > 【@property】CSS変数(カスタムプロパティ)でテキストグラデーションを滑らかにアニメーションする方法【こんかい技術メモ#2】
【@property】CSS変数(カスタムプロパティ)でテキストグラデーションを滑らかにアニメーションする方法【こんかい技術メモ#2】

【@property】CSS変数(カスタムプロパティ)でテキストグラデーションを滑らかにアニメーションする方法【こんかい技術メモ#2】

こんにちは!Webコーダーのこんかいです!

先日このサイトのヘッダー上部の『おしゃべりこんかい』をアップデートしました!

今回はこのような形で、
テキストグラデーションの色を変化させるアニメーションを@propertyを使ったCSS変数で実装したのでご紹介します!

アイコン
こんかい

ちなみにこれは、0.05%、0.5%、1%の確率で見れます!もし見れたらスクショして私にご報告してください!笑

【コード付き】@propertyを使ってグラデーションをアニメーションさせる

実際のコードはこんな感じです!

See the Pen @propertyを使ったグラデーションアニメーション by konkai (@konkaicode) on CodePen.

@propertyとは?

@propertyとは、CSS変数(カスタムプロパティ)の(--angle--color など)の「型」や「初期値」をブラウザに教えてあげるためのルールを記述するものです。

…とだけ言われても良くわからないので具体例にコードを見ながら理解していきましょう!

まず、普通のCSS変数は

:root{
	--angle:0deg;
}
SCSS

こんな感じで初期化します。

これを@propertyを使用して初期化すると、

@property --angle {
  syntax: "<angle>";        /* 角度として扱うよ */
  initial-value: 0deg;      /* 初期値 */
  inherits: false;          /* 継承しない */
}
SCSS

こうなります。

syntax値の形式を指定します。<number><length><angle><color> など

initial-valueはプロパティが指定されなかったときのデフォルト値を指定します(0degなど)

inherits親要素から子要素へ継承するかどうかを指定します(true / false

…と言われてもまだ何が違うかあまりわからないと思うので、
とりあえず初期化の方法が違うんだなとだけ覚えておいてください笑

※@propertyは、2024年7月にFirefoxにサポートされ、
全てのブラウザにサポートされました!やったー!

普通のCSS変数だと実装できないの?

結論から言うと@propertyを使わないとCSS変数をアニメーションさせることはできません。

CSS変数(カスタムプロパティ)は通常アニメーションできません。
そこで、@propertyを使うことで CSS変数を「アニメーション可能な値」として
ブラウザに明示的に登録できます。

:root{
	--angle:0deg; /* この書き方だと、あくまで「今の値を0degにセットした」だけ。 */
}

...

@keyframes angle-animation {
  to {
    --angle: 360deg;
  }
}
SCSS

ここで@propertyを使っていないと、--angleの値は時間経過で変化しません。
つまり、conic-gradient(from var(--angle), ...)もずっと固定のままです。

@propertyの使用するメリット

メリット①:CSS 変数を直接アニメーション

中間値の補間をブラウザが自動で計算してくれます!
今回でいうと0degの初期値からangle-animationで定義している360degまで自動的に補間をしてくれています!

メリット②:一度定義すれば複数の要素で同じ変数をアニメーションできる

@propertyを使わない場合は、@keyframes angle-animationのところを一つひとつグラデーションを変更する書き方をしないといけません。

しかし、@propertyを使うことで、—angleのみをアニメーションさせているので要素ごとに別のアニメーションを作成する必要がありません。

同様のアニメーションがあるときには使い回しができるのでとっても便利です!
(グラデーションをkeyframesで指定するとなると途方もない作業になります…)

まとめ

  • --angle<angle> として認識される
  • angle-animation によって 0deg → 360deg に滑らかに変化
  • conic-gradient(from var(--gradient-angle)) の角度がリアルタイムで変わる → ぐるぐる回る虹色ボーダーが完成!

いかがでしたか?

今回ご紹介した @propertyを使用して皆さんのCSSアニメーションの幅が広がれば幸いです!

本記事がためになったら共有していただけるととっても喜びます!

この記事が「いいね!」と思ったら
ハートをタップ!

0いいね!
1
2
3
4
5
6
7
8
9
10
累計 0 いいね!

注目度急上昇中!人気記事!

記事情報

【@property】CSS変数(カスタムプロパティ)でテキストグラデーションを滑らかにアニメーションする方法【こんかい技術メモ#2】

こんかい技術メモ
この記事を書いた人
アイコン

大学生コーダー|隙間時間に学ぶWEB知識「SUKIWEB」運営者

こんかい

岡山県在住の現役大学生コーダー。高校1年生にプログラミングスクール「デイトラ」でWeb制作を学ぶ。高校時代はECサイトの運営のバイトを経験。 2024年に開業し、大学生×フリーランスとして活動を開始する。現在は15件以上のサイト制作に携わっている。三度の飯よりコーディングが好き。