

【@property】CSS変数(カスタムプロパティ)でテキストグラデーションを滑らかにアニメーションする方法【こんかい技術メモ#2】
こんにちは!Webコーダーのこんかいです!
先日このサイトのヘッダー上部の『おしゃべりこんかい』をアップデートしました!
今回はこのような形で、
テキストグラデーションの色を変化させるアニメーションを@property
を使ったCSS変数で実装したのでご紹介します!

ちなみにこれは、0.05%、0.5%、1%の確率で見れます!もし見れたらスクショして私にご報告してください!笑
この記事の目次
- 5.まとめ
【コード付き】@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アニメーションの幅が広がれば幸いです!
本記事がためになったら共有していただけるととっても喜びます!
この記事が「いいね!」と思ったら
ハートをタップ!

注目度急上昇中!人気記事!
良ければシェアお願いします!
記事情報
【@property】CSS変数(カスタムプロパティ)でテキストグラデーションを滑らかにアニメーションする方法【こんかい技術メモ#2】