gpt4 book ai didi

html - 使用 CSS 操作外部 svg 文件样式属性

转载 作者:技术小花猫 更新时间:2023-10-29 12:04:47 25 4
gpt4 key购买 nike

我正在尝试通过 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 做到这一点的正确方法或对象

所以基本上,我的问题是,如何获得与我链接的代码相同的结果,但能够操纵填充、描边等属性,并且它必须是一个外部文件 ,而不仅仅是粘贴在 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 data="decho.svg" type="image/svg+xml">

希望这对将来寻找像我这样的答案的人有所帮助。这就是对我有帮助的http://www.hongkiat.com/blog/scalable-vector-graphic-css-styling/ .

最佳答案

在我看来,这是 svg 中最大的缺陷:沙盒

Svg 文件被沙盒化: 在它们自己的文档中,这就是典型的“填充:”样式不适用的原因。同样,您在 svg 中编写的 css 将不适用于您网站的其余部分。

将 css 直接添加到 svg:这不是一个好的解决方案,因为您最终会在使用的每个 svg 中重写 css。

真正的解决方案:“图标系统”。 Svg 字体或 svg Sprite 。阅读更多关于它们的信息 here .

不透明度起作用的原因:不透明度适用于 svg 对象/框架本身,而不是 svg 的内容(不可访问)。

我还应该注意,无论您如何通过引用将这些 svg 内联加载到对象中作为背景,您都无法进入沙箱。这就是为什么将它们转换为字体或使用 Sprite 对于使用悬停、焦点和其他效果/过渡是必要的。

关于html - 使用 CSS 操作外部 svg 文件样式属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22252409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com