【发布时间】:2011-11-14 08:42:04
【问题描述】:
如何告诉 SVG 图像使用另一个 CSS 文件?
- 网页显示 SVG 文件。
- 一个按钮允许在包括 SVG 图像在内的整个网页上在经典颜色和高对比度之间切换。
尝试
w.css(白色背景)
svg { background-color:white; }
path{ fill:none; stroke:black; stroke-width:8px; }
b.css(黑色背景)
svg { background-color:black; }
path{ fill:none; stroke:white; stroke-width:10px; }
image.svg
<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="w.css" title="classic" ?>
<?xml-stylesheet type="text/css" href="b.css" title="contrast" alternate="yes" ?>
<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%">
<path d="M150,100 H50 V300 H150 M250,300 H300" />
</svg>
example.html
<html>
<body>
<embed id="svg_image" src="image.svg" type="image/svg+xml" />
<script type="text/javascript">
var embed = document.getElementById("svg_image");
function change_css(file){
var svgdoc = embed.getSVGDocument();
var b = svgdoc.childNodes;
for (var i=0; i<b.length; i++){
var itm = b.item(i);
itm.Data = "href='"+ file +"' type='text/css'" ;
}
}
</script>
<input name="c" type="radio" onclick="change_css('b.css');">High contrast<br>
<input name="c" type="radio" onclick="change_css('w.css');" checked="yes">Classic
</body>
</html>
网络搜索: 2011 年未找到答案
http://tech.groups.yahoo.com/group/svg-developers/message/56679
更新:另见question about correctly structuring javascript, css, and svg
也许是 jQuery SVG (keith-wood.name)...
【问题讨论】:
-
我不确定这里有什么问题。你的方法很好,除了处理指令节点的
data属性应该是小写的。你也不需要两个<?xml-stylesheet ?>PI,只创建一个并操作它的data就足够了。 -
是的,duri,你是对的:我已经小写了
itm.Data=>itm.data,它可以工作:-) -
PS: firebug v1.8.2 没有检测到这个bug :-( ` ` => bug report
-
@duri : 对于错误报告,我需要知道 firebug 是否必须小写
Data或 firebug 必须检测属性大小写错误。 -
这不是错误。节点是一个对象,因此您可以设置任何属性,无论它是否具有特殊功能。使用
itm.Data与itm.someOtherCustomProperty相同 - 如果您设置它,不会有任何改变,但您可以这样做。 Javascript 区分大小写,所以data和Data属性是两个不相关的东西。
标签: javascript css xml svg stylesheet