SVG图形的stroke定义了其轮廓。stroke是SVG图形基本的SVG CSS属性之一。
样式属性
CSS属性stroke
和fill
可以在SVG图形的style
属性内指定。示例如下:
<circle cx="50" cy="50" r="50"
style="stroke: #000066; fill: 3333ff;" />
这个例子定义了一个深蓝色边框和浅蓝色填充的圆。
轮廓示例
SVG图形的stroke是其轮廓。下面是一个SVG轮廓例子:
<circle cx="50" cy="50" r="25"
style="stroke: #000000; fill:none;" />
此例定义了一个黑色轮廓无填充的圆。最终图片如下:
轮廓和填充示例
你可以组合SVG图形的轮廓和填充色。下面是一个组合例子:
<circle cx="50" cy="50" r="25"
style="stroke: #000066; fill: #3333ff;" />
这个例子定义了一个深蓝色(#000066
)轮廓和浅蓝色(#3333ff)填充的圆。最终图片如下:
stroke-width
SVG有一个CSS属性——stroke-width
,其定义了轮廓的宽度。SVGstroke-width
示例如下:
这个例子将轮廓宽度设置为3像素。除了像素之外,你也可以使用别的单位。在SVG坐标系单位中能看到所有可用单位。
下面四个例子拥有不同stroke-width
:
<circle cx="50" cy="50" r="25"
style="stroke: #000066; fill: none;
stroke-width: 1px;" />
<circle cx="150" cy="50" r="25"
style="stroke: #000066; fill: none;
stroke-width: 3px;" />
<circle cx="250" cy="50" r="25"
style="stroke: #000066; fill: none;
stroke-width: 6px;" />
<circle cx="350" cy="50" r="25"
style="stroke: #000066; fill: none;
stroke-width: 12px;" />
最终图片如下:
stroke-linecap
SVG CSS属性stroke-linecap
定义了SVG线段结尾处的渲染方式。它有三个不同的值,如下所示:
butt
值导致线段结尾处截断的线头。square
值的线头和butt
一样,但是其会超过线段结尾一点。round
值结尾是圆弧线头。
下面三个SVGstroke-linecap
例子解释了这三个值(顺序为butt
,square
,round
)。
为了更好的展示CSS属性stroke-linecap
的效果,这个例子定义了个三条绿色线段。在每条绿线中绘制了一条stroke-width
为1的黑色线段。它们和绿线有相同的x1,y1
和x2,y2
坐标,但是没有为其设置stroke-linecap
。这么做,你就能看出stroke-linecap
属性值之间的不同。
stroke-linejoin
CSS属性stroke-linejoin
定义如何渲染形状中两条线之间的连接。CSS属性stroke-linejoin
可以采用下列三个值之一:
下面的例子解释了stroke-linejoin
不同值的效果:
<path d="M20,100 l20,-50 l20,50"
style="stroke: #000000; fill:none;
stroke-width:16px;
stroke-linejoin: miter;" />
<text x="22" y="20">miter</text>
<path d="M120,100 l20,-50 l20,50"
style="stroke: #000000; fill:none;
stroke-width:16px;
stroke-linejoin: round;" />
<text x="122" y="20">round</text>
<path d="M220,100 l20,-50 l20,50"
style="stroke: #000000; fill:none;
stroke-width:16px;
stroke-linejoin: bevel;" />
<text x="222" y="20">bevel</text>
miterroundbevel
stroke-miterlimit
CSS属性stroke-miterlimit
和stroke-linejoin
一起使用。如果stroke-linejoin
设置为miter,stroke-miterlimit
可以用来限制两条线相交的点之间的距离,线连接(角)的延伸。
<path d="M20,100 l20,-50 l20,50"
style="stroke: #000000; fill:none;
stroke-width:16px;
stroke-linejoin: miter;
stroke-miterlimit: 1.0;
" />
<text x="29" y="20">1.0</text>
<path d="M120,100 l20,-50 l20,50"
style="stroke: #000000; fill:none;
stroke-width:16px;
stroke-linejoin: miter;
stroke-miterlimit: 2.0;
" />
<text x="129" y="20">2.0</text>
<path d="M220,100 l20,-50 l20,50"
style="stroke: #000000; fill:none;
stroke-width:16px;
stroke-linejoin: miter;
stroke-miterlimit: 4.0;
" />
<text x="229" y="20">4.0</text>
注意,为了让三条路径看起来不同,将它们的stroke-miterlimit
设置为不同的值。最终图片如下:
1.02.04.0
连接线的长度也叫斜角长度。斜角长度是从连接线的内角到连接线的顶端之间的长度。下面这张图片中,在连接线的上方用红色线绘制出了连接线的长度:
正如你所想,描边越宽,连接线之间的角度越尖锐,斜角越长。
实际上,stroke-miterlimit
设置了斜角长度和描边宽度的比率限制。因此,stroke-miterlimit
设置为1.0表示斜角长度最大为1*描边宽度。超过部分就会被截断。1.0是stroke-miterlimit
最小的可能值。
下面一些连接线例子使用不同角度,并且stroke-miterlimit
都为1.0
。
注意,当角度越大,被截断的斜角部分越大。这是因为更尖锐的角度自然地产生更长的斜角。
stroke-dasharray + stroke-dashoffset
CSS属性stroke-dasharray
用于使用虚线呈现SVG形状的描边。它被称为dash数组
的原因是你需要提供一个数字数组作为其值。值定义破折号和空格的长度。因此,你应该提供偶数个数字。
下面是一个SVGstroke-dasharray
例子:
<line x1="20" y1="20" x2="120" y2="20"
style="stroke: #000000; fill:none;
stroke-width: 6px;
stroke-dasharray: 10 5" />
这个例子定义了一个描边,其中虚线部分宽为10像素,虚线之间的间隔为5像素。最终图片如下:
<svg width="500" height="100">
<line x1="20" y1="20" x2="120" y2="20" style="stroke: #000000; fill:none;
stroke-width: 6px;
stroke-dasharray: 10 5"></line>
</svg>
下面一些例子带有不同的虚线和空格宽度:
<line x1="20" y1="20" x2="120" y2="20"
style="stroke: #000000; fill:none;
stroke-width: 6px;
stroke-dasharray: 10 5 5 5" />
<line x1="20" y1="40" x2="120" y2="40"
style="stroke: #000000; fill:none;
stroke-width: 6px;
stroke-dasharray: 10 5 5 10" />
第一条线由宽度10的虚线开始,紧跟一个宽度5的空格,然后是一个5像素的虚线,然后又一个5像素的空格,最终重复该模式。
第二条线由宽度10的虚线开始,紧跟一个5像素的空格和一个5像素的虚线,最终是一个10像素的空格。
最终图片如下:
<svg width="500" height="100">
<line x1="20" y1="20" x2="120" y2="20" style="stroke: #000000; fill:none;
stroke-width: 6px;
stroke-dasharray: 10 5 5 5"></line>
<line x1="20" y1="40" x2="120" y2="40" style="stroke: #000000; fill:none;
stroke-width: 6px;
stroke-dasharray: 10 5 5 10"></line>
</svg>
stroke-dashoffset
用于设置虚线模式中的开始点。例如,你可以从模式的一般开始,然后从那开始重复模式。下面是一个SVGstroke-dashoffset
例子;
<line x1="20" y1="20" x2="170" y2="20"
style="stroke: #000000; fill:none;
stroke-width: 6px;
stroke-dasharray: 10 5;
stroke-dashoffset: 5;
" />
此例将stroke-dashoffset
设置为5像素,意味着从dash模式的5像素位置开始呈现(然而不是所有浏览器都完全支持)。最终图片如下:
stroke-opacity
CSS属性stroke-opacity
用来定义SVG图形描边的不透明度。其为0和1之间的一个小数。值越接近0,描边越透明。值越接近1,描边越不透明。stroke-opacity
默认值为1,表示描边完全不透明。
下面例子在文本上展示了三条带有不同stroke-opacity
的线:
<text x="22" y="40">Text Behind Shape</text>
<path d="M20,40 l50,0"
style="stroke: #00ff00; fill:none;
stroke-width:16px;
stroke-opacity: 0.3;
" />
<path d="M80,40 l50,0"
style="stroke: #00ff00; fill:none;
stroke-width:16px;
stroke-opacity: 0.7;
" />
<path d="M140,40 l50,0"
style="stroke: #00ff00; fill:none;
stroke-width:16px;
stroke-opacity: 1;
" />
最终图片如下,透过不同的线,文本越来越不可见。
Text Behind Shape