VML相当于IE里面的画笔,能实现你所想要的图形,而且结合脚本,可以让图形产生动态的效果。VML是微软1999年9月附带IE5.0发布的,在我认为, VML其实是Word和HTML结合的产物。可以将Word文档另存为HTML,其中的文本和图片可以很容易的转换,但如果是手绘制的图形在以往的IE里面就无法解释了,如果都转换成图形文件又不太现实。于是微软把Word里面的图形控件结合到IE里面,使IE也具备了绘图功能。
VML的全称是Vector Markup Language(矢量可标记语言),矢量的图形,意味着图形可以任意放大缩小而不损失图形的质量,这在制作地图上有很大用途。为了显示它的强大,和增加你学习VML的信心,先给你看看一个VML例子:

Hello world!
Hello VML!

在VML里面,标记使用的是XML扩张,需要一个namespace(命名空间),你可以使用惯用的“v”作为命名空间,使用IE5.0到IE6.0通用的定义如下:

<html xmlns:v="urn:schemas-microsoft-com:vml">
<STYLE>
v/:* { Behavior: url(#default#VML) }
</STYLE>

xmlns 全称就是XML NameSpace 也就是命名空间。Behavior(行为)也是IE5.0新推出的东西,它的功能非常强大,结合样式表,可以给任何HTML对象增加行为(新的属性、方法、事件),而在这里,它的用处是把命名空间“v”和系统预定义的行为VML连接。这样定义以后,你就可以使用下面的标记了,和普通的HTML标记有所区别,每个标记都增加了一个命名空间:

<v:shape></v:shape>

和其他HTML元素一样,VML标记里面可以定义DHTML大部分属性和事件,比如说id,name,title,onmouseover等等。在写法上VML比较灵活,很多属性既可以写在标记里面,又可以独立出一个新的标记来表示:

<v:shape id=shape1 name=shape1 οnmοuseοver="alert(this.id)" StrokeColor=red Path="m 0,0 l 10,10 x e"></v:shape>
等同于下面的写法:
<v:shape id=shape1 name=shape1 οnmοuseοver="alert(this.id)">
<v:Stroke StrokeColor=red/>
<v:Path v="m 0,0 l 10,10 x e"/>
</v:shape>

当然不是所有的属性都可以写成独立的标记,常用的比如说上面的 Stroke(按我的理解可以翻译成线性),Path,Shadow,Fill(填充)等,VML这样的方式可以理解为 shape 的属性分类,使属性更直观。
Shape 对象派生出来的一些对象,更加直接的图象,比如说 Rect(矩形),RoundRect(圆边的矩形),Oval(圆),Line(线),PolyLine(不规则折线),Image(图形文件)等等,以后将对这些对象细细描述。
Shape是VML最基本的对象,利用它可以画出所有你想要的图形。在VML中,使用的坐标并不是Document的坐标,它有自己的坐标系,这样一来,动态改变它的坐标,就可以实现放大、缩小、旋转等功能了。shape的 CoordSize 属性就是用来定义坐标的,它有两个参数,<v:shape CoordSize="2800,2800" />, 这里的2800,2800 是横纵坐标被分成了2800个点,并不是HTML里面默认像素。如果没有设置圆点,VML默认是 0,0 (左上角),当然你也可以使用 CoordOrig 属性设置VML的圆点坐标。

<v:shape CoordOrig="-1400,-1400" CoordSize="2800,2800" style="width:500;height:500" />

注意:定义的坐标只是相对的,真正显示的图形大小还需要 style="width:500;height:500" 来定义!

上面的定义后,你可用的坐标是 x(-1400到1400) y(-1400到1400) ,这样的坐标就像数学里面的坐标了,把画版分成了四个块。

在解决实际问题的时候,我发现,IE会自动把可见的VML图象放在相对的(0,0)位置,意思是说,上面两张图如果没有增加两个辅助的坐标,在IE上显示出来是并列的两个正方形。
shape中最主要的属性是Path,它是个功能强大的画笔,语法很简单,由几个字母组成,下面详细讲述:
m x,y:MoveTo把画笔移动到 (x,y);
l x,y:LineTo从当前点到(x,y)画一条线;可以给连续的几个点,VML会连续画出来直到遇到 x 命令。
x:Close结束一条线;
e:End结束画图
shape的其他常用属性:
FillColor:填充颜色,使用HTML中规定的颜色;例如:fillcolor=red
Filled:是否要填充图形,如果图形不是封闭的,也会自动封闭图形进行填充。当Filled="true"(默认),fillcolor才有效果;
StrokeColor:线的颜色;
StrokeWeight:线的宽度;
Title:当鼠标移动到该图形上的时候,显示的文字,和HTML里面的alt、tilte一样;
Type:指定该图形属于那个ShapeType,ShapeType可以为VML制定模版,将在以后加以描述;
前面的这些属性,FillColor、Filled可以在<v:Fill />中使用,StrokeColor、StrokeWeight可以在<v:Stroke />中使用。也可以在 Shape 或者 继承Shape的对象中使用它。
在下面几节,将详细介绍 Shape 延伸出来的一些具体对象,诸如 Rect、RoundRect、Oval、Line等对象。
Line是做图中最常用的,它有两个特殊的属性 from 和 to ,就是起始点和终止点坐标。
<v:line from="0,0" to="100,50" style="position:relative;"/>

●如果要改变线的样式,LineStyle (Stroke)属性可以做到:
Single(默认),ThinThin,ThinThick,ThickBetweenThin
●如果要改变线的类型,可以用 DashStyle(Stroke)属性:

<v:line style="position:relative" from="0,0" to="100,0" >
<v:stroke dashstyle="Dot"/>
</v:line>

Solid(默认):见上图
ShortDash:
ShortDot:
ShortDashDot:
ShortDashDotDot:
Dot:
Dash:
LongDash:
DashDot:
LongDashDot:
LongDashDotDot:
●在画坐标的时候,需要箭头,VML已经定义好了箭头,在Stroke体现:EndArrow 和 StartArrow 属性,一个是线开始的时候有箭头,另一个是线结束的时候有箭头。箭头的样式也有不少:

<v:line style="position:relative" from="0,0" to="100,0" >
<v:stroke EndArrow="Classic"/>
</v:line>

EndArrow="Block":
EndArrow="Classic":(这个看起来还比较舒服)
EndArrow="Diamond":
StartArrow="Oval":
StartArrow="Open":

PolyLine是 Line 的变形,是不规则的连续的线。它有个特殊的属性 Points ,用来设置每个点的坐标。例如:

<v:PolyLine filled="false" Points="0,0 0,100 20,150 200,100" style="position:relative"/>

一样可以设置它的线的样式和类型以及箭头 ( IE5.0中,PolyLine不支持 Arrow )

<v:PolyLine filled="false" Points="0,0 0,100 20,150 200,100" style="position:relative"/>
<v:stroke StartArrow="Oval" EndArrow="Classic" dashstyle="Dot" />
</v:PolyLine>

用VML画矩形,必须设置 style="width:50;height:50",其他就没有什么特别的。在这节,顺便讲讲 shadow 对象和 TextBox对象:
<v:Rect style="position:relative;width:100;height:50px"/>

RoundRect顾名思义,是圆角的矩形,这种形状在画流程图的时候很常用,如果加上阴影,就更好看了:
<v:RoundRect style="position:relative;width:100;height:50px">
<v:shadow on="T" type="single" color="#b3b3b3" offset="5px,5px"/>
</v:RoundRect>

在VML里面,True 和 False 可以简写成 T 和 F。Shadow 中的 offset 属性用来设置 偏移原图的 x,y 值。 on 属性用来决定是否显示阴影。在矩形中写字,要用到 TextBox 对象。TextBox 比较关键的属性是 inset(left,top,right,bottom),意思是隔图形边的上下左右多少范围内定位文字:
<v:RoundRect style="position:relative;width:120;height:50px">
<v:shadow on="T" type="single" color="#b3b3b3" offset="5px,5px"/>
<v:TextBox inset="5pt,5pt,5pt,5pt" style="font-size:10.2pt;">Hello world!</v:TextBox>
</v:RoundRect>
Hello world!
当然你也可以直接插入HTML代码,比如说插入一个
<Div style="padding-top:5px;padding-left:5px;padding-right:5px;padding-bottom:5px">Hello World!</Div>
效果是一样的。
用VML画圆(Oval)是非常简单的,只要设置圆的高和宽就可以了。当然定位也是常用的:

<v:oval style="position:relative;left:5;top:5;width:100;height:80"/>

还要注意的是,top和left是圆的左上角坐标,width 和 height 是圆的宽和高,不是圆的半径。其圆心坐标是(left-width/2,top-height/2)。
说到圆,不得不想到弧(arc) VML已经定义了弧对象,它有除了圆的基本性质外,两个特殊的属性startangle 和 endangle ,就是起始角度和结束角度,单位是度,而不是弧度:

<v:arc filled=false style="position:relative;width:100;height:100" StartAngle="0" EndAngle="270" />
注意到没有,0角度是从平常的90度开始的。
Image 对象从外部调用一个图形文件,只要IE能够显示的格式都可以。需要注意的是,VML只用来显示这张图片,并没有将这图片矢量化,如果以后放大缩小,画质会改变的。

<v:image src="big.GIF" style="position:relative;top:0;left:0;width:165;height:157" />

刚刚查询 MSDN 关于VML资料的时候,左边的相关菜单已经 Unavailable 了,这是否意味着 VML 将被 Microsoft 抛弃?因为有取VML和Flash之长处的 SVG 的崛起,VML 黯然失色,曾经问一个开花过VML软件的老外,他都强烈建议我使用SVG。但我觉得 SVG固然强大,但它和Flash一样,有自己的菜单,有自己固定的区域,和别的网页元素结合的不太好(个人观点),VML还是有其生存意义的。不过可以肯定,在IE以后的版本,对VML都是支持的。如果你要查询一些VML的原始资料,可以访问下面的地址:http://msdn.microsoft.com/workshop/author/vml/shape/introduction.asp?frame=true

IE里面的画笔---VML(Vector Markup Language)入门之一相关推荐

  1. VML,The Vector Markup Language(矢量可标记语言)

    VML,The Vector Markup Language(矢量可标记语言) 什么是VML?VML相当于IE里面的画笔,可以实现你想要的图形,并结合脚本,可以使图形产生动态效果.VML是微软在199 ...

  2. Coursera课程Python for everyone:Quiz: eXtensible Markup Language

    eXtensible Markup Language 10 试题 1. What is "serialization" when we are talking about web ...

  3. HTML - 超文本标记语言 (Hyper Text Markup Language)

    HTML - 超文本标记语言 (Hyper Text Markup Language) HTML是建设网站/网页制作主要语言. HTML是一种易于学习的标记语言. HTML使用像 <p> ...

  4. java 解析标记语言_Java XML可扩展标记语言(eXtensible Markup Language)

    一.XMl 1.1.XML简介: XML指可扩展标记语言(eXtensible Markup Language),它是一种很像HTML的标记语言.XML的设计宗旨是传输数据,焦点是数据的内容,而HTM ...

  5. 超文本标记语言(英语:HyperText Markup Language,简称:HTML)

    超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言. 您可以使用 HTML 来建立自己的 WEB 站点,HTML 运行在浏览器上 ...

  6. html文件是一种使用超文本标记语言,超文本标记语言HTML HTML(Hyper Text Markup Language,.ppt...

    超文本标记语言HTML HTML(Hyper Text Markup Language, 5)链接到多媒体对象 如果将标记的href属性的值指定为其它文件,那么就可以连接到指定的其它类型的文件.例如使 ...

  7. AML(Automation Markup Language)简单介绍

    AML学习 AML简介 概念 AML架构图 工厂拓扑信息建模Modelling of plant topology information AML术语 AML 关系规范 Class-instance- ...

  8. Geography Markup Language (GML)

    3. Geography Markup Language (GML) 地理注记 GML (http://www.opengeospatial.org/standards/gml) 是一种 XML 语法 ...

  9. HTML-HyperText Markup Language

    一个例子 <!DOCTYPE html> 声明为 HTML5 文档 doctype 声明是不区分大小写的 <html> 元素是 HTML 页面的根元素 <head> ...

  10. HTML笔记——hyper text markup language

    HTML笔记--hyper text markup language ( 超文本标记语言)超文本包括:文字.图片.音频.视频.动画等 IDEA官网下载 指定浏览器 <!--DOCTYPE:告诉浏 ...

最新文章

  1. 使用jQuery设置disabled属性与移除disabled属性
  2. asp.net core 使用HttpClientFactory Polly实现熔断降级
  3. php return直接输出,PHP中return用法详细解读
  4. FPGA设计思想与技巧
  5. 任正非:6G华为也是领先世界 或在十年后投入使用
  6. iOS开发——UI基础-KVC
  7. Wireshark软件的使用教程
  8. 推荐8个自媒体免费工具,不仅提高工作效率,还能提供灵感
  9. C语言的printf输出格式
  10. python 天气雷达质量控制_天气雷达原理
  11. 移动硬盘做PE启动盘的技巧
  12. 一:以理论结合实践方式梳理前端 ES 6+ ——— ES 6+ 能干什么
  13. centos中文、英文乱码
  14. 数据导入与预处理——1.初步熟悉kettle-Spoon
  15. 数据挖掘是什么,数据挖掘的学习路线是什么?
  16. keep T 不是 KG等级_Lifestyle | 做Keep没有动力?一周的健身计划都在这里了!
  17. Matrix Derivation
  18. android studio marvin 配置
  19. python语言必刷题——BMI值的计算
  20. java判断经纬度是否在扇形内_地图学复习 (题) (带答案)

热门文章

  1. Footprint:Polkadot创立至今,生态如何?
  2. MarkDown编辑器设置图片大小
  3. 什么是架构师?Java架构师一般多少年薪呢?
  4. 文言计算机语言,文言文考试也编程,文言语言!!!(附c/c++自译)
  5. getchar()用法
  6. LTE: 小区特定参考信号功率与RRU发射功率的计算
  7. 解决双屏显示不一致的问题
  8. matlab虚数求模,matlab计算带有复数的函数,最后求复数函数的模,结果里面却有...
  9. Git报错解决:fatal: unable to access ‘https://github.com/.......‘: OpenSSL SSL_read: Connection was reset
  10. python爬取京东商品图片_Python---爬取京东商城的图片