SVG shadow-root已关闭

时间:2017-12-10 20:21:40

标签: css svg gulp shadow-dom svg-sprite

我试图用CSS动画svg-sprite。 我已经创建了一个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 shadow dom

如何在没有JavaScript的情况下为这个SVG的某些样式制作动画?但如果JavaScript是唯一的方法,那么如何更好地做到这一点?

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:0)

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

“ icon-ufo”类的样式将与

.icon-ufo {
    color: green;
}

.icon-ufo:hover {
   color: red;
}