いいえ、これを SVG で宣言的に設定することはできません。SVG と CSS3 の両方のcalc()
機能をサポートするユーザー エージェントでさえ、これを行うことはできません。有効なオペランドは任意のプロパティではなく、CSS の長さの単位だけだからです。
これを行うには、次のいずれかを行う必要があります。
オブジェクトの構築に関する知識に基づく不透明度で SVG を動的に生成する、または
この情報なしでドキュメントを生成し、それを処理して追加します。
#2 の実装は、XSLT (または新しいドキュメントを作成するその他の「1 回限りの」変換テクノロジ) を介して行うか、UA スクリプト (JavaScript など) を介してインメモリで行うことができます。
JavaScript ソリューションは次のようになります。
var rects = document.querySelectorAll('rect');
for (var i=rects.length;i--;){
// Assumes that all rects are neither transformed, nor are they
// inside any transformation hierarchy
var rect = rects[i];
var x = (rect.getAttribute('x')||0)*1;
var y = (rect.getAttribute('y')||0)*1;
var opacity = Math.sin(x)/2+Math.sin(y)/2;
rect.setAttribute('opacity',opacity);
}
編集:これは形状の不透明度に単独で影響することに注意してください。代わりに、塗りつぶし効果としてピクセルごとに形状の不透明度を制御するように求めている場合、私の答えは次のとおりです。
あなたが得ることができる最も近いのは、XとYの線形グラデーションを選択した関数にマッピングし、後でそれらの値を組み合わせて2つ<feComponentTransfer>
を使用することです。<feFuncA type="table">