クリッピング mask 要素について(その4) テキストに適用する
mask要素をテキストに適用して試してみます。
まず、テキストタグを用意します。
[js]
<text
id="Text"
x="120"
y="60"
font-size="20"
text-anchor="middle"
>
テストテキストA
</text>
[/js]
このテキストタグのIDを、use で指定します。
[js]
<use xlink:href="#Text" fill="#ff0000" mask="url(#Mask)" />
[/js]
上記の例では、「mask=”url(#Mask)”」という箇所で、マスク要素を指定しています。
マスク要素は、以下のように指定します。
[js]
<mask
id="Mask"
maskUnits="userSpaceOnUse"
x="0"
y="0"
width="300"
height="100"
>
<rect x="0" y="0" width="300" height="100" fill="#eeeeee" />
</mask>
[/js]
ここでポイントとなるのは、マスク要素にrectを指定して、長方形の形でマスクし、
その配色は「fill=”#eeeeee”」で指定しています。
この配色が黒に近いか、白に近いかで、マスクのかかり具合が決まります。
下記の例では、マスク要素を3つ用意し、それぞれ以下の色を指定しています。
「#eeeeee」(白に近い色)
「#9b9b9b」(グレー)
「#565656」(黒に近い色)
全体のサンプルは以下です。
[js]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>テストHTML</title>
</head>
<body>
<svg width="300" height="100" viewBox="0 0 300 100">
<defs>
<mask
id="Mask"
maskUnits="userSpaceOnUse"
x="0"
y="0"
width="300"
height="100"
>
<rect x="0" y="0" width="300" height="100" fill="#eeeeee" />
</mask>
<text
id="Text"
x="120"
y="60"
font-size="20"
text-anchor="middle"
>
テストテキストA
</text>
</defs>
<use xlink:href="#Text" fill="#ff0000" mask="url(#Mask)" />
</svg>
<svg width="300" height="100" viewBox="0 0 300 100">
<defs>
<mask
id="Mask2"
maskUnits="userSpaceOnUse"
x="0"
y="0"
width="300"
height="100"
>
<rect x="0" y="0" width="300" height="100" fill="#9b9b9b" />
</mask>
<text
id="Text2"
x="120"
y="60"
font-size="20"
text-anchor="middle"
>
テストテキストB
</text>
</defs>
<use xlink:href="#Text2" fill="#ff0000" mask="url(#Mask2)" />
</svg>
<svg width="300" height="100" viewBox="0 0 300 100">
<defs>
<mask
id="Mask3"
maskUnits="userSpaceOnUse"
x="0"
y="0"
width="300"
height="100"
>
<rect x="0" y="0" width="300" height="100" fill="#565656" />
</mask>
<text
id="Text3"
x="120"
y="60"
font-size="20"
text-anchor="middle"
>
テストテキストC
</text>
</defs>
<use xlink:href="#Text3" fill="#ff0000" mask="url(#Mask3)" />
</svg>
</body>
</html>
[/js]
画面にアクセスすると、3つのテキスト要素に対して、(異なるfillの値で)マスクされたテキスト文字が出力されていることがわかります。
また、マスクのかかり具合は、黒に近づくにつれて強くかかっていることが確認できます。