【发布时间】:2017-09-11 09:48:45
【问题描述】:
我想在使用时改变图案的颜色。
例如,我想在红色描边的圆圈中有一个绿色图案。
<svg width="300" height="300" viewBox="0 0 300 300"
xmlns="http://www.w3.org/2000/svg">
<defs>
<pattern id="checked" width="2" height="2" stroke="black" stroke-linecap="square" stroke-width="1" patternTransform="rotate(45) scale(2)"
patternUnits="userSpaceOnUse">
<line x1="0" y1="0" x2="0" y2="2"></line>
<line x1="0" y1="0" x2="2" y2="0"></line>
</pattern>
</defs>
<circle cx="60" cy="60" r="50" stroke="red" fill="url(#checked)"/>
<circle cx="120" cy="60" r="50" stroke="blue" fill="url(#checked)"/>
</svg>
http://codepen.io/anon/pen/RVNmRY
是否可以在不必为每种颜色创建新图案的情况下这样做?
我在评论中读到这可能使用过滤器 (https://stackoverflow.com/a/21427316/1981832)。但我不知道怎么做。
【问题讨论】:
-
每种颜色的图案有什么问题?
-
@RobertLongson 谢谢。在我的页面上,用户应该能够选择要绘制的颜色和图案。每种颜色都有一个图案意味着每次用户切换颜色时我都必须在页面上附加一个新图案。这对我来说似乎很麻烦。但也许我在这里忽略了一些东西。
-
将颜色名称放入模式 id(或数据属性)中,如果不存在则创建它。您可以在 CSS 中设置颜色并更新 CSS,但这会影响具有该模式的所有现有形状。
-
@RobertLongson:无法使用 CSS,因为没有它我需要支持独立的 SVG。如果我正确理解了 pattern-id 的想法,那么每次用户选择用新颜色绘制图案时,我都必须创建并附加一个新图案。是的,这可行,但看起来仍然很麻烦,并且会在 SVG 中添加大量代码,这些代码仅略有不同,即笔触颜色。
-
不确定你的意思,但独立 SVG 支持 CSS,只要你从独立文件本身链接到 CSS。
标签: svg colors svg-filters