14

我试图用 CSS 为 svg-sprite 设置动画。我创建了一个精灵并从 gulp 注入它:

gulp.task('svgstore', function () {
var svgs = gulp
    .src('app/svg/*.svg')
    .pipe(svgmin(function (file) {
        return {
            plugins: [{
                cleanupIDs: {
                    minify: true
                }
            }]
        }
    }))        
    .pipe(svgstore({ inlineSvg: true }));

function fileContents (filePath, file) {
    return file.contents.toString();
}   

return gulp
    .src('app/*.html')
    .pipe(inject(svgs, { transform: fileContents }))
    .pipe(gulp.dest('app/'))
});

…并将图像从精灵插入到 HTML:

<svg class="icon-ufo" >
    <use xlink:href="img/sprite.svg#ufo" aria-hidden="true"></use>
</svg>

它运行良好,但下图显示影子 DOM 已关闭。

svg 阴影 dom

我如何在没有 JavaScript 的情况下为这个 SVG 的某些样式设置动画?但是如果 JavaScript 是唯一的方法,那么如何做得更好呢?

4

2 回答 2

19

被引用元素的 DOM 不是引用 HTML 页面的 DOM 的一部分。它有独立的样式表。

但是阴影元素继承了引用<use>元素的样式。这意味着只要引用的元素没有在 sprite 或与 sprite 关联的样式表中设置样式本身,您就可以通过设置<use>元素的样式来更改(和动画化)图标上每个可继承的样式属性。

于 2017-12-10T22:49:28.980 回答
8

您可以在填充属性中使用“currentColor”属性来设置样式: 图标.svg

“icon-ufo”类的样式和样式会像

.icon-ufo {
    color: green;
}

.icon-ufo:hover {
   color: red;
}
于 2019-05-31T13:07:14.560 回答