VML全称Vector Markup Language,是微软开发的一种矢量标记语言,用于在网页中描述矢量图形,它基于XML语法规范,早期被集成在Internet Explorer 5.0及以上版本的浏览器中,是实现网页矢量绘图的重要早期技术方案。

VML的核心特点
VML属于矢量图形技术,绘制的图形不会因为缩放出现失真问题,和传统的位图相比,在需要频繁缩放或者显示高精度图形的场景中优势明显。它的语法和HTML类似,开发者可以使用熟悉的标签式写法定义图形,同时支持通过CSS设置图形的填充、描边、透明度等样式属性。不过VML是微软的私有技术,只有旧版IE浏览器原生支持,其他现代浏览器都不兼容该标准,这也是它逐渐被SVG等技术替代的主要原因。
在旧版IE中使用VML的前置准备
要在旧版IE中正确使用VML,首先需要声明VML的命名空间,否则浏览器无法识别VML相关的标签。命名空间的声明需要放在HTML文档的<html>标签中,具体写法如下:
<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office">
同时还需要在<head>区域添加VML的行为定义,让浏览器能够解析VML标签的渲染规则,代码如下:
<head>
<style type="text/css">
v:* { behavior: url(#default#VML); }
o:* { behavior: url(#default#VML); }
</style>
</head>
使用XML语法绘制基础图形
VML的图形定义完全遵循XML的语法规范,所有标签都需要正确闭合,属性值需要用双引号包裹。下面介绍几种常见图形的绘制方式。
绘制矩形
矩形使用<v:rect>标签定义,通过style属性设置位置、尺寸、填充色、描边等属性,示例代码如下:
<body>
<v:rect style="position:absolute;left:50px;top:50px;width:200px;height:100px;" fillcolor="#ff0000" strokecolor="#000000" strokeweight="2px">
</v:rect>
</body>
上述代码会在页面距离左边50像素、顶部50像素的位置,绘制一个宽200像素、高100像素的矩形,填充色为红色,描边为黑色,描边宽度为2像素。
绘制圆形
圆形使用<v:oval>标签定义,通过width和height属性设置直径,当宽高相等时就是正圆,示例代码如下:
<v:oval style="position:absolute;left:100px;top:200px;width:150px;height:150px;" fillcolor="#00ff00" strokecolor="#333333" strokeweight="3px"> </v:oval>
绘制线条
线条使用<v:line>标签定义,通过from和to属性设置起点和终点的坐标,示例代码如下:
<v:line from="50,300" to="300,300" style="position:absolute;" strokecolor="#0000ff" strokeweight="2px">
<v:stroke dashstyle="dash"/>
</v:line>
这段代码会绘制一条从(50,300)到(300,300)的蓝色虚线,<v:stroke>子标签用于设置线条的样式,dashstyle="dash"表示设置为虚线样式。
VML的样式属性说明
VML支持多种样式属性,常用的属性整理如下:
| 属性名 | 作用说明 |
|---|---|
| position | 设置图形的定位方式,一般使用absolute绝对定位 |
| left/top | 设置图形距离页面左边和顶部的距离 |
| width/height | 设置图形的宽度和高度 |
| fillcolor | 设置图形的填充颜色,支持十六进制、颜色名称等格式 |
| strokecolor | 设置图形描边的颜色 |
| strokeweight | 设置描边的宽度,需要带单位如px |
| opacity | 设置图形的透明度,取值范围0到1 |
注意事项
- VML仅支持旧版IE浏览器,在IE9及以上版本虽然部分兼容,但微软已经不再推荐使用该技术,维护老项目时需要注意浏览器版本的适配范围。
- 所有VML标签的属性值都需要用双引号包裹,标签必须正确闭合,否则会出现渲染错误。
- 如果需要在VML图形中添加文本,可以使用<v:textpath>标签结合路径定义文本,或者直接在图形内部嵌套HTML文本元素,但需要注意旧版IE的渲染兼容性。