SVG填充

时间:2020-01-09 10:44:24  来源:igfitidea点击:

SVG形状的填充定义了其轮廓内的形状的颜色。换句话说,SVG形状的表面。填充是可以为任何SVG形状设置的基本SVG CSS属性之一。

填充示例

SVG形状的填充是形状轮廓内的填充。这是一个SVG填充示例:

<circle cx="50" cy="50" r="25"
        style="stroke: none; fill: #0000ff;" />

本示例定义了一个蓝色("#0000ff")填充颜色且无笔触颜色的圆。

填充和描边示例

我们可以将SVG笔触和填充颜色组合为SVG形状。这是一个SVG笔触和填充示例:

<circle cx="50" cy="50" r="25"
        style="stroke: #000066; fill: #3333ff;" />

本示例定义了一个圆形,其笔触颜色为深蓝色(#000066),填充颜色为浅蓝色(#3333ff)。

填充不透明度

SVG的fill-opacity CSS属性用于设置形状的填充颜色的不透明度。 " fill-opacity"取一个介于0和1之间的十进制数字。值越接近0,则填充越透明。值越接近1,填充越不透明。默认的" fill-opacity"为1,表示填充颜色是完全不透明的。

这是一个SVG" fill-opacity"示例,其中包含两个具有不同" fill-opacity"的圆:

<text x="22" y="40">Text Behind Shape</text>

<circle cx="50" cy="50" r="25"
        style="stroke: none; fill: #0000ff;
               fill-opacity: 0.3;  " />
<circle cx="120" cy="50" r="25"
        style="stroke: none; fill: #0000ff;
               fill-opacity: 0.7;  " />

这是生成的图像。

形状后面的文字

请注意,右圆圈后面的文字比左圆圈后面的文字不怎么可见。那是因为右边的圆圈比左边的圆圈具有更高的"填充不透明度"。

填写规则

"填充规则"决定了填充复杂形状的方式。 " fill-rule"可以采用两个不同的值。这些是:

nonzero
evenodd

通常,这两个值是确定形状内部和外部形状的规则。仅内部被填充。对于一个圆来说,这很简单,但是对于更复杂的形状,这并不是那么容易。看一下这个<path>示例:

<path d="M50,20 l40,40 l-40,40 l-40,-40 l40,-40
         M50,40 l20,20 l-20,20 l-20,-20 l20,-20"
         style="stroke: #000000;
         fill: #6666ff;
         fill-rule: nonzero;
      " />

<path d="M150,20 l40,40 l-40,40 l-40,-40 l40,-40
         M150,40 l-20,20 l20,20 l20,-20 l-20,-20"
         style="stroke: #000000;
         fill: #6666ff;
         fill-rule: nonzero;" />

这两个路径示例各有8条线,以菱形绘制,较大的线中有较小的菱形。在左侧路径中,内部菱形是从左向右(顺时针)绘制的。在右侧路径中,从右到左(逆时针)绘制内部菱形。这是使用non-zero``fill-rule绘制时得到的图像:

如我们所见," nonzero"规则考虑内部钻石在形状内部还是外部,具体取决于内部钻石的绘制方向。用于确定点在形状内部还是外部的"非零"规则是:

在任意方向上从点到无穷远绘制一条线(射线)。形状中的路径每次穿过此射线时,如果路径从左到右穿过射线,则将1加到计数器上;如果路径是从右到左穿过射线,则从计数器中减1. 对所有穿过射线的路径进行计数后,如果总计数为零,则该点被视为路径之外。如果总计数不为零,则将该点视为路径内的点。

这是相同的路径示例,但使用的是fill-ruleevenodd

<path d="M50,20 l40,40 l-40,40 l-40,-40 l40,-40
         M50,40 l20,20 l-20,20 l-20,-20 l20,-20"
      style="stroke: #000000;
      fill: #6666ff;
      fill-rule: evenodd;" />

<path d="M150,20 l-40,40 l40,40 l40,-40 l-40,-40
         M150,40 l-20,20 l20,20 l20,-20 l-20,-20"
      style="stroke: #000000;
      fill: #6666ff;
      fill-rule: evenodd;" />

确定点是在形状的内部还是外部的" evenodd"规则是:

在任意方向上从点到无穷远绘制一条线(射线)。每当路径穿过射线时,都增加一个计数器。如果总数是偶数,则该点在外面。如果总计数为奇数,则该点位于形状内部。