クリッピング mask 要素について(その4) テキストに適用する

javascript

クリッピング mask 要素について(その4) テキストに適用する

mask要素をテキストに適用して試してみます。

まず、テキストタグを用意します。

<text
    id="Text"
    x="120"
    y="60"
    font-size="20"
    text-anchor="middle"
>
    テストテキストA
</text>

このテキストタグのIDを、use で指定します。

<use xlink:href="#Text" fill="#ff0000" mask="url(#Mask)" />

上記の例では、「mask=”url(#Mask)”」という箇所で、マスク要素を指定しています。

マスク要素は、以下のように指定します。

<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>

ここでポイントとなるのは、マスク要素にrectを指定して、長方形の形でマスクし、
その配色は「fill=”#eeeeee”」で指定しています。
この配色が黒に近いか、白に近いかで、マスクのかかり具合が決まります。

下記の例では、マスク要素を3つ用意し、それぞれ以下の色を指定しています。
「#eeeeee」(白に近い色)
「#9b9b9b」(グレー)
「#565656」(黒に近い色)

全体のサンプルは以下です。

<!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>

サーバ上のHTMLはこちら(test1.html)

画面にアクセスすると、3つのテキスト要素に対して、(異なるfillの値で)マスクされたテキスト文字が出力されていることがわかります。

また、マスクのかかり具合は、黒に近づくにつれて強くかかっていることが確認できます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です