CSS Houdini は、 低レベル API のセットです。CSS レンダリング エンジンの一部を公開し、 CSS オブジェクト モデルにアクセスできるようにします。これは非常に CSS のエコシステムにも影響が及ぶため、デベロッパーはブラウザに対して ブラウザ ベンダーから提供されるのを待たずにカスタム CSS を読み取って解析する これらの機能に対するサポートが組み込まれています。とてもエキサイティングです。
Houdini の傘の中で最も進化した CSS のひとつが、 プロパティと値 API。
この API は、CSS カスタム プロパティ( CSS 変数など)に意味的な意味(構文によって定義される)を与えたり、 代替値を使用して CSS テストを有効にします。
Houdini カスタム プロパティを記述する
これはカスタム プロパティ(CSS 変数)の設定例ですが、ここでは
構文(型)、初期値(フォールバック)、継承ブール値(
親から値を継承するのでしょうか?)。現時点では、
JavaScript では CSS.registerProperty()
を使用しますが、対応ブラウザでは、
@property
:
CSS.registerProperty({ name: '--colorPrimary', syntax: '<color>', initialValue: 'magenta', inherits: false });
@property --colorPrimary { syntax: '<color>'; initial-value: magenta; inherits: false; }
これで、他の CSS カスタム プロパティと同様に、次のコードを使用して --colorPrimary
にアクセスできるようになりました。
var(--colorPrimary)
。ただし、ここでの違いは --colorPrimary
は
文字列として読み取られますデータがあるのです。
フォールバック値
他のカスタム プロパティと同様に、var
を使用して取得するか、
値(書き込み/書き換え)ですが、Houdini カスタム プロパティでは、
CSS レンダリング エンジンは、この初期値を
(そのフォールバック値)を使用します。
以下の例を考えてみましょう。--colorPrimary
変数には、
initial-value
/magenta
。しかし、開発者が無効な値と
値「23」。@property
がないと、CSS パーサーは
無効なコードです。現在、パーサーは magenta
にフォールバックします。これにより
CSS 内での代替検証やテストを行います使用できます。
.card {
background-color: var(--colorPrimary); /* magenta */
}
.highlight-card {
--colorPrimary: yellow;
background-color: var(--colorPrimary); /* yellow */
}
.another-card {
--colorPrimary: 23;
background-color: var(--colorPrimary); /* magenta */
}
構文
構文機能を使用すると、次のように指定することでセマンティック CSS を記述できます。 します。現在許可されているタイプは次のとおりです。
length
number
percentage
length-percentage
color
image
url
integer
angle
time
resolution
transform-list
transform-function
custom-ident
(カスタム識別子文字列)
構文を設定すると、ブラウザによるカスタム プロパティの型チェックが可能になります。 これには多くのメリットがあります。
この点を説明するため、グラデーションをアニメーション化する方法を説明します。現在、 このように、グラデーション値の間でスムーズにアニメーション化(または補間)する方法はありません。 各勾配宣言が文字列として解析されます。
<ph type="x-smartling-placeholder">この例では、グラデーションの停止割合が開始時からアニメーション化されています。 値を 40% から終了値 100% に変更します。[ 最上部のグラデーションの色が滑らかに 下降しています
左のブラウザは Houdini Properties and Values API をサポートしています。 これにより 滑らかなグラデーション停止時の 遷移が可能になります右のブラウザでは、そうではありません。「 非対応ブラウザがこの変更を認識できるのは、 移動します値を補間する機会はありません。 滑らかな遷移は見られません
ただし、カスタム プロパティの作成時に構文型を宣言し、
カスタムプロパティを使って
アニメーションを有効にしますマイページ
次のように、カスタム プロパティ --gradPoint
をインスタンス化できます。
@property --gradPoint {
syntax: '<percentage>';
inherits: false;
initial-value: 40%;
}
次に、アニメーション化の段階で、値を最初の 40%
から 100%
に更新します。
.post:hover,
.post:focus {
--gradPoint: 100%;
}
これで、グラデーションの滑らかな遷移が可能になります。
<ph type="x-smartling-placeholder">をご覧ください。まとめ
@property
ルールは、
これによって、CSS 自体に意味的に意味のある CSS を記述できます。学習内容
CSS Houdini と Properties and Values API の詳細については、
リソース:
- Houdini の準備はまだできていますか?
- MDN Houdini リファレンス
- Houdini の新しい API で、よりスマートなカスタム プロパティを実現
- Houdini CSSWG 問題キュー
写真撮影: Cristian Escobar、Unsplash より