CSS3

@規則

@property

  編集:2022.07.08 by T.A.

mdn

JavaScript を走らすことなく、カスタム プロパティ登録をスタイルシート内で直に表現する。

妥当な @property 規則からは、等価なパラメーターで registerProperty() を call したかのように、登録済みカスタム プロパティが得られることになる。

@property <custom-property-name> { <declaration-list> }
<custom-property-name>
<dashed-ident>(2 個の dash から開始される、任意の妥当な識別子)として定義される。ただし、"--" 自体は除く ― それは、CSS による将来の利用用に予約される。

@property 規則には、[syntax、inherits]記述子が要求される。どちらかが欠落している場合、規則全体が無効になり、無視されるものとする。

initial-value 記述子は、構文が全称構文定義である場合に限り省略可能であり、他の場合は要求される ― 欠落している場合、全体規則は無効になり、無視されるものとする。

未知な記述子は、無効であり無視されるが、@property 規則を無効化することはない。

§ 登録の決定法」に指定したように、同じ <custom-property-name> 用に複数の妥当な @property 規則が定義された場合、スタイルシート順序で最後のものが“勝つ”。registerProperty() によるカスタムプロパティ登録は、同じ <custom-property-name> 用のどの @property 規則にも勝つ。

@property は、shadow ツリーの内側にあるスタイルシート内にある場合は無効になり、無視されるものとする。

<declaration-list>
以下の記述子が可能。

@property を利用してプロパティを登録する例:

HTML:

<script>
  CSS.paintWorklet.addModule('circle.js');
</script>
<style>
  @property --radius {
    syntax: "<length>";
    inherits: false;
    initial-value: 0px;
  }

  div {
    width: 100px;
    height: 100px;
    --radius: 10px;
    background: paint(circle);
    transition: --radius 1s;
  }

  div:hover {
    --radius: 50px;
  }
</style>

circle.js:

registerPaint('circle', class {
    static get inputProperties() { return ['--radius']; }
    paint(ctx, geom, properties) {
      let radius = properties.get('--radius').value;
      ctx.fillStyle = 'black';
      ctx.beginPath();
      ctx.arc(geom.width / 2, geom.height / 2, radius, 0, 2 * Math.PI);
      ctx.fill();
    }
});

テスト
HTML:

ここに表示
HTML:

ここに表示
スクリプト組み込み:



スクリプト:


スクリプト:



表示内容:
表示内容: