Như đã đề cập trong các câu trả lời khác, bạn có thể sử dụng DHMTL behaviors để áp dụng bất kỳ kiểu nào được chỉ định trong biểu định kiểu cho phần tử VML của bạn.
Bắt đầu bằng cách tạo ra một tập tin HTC, ví dụ như: vmlcss.htc:
<PUBLIC:COMPONENT>
<PUBLIC:ATTACH EVENT="onpropertychange" ONEVENT="onpropertychange()" />
<PUBLIC:METHOD NAME="refresh" />
<SCRIPT LANGUAGE="JScript">
function onpropertychange()
{
if (event.propertyName == "className")
{
refresh();
}
}
function refresh()
{
// Set any VML attribute you may define in your stylesheet
element.fillcolor = element.currentStyle["fillcolor"];
element.strokecolor = element.currentStyle["strokecolor"];
// etc.
}
refresh();
</SCRIPT>
</PUBLIC:COMPONENT>
Sau đó áp dụng nó vào các yếu tố VML của bạn. Ví dụ cụ thể của bạn, bạn sẽ sử dụng:
<style>
v\:path
{
behavior: url(vmlcss.htc);
}
</style>
Cuối cùng, xác định phong cách như trong ví dụ của bạn:
.myRedPath
{
fillcolor: red;
strokecolor: yellow;
}
Bạn có thể muốn thay đổi các tập tin hành vi để hỗ trợ thêm cho all VML attributes.
Người ta có thể sử dụng kỹ thuật như vậy để viết thư viện vẽ hình dạng bằng VML hoặc SVG (tùy thuộc vào hỗ trợ trình duyệt) và cho phép tạo kiểu thông qua CSS. Hỗ trợ cho SVG styles sau đó có thể được thêm vào các đối tượng VML bằng cách sử dụng tệp hành vi như vậy bằng cách ánh xạ từng kiểu SVG đến các thuộc tính VML tương ứng.
Nguồn
2014-09-18 09:15:58
Tại sao lại sử dụng VML khi bạn có thể sử dụng Canvas? –
Có thể cho khả năng tương thích ngược. Mặc dù tôi sẽ đề nghị sử dụng Raphael thay vì nó tóm tắt đi sự không tương thích của trình duyệt. – Hyangelo
Có, rất tiếc tôi phải hỗ trợ các phiên bản cũ hơn của IE. Raphael là tuyệt vời, nhưng một trong những điều mà nó có vẻ là mất tích là bạn chỉ có thể tạo kiểu dáng một cách rõ ràng, không phải thông qua CSS. Tôi giả định câu trả lời cho câu hỏi này là "không bạn không thể làm điều đó", nhưng tôi hy vọng rằng tôi chỉ thiếu một cái gì đó :) –