【发布时间】:2014-04-10 17:41:34
【问题描述】:
我正在尝试通过 CSS 操作外部 .svg 文件。
HTML
<body>
<div class="mysvg">
<img src="decho.svg" alt="decho" width="200px"></img>
</div>
</body>
CSS
div.mysvg img {
opacity: .3;
transition: opacity 1s linear 0s;
}
div.mysvg img:hover {
opacity: 1;
}
此代码适用于不透明度,但不适用于 fill 或其他 svg 特定属性,如 stroke。我知道我不能用 img 标签做到这一点,但我一直在寻找几个小时,但我找不到使用 svg 或 object 的正确方法。
所以基本上,我的问题是,我如何获得与我链接的代码相同的结果,但要能够操纵填充、描边等属性,它必须是一个外部文件 ,而不仅仅是粘贴在 html 中的内联 svg 代码。
如果有人能告诉我正确的方法,我将不胜感激。谢谢。
编辑:
我设法通过在 .svg 文件本身中添加一个 css 来做到这一点。它必须紧跟在svg 开始标记之后。
<svg ...>
<style type="text/css" media="screen">
<![CDATA[
g {
fill: yellow;
stroke: black;
stroke-width: 1;
transition: fill 1s linear 0s;
}
g:hover {
fill: blue;
}
]]>
</style>
<g>
<path ...>
</g>
</svg>
还需要在html中插入object,否则不起作用。
<object data="decho.svg" type="image/svg+xml">
希望这对将来寻找像我这样的答案的人有所帮助。这对我有帮助 http://www.hongkiat.com/blog/scalable-vector-graphic-css-styling/。
【问题讨论】:
-
您必须使用 javascript 获取对象文档,然后操作其 DOM,您只能使用 CSS。
-
感谢您的回答。我一直在阅读我可以将 CSS 直接添加到 svg 文件中,您认为这是解决我问题的好方法吗?
-
你有办法使用 css 来操纵 svg 的大小吗?我不确定这是否可能,因为我还没有在网上找到这样做的方法。我正在嵌入在主页中的 html 文件中使用 svg 代码。
-
@j4v1 如果您检查我的答案中的链接,有两种可能的方法可以使用 css 操作 svg 的内部。一种是将所有 svg 转换为字体,然后使用 font-size 和 :hover psuedo 操作它们。另一种方法是将svg作为svg defs加载到页面顶部的html中,然后将它们呈现为