2017-12-10 5 views
1

Ich habe versucht, ein SVG-Sprite mit CSS zu animieren. Ich habe ein Sprite und injiziert es von schluck erstellt:SVG Shadow-Root ist geschlossen

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/')) 
}); 

... und Bilder aus dem Sprite zu HTML eingefügt:

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

Und es funktioniert gut, aber die folgende Abbildung zeigt den Schatten DOM ist geschlossen.

svg shadow dom

Wie kann ich ohne JavaScipt einige Stile dieser SVG animieren? Aber wenn JavaScipt der einzige Weg ist, wie man es besser macht?

Antwort

2

Das DOM des referenzierten Elements ist nicht Teil des DOM der referenzierenden HTML-Seite. Es hat Stylesheets isoliert.

Das Schattenelement erbt jedoch Stile aus dem referenzierenden <use> Element. Solange das referenzierte Element die Stile selbst nicht im Sprite oder in einem mit dem Sprite verknüpften Stylesheet festlegt, können Sie jede vererbbare Stileigenschaft des Symbols ändern (und animieren), indem Sie das Element <use> stylen.

+0

Wie wäre es mit __path__ Attributen wie _fill_? –

+0

@ yuяi 'fill' ist ein [Präsentationsattribut] (https://www.w3.org/TR/SVG11/styling.html#UsingPresentationAttributes), was bedeutet, dass es als Attribut geschrieben werden kann, aber wie ein Stil behandelt wird Regel für das Element wurde am Anfang der Benutzer-Stylesheets eingefügt. – ccprog

Verwandte Themen