Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

358
Views
SVG fill="url(#foo)" desaparece cuando los SVG se cargan dinámicamente

Estoy cargando diferentes SVG dinámicamente dentro de una aplicación web creada en AngularJS, también estoy alterando la opacidad de las capas dentro de los SVG. Estos SVG tienen algunas rutas con la propiedad de patrón de relleno como tal

 <defs> <pattern id="glass-floral" patternUnits="userSpaceOnUse" width="184" height="272"> <image xlink:href="../img/glass-floral.png" x="0" y="0" width="184" height="272"/> </pattern> </defs> <rect x="98.3" y="85.5" fill="url(#glass-floral)" width="365" height="318.8"/>

Todo esto funciona muy bien al principio; sin embargo, bajo algunas condiciones, estos # rellenos simplemente desaparecen:

-

Condición 1 : si tuviera que cambiar a otro SVG y viceversa.

Resultado: : El relleno # aún es visible.

-

Condición 2 : si tuviera que alterar la opacidad del elemento con el relleno #.

Resultado: : El relleno # aún es visible.

-

Condición 3 : si tuviera que cambiar a otro SVG y alterar la opacidad del elemento con el relleno #.

Resultado: : El relleno # se vuelve invisible.

-

Esto significa que todos los estilos parecen aplicarse normalmente en el código, pero no se ve ningún relleno visible real. Este comportamiento existe por lo que puedo ver en Chrome y ligeramente diferente en Safari. Firefox parece ser inmune.

Intenté pasar manualmente el elemento a otro relleno y volver al navegador para ver si tal vez algo se había almacenado en caché, sin suerte. Todavía creo que este puede ser el caso de alguna manera, con la forma en que # se refiere a un patrón en línea definido en <defs> que puede que AJAX aún no haya cargado, pero la regla CSS almacenada en caché sigue flotando.

Si ayuda, los dos SVG entre los que estoy cambiando tienen el mismo <defs> y CSS aplicado. ¿Quizás el caso doble del patrón definido está causando un problema?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Después de algunas investigaciones, esto parece ser un problema con los navegadores (Chrome/Safari posiblemente otros) que no pueden mantenerse al día con el relleno de representación: url (#) y la opacidad para el mismo elemento al mismo tiempo, al menos en casos de múltiples /SVG cargados dinámicamente.

Para resolver esto, aplique su css de opacidad a un elemento contenedor alrededor del elemento que tiene el relleno: url (#), ejemplo a continuación:

 <defs> <pattern id="glass-floral" patternUnits="userSpaceOnUse" width="184" height="272"> <image xlink:href="../img/glass-floral.png" x="0" y="0" width="184" height="272"/> </pattern> </defs> <style>.opacity-class { opacity: 0.33; }</style> <g class="opacity-class"> <rect x="98.3" y="85.5" fill="url(#glass-floral)" width="365" height="318.8"/> </g>

Esto permite que el navegador haga ambas cosas de forma independiente y no arruine tus bonitas imágenes.

over 4 years ago · Santiago Trujillo Report

0

Tenía varios elementos svg y el problema era el mismo ID de todas las etiquetas de pattern . Entonces, usar diferentes id="" para la etiqueta de pattern de cada elemento svg resolvió mi problema con la desaparición de fill="url()" en la recarga dinámica...

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!