1. 坐标系统
1.1 viewPort
- 原点在左上角,x轴向右递增,y轴向下递增
- 通过width、height来确定视口大小,默认单位为px
- 支持的单位
- em 默认字体的大小,通常相当于文本行高
- ex 字母x的高度
- px 像素
- pt 点(1/72 英寸)
- pc 12点(1/6 英寸)
- cm 厘米
- mm 毫米
- in 英寸
- 视口单位与所绘制图形单位不同也可以
1.2 viewBox
- 用户自定义的新的坐标系统
- viewBox属性有四个参数,分别表示叠加在视口上的用户坐标系统的最小x坐标、最小y坐标、宽度和高度
1.3 宽高比
viewBox的宽高比与viewPort的宽高比不一致时,svg有三种处理方式:
- 按较小尺寸等比例缩放图形,以使图形完全填充视口。
- 按较大尺寸等比例缩放图形并裁剪掉超出视口的部分。
- 拉伸和挤压绘图以使其恰好填充新的视口(完全不保留宽高比)。
第一种情况会出现某一个方向要比视口小,需要解决放置在哪里,就是对齐的问题。
第二种情况会出现某一个方向要比视口大,需要解决哪个区域被裁剪掉,如左侧、右侧还是两侧。
preserveAspectRatio指定对齐方式
preserveAspectRatio=”alignment [meet | slice]”
其中alignment指定轴位置,由xMin、xMid、xMax与yMin、yMid、yMax组合而成,默认为xMidYMid meet。
meet为第一种情况,slice为第二种情况,要进行裁剪。
preserveAspectRatio=”none” 为第三种情况。
1.4 嵌套坐标系统
可以在任何时候将另一个svg元素插入到文档中来建立新的视口和坐标系统。其效果相当于一个迷你画布。
2. 基本形状
2.1 线段
<line x1="start-x" y1="start-y" x2="end-x" y2="end-y" />
- stroke-width 笔画宽度
- stroke: 笔画颜色
- stroke-opacity 不透明度
- stroke-dasharrray 一系列数字,表示线的长度和空隙的长度,数字之间用逗号或者空格分隔
2.2 矩形
<rect x="左上角x坐标" y="左上角y坐标" width="宽度" height="高度" />
- fill 填充颜色,默认为黑色
- fill-opacity 不透明度
- 支持线段stroke相关属性
- rx和ry指定x轴或者y轴圆角的半径,如果只设置一个则认为它们相等
2.3 圆和椭圆
<circle cx="圆心横坐标" cy="圆心纵坐标" r="半径" />
<ellipse cx="圆心横坐标" cy="圆心纵坐标" rx="x方向半径" ry="y方向半径" />
2.4 多边形
<polygon points="一系列的x/y坐标对" />
- 填充边界交叉的多边形,有两种算法
- 非零缠绕原则(顺时针值加1,逆时针减1,如果结果为0,则认为该点在图形外部,否则为内部)
- 奇偶数原则 (总数为奇数为内部,偶数为外部)
2.5 折线
<polyline points="一系列的x/y坐标对" />
不会闭合
2.6 线帽和连接线
- stroke-linecap butt 精确地与起止位置对齐 round square 都超过了真实位置
- stroke-linejoin miter(尖的) round(圆的) bevel(平的)