什麼是vml? VML相當于IE裡面的畫筆,能實作你所想要的圖形,而且結合腳本,可以讓圖形産生動态的效果。VML是微軟1999年9月附帶IE5.0釋出的,在我認為, VML其實是Word和HTML結合的産物。可以将Word文檔另存為HTML,其中的文本和圖檔可以很容易的轉換,但如果是手繪制的圖形在以往的IE裡面就無法解釋了,如果都轉換成圖形檔案又不太現實。于是微軟把Word裡面的圖形控件結合到IE裡面,使IE也具備了繪圖功能。
最初由Microsoft開發的XML詞表,現在也隻有IE5.0以上版本對VML提供支援。
使用VML可以在IE中繪制矢量圖形,是以有人認為VML就是在IE中實作了畫筆的功能。
下面介紹一下VML的優點:
基于XML标準
XML是公認擁有無窮生命力的下一代網絡标記語言, VML具有先天的優勢,它的表示方法簡單,易于擴充等等。
支援高品質的矢量圖形顯示
矢量的圖形,意味着圖形可以任意放大縮小而不損失圖形的品質,這在制作地圖上有很大用途。
VML支援廣泛的矢量圖形特征,它們基于由相連接配接的直線和曲線描述路徑。在VML中使用兩個基本的元素:shape和group。這兩個元素定義了VML的全部結構;shape描述一個矢量圖形元素,而group用來将這些圖形結合起來,這樣它們可以作為一個整體進行處理。
VML規範包括大量的支援多種不同矢量圖形特征的元素。下面是VML的預定義圖形元素:
l Shape
l Path
l Line
l Polyline
l Curve
l Rect
l Roundrect
l Oval
l Arc
l Group
由文本構成的圖像,并可內建到HTML
由于VML使用簡單的文本來表示圖像,這樣就可用很少的位元組來表示比較複雜的圖像。VML與HTML相容,通過在HTML中聲明VML命名空間并聲明處理函數,就可以和其他HTML元素一樣使用VML元素,在用戶端浏覽器顯示圖像。VML标記裡面可以定義DHTML大部分屬性和事件,比如說id, name, title, onmouseover 等等。
支援互動與動畫
但VML的功能不隻是繪圖,他還可以在圖形中嵌入文本,并可實作超鍊,還可通過腳本語言實作一定的動畫功能。
VML 在firefox下是不被支援的,是以在用VML的時候要注意選用的浏覽器!!
隻能在IE浏覽器或以IE為核心的浏覽器才能用VML。
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 onmouseover="alert(this.id)" StrokeColor=red Path="m 0,0 l 10,10 x e"></v:shape>
等同于下面的寫法:
<v:shape id=shape1 name=shape1 onmouseover="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:stroke EndArrow="Classic"/>
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: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:TextBox inset="5pt,5pt,5pt,5pt" style="font-size:10.2pt;">Hello world!</v:TextBox>
當然你也可以直接插入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" />
<a target="_blank" href="http://www.cnblogs.com/lhb25/p/must-read-links-for-web-designers-and-developers-volume-12.html">Web 前端工程師和設計師必讀精華文章推薦</a>
<a href="http://www.cnblogs.com/lhb25//lhb25/archive/2011/07/28/html5-awesome-single-page-sites-inspiration.html" target="_blank">酷!15個精美的 HTML5 單頁網站作品欣賞</a>
<a target="_blank" href="http://www.cnblogs.com/lhb25//lhb25/archive/2011/11/22/best-awesome-css3-animation-demos.html">炫!35個讓人驚訝的 CSS3 動畫效果示範</a>
<a href="http://www.cnblogs.com/lhb25//lhb25/archive/2012/03/02/30-mind-blowing-parallax-scrolling-effect-websites.html" target="_blank">贊!30個與衆不同的優秀視差滾動效果網站</a>
<a target="_blank" href="http://www.cnblogs.com/lhb25//lhb25/archive/2012/01/13/25-outstanding-single-page-website-designs.html">靓å!25個優秀的國外單頁網站設計作品欣賞</a>
<a target="_blank" href="http://www.cnblogs.com/lhb25//lhb25/archive/2011/08/09/awesome-html5-and-javascript-effects.html">帥!8個驚豔的 HTML5 和 JavaScript 特效</a>
<a href="http://www.cnblogs.com/lhb25//lhb25/archive/2011/06/27/35-exclusive-rainbow-colored-flash-websites.html" target="_blank">頂!35個很漂亮的國外 Flash 網站作品欣賞</a>
<a href="http://www.cnblogs.com/lhb25//lhb25/archive/2011/08/24/outstanding-admin-panels-part-one.html" target="_blank">哇!34個漂亮網站和應用程式背景管理界面</a>

<a href="http://www.yyyweb.com/go/web" target="_blank">本部落格新站點 ◆ 前端裡 ◆ 歡迎圍觀:)</a>
歡迎任何形式的轉載,但請務必注明出處。