基本图形
撰写时间:2024-07-11
修订时间:2026-01-04
基本图形
基本图形包括:
- line
- rect
- circle
- ellipse
- polyline
- polygon
路径,基本图形,以及文本元素,均可通过fill(填充)及stroke(描边)属性被渲染出来。
基本图形均有以下属性:
- fill
- fill-opacity
- fill-rule
- marker
- marker-end, marker-mid, marker-start
- paint-order
- shape-rendering
- stroke
- stroke-dasharray
- stroke-dashoffset
- stroke-linejoin
- stroke-miterlimit
- stroke-opacity
- stroke-width
line
属性:
- x1
- 起点的X轴坐标
- y1
- 起点的Y轴坐标
- x2
- 终点的X轴坐标
- y2
- 终点的Y轴坐标
stroke-dasharray用于指定虚线。
最基本的虚线是由实线长度[, ⎵]虚线长度
的共2个数值的格式构成。如第二行,按实线100px,虚线50px的规律不断循环取值,直至线段结束。
第三行,只有1个数值,则实线长度及虚线长度均为该数值。
第四行,有4个数值,偶数,则依序分配给实线长度及虚线长度。
第五行,有3个数值,奇数,则循环取值后,变成100, 50, 30, 100, 50, 30,变成了偶数,再依序分配给实线长度及虚线长度。
rect
属性:
- x
- X轴坐标
- y
- Y轴坐标
- rx
- 圆角X轴半径
- ry
- 圆角Y轴半径
- width
- 宽度
- height
- 高度
circle
属性:
- cx
- 圆心的X轴坐标
- cy
- 圆心的Y轴坐标
- r
- 半径
使用虚线来填充圆,可生成一些有趣的图形效果。
圆的半径为50px,填充为绿色。描边宽度为80px,则以圆的外框为基准,圆内的描边宽度值为40px,圆外的描边宽度值为40px。
有点小问题。当stroke-dasharray的值为30时,按理来讲应可平分360o的圆周,但为何右边的蓝色块比其他蓝色块要大一些?
stroke-dasharray控制描边的虚实线位置,而描边是一条线段,大多情况下,描边是水平线段。但在这里,我们在圆上描边,此时这条水平线段沿着圆的外框弯成了一个圆,则这条线段的长度就是圆周。因此,如果我们希望虚实线能平分整个圆周,将先求出圆的周长,以此周长来分配虚实线。
在console
输出面板中,圆的周长是314.16,取半值为157。将stroke-dasharray的值设为此值,则正好只在圆的下方进行描边。
可修改stroke-dashoffset的值,以让描边区域围着圆心旋转特定角度。同样,此值也以圆的周长为准。若将此值改为157,则蓝色区域旋转到圆的上部,图像变成了一个可爱的草帽人。
将周长157除以5,得31.4,将此值赋值于stroke-dasharray,则可绘制出一个有5片扇叶的小风扇。
下面代码让扇叶无休止地旋转:
当值为52.3时,最好将中间的圆隐藏掉,否则会产生不好的联想。:(
将stroke-dasharray的值修改为不同的值,看能得到什么有趣的效果。唯独不方便的地方是当圆的半径改变时,我们须自己拿出计算器来计算圆的周长。由此催生了在SVG中引用变量的初步研究。
ellipse
属性:
- cx
- 圆心的X轴坐标
- cy
- 圆心的Y轴坐标
- rx
- X轴半径
- ry
- Y轴半径
SVG的ellipse很清爽。若要构建相对复杂的椭圆,可通过变换(transforms)的方式来进行。
polyline
属性:
- points
- 各点的坐标值
points属性中的各值可用空格或,
相隔。我的习惯是每个点的X轴、Y轴坐标值用空格隔开,点与点之间用,
隔开。这样在点的数量较多时,可快速定位各个点。
polygon
属性:
- points
- 各点的坐标值
polygon用以绘制闭合的图形。
