Mam złożone okno dialogowe oparte na Jquery-UI i chcę dostarczyć obraz SVG jako tło. Próbowałem zrobić to najpierw w prostym pliku testowym i nie działa, chociaż SVG, jako samodzielny obraz, działa dobrze. Oto kod uproszczony:SVG jako obraz w tle w div nie działa
<script>
$(document).ready(function() {
svg = "<svg width='400' height='400' fill='url(#grad1)' \
xmlns='http://www.w3.org/2000/svg'> <rect id='bkgrect' width='400' \
height='400' style='fill:'url(#grad1)'; stroke-width:3;'/> <defs>\
<linearGradient id='grad1' x1='0' y1='20%' x2='0%' y2='100%'> \
<stop id='stop1' offset='0%' stop-color='blue'/> <stop offset='100%' \
stop-color='white'/> </linearGradient> </defs> </svg>";
svgBase64 = btoa(svg);
bkgrndImg = "url('data:image/svg+xml;base64,"+ svgBase64 +"')";
$('#testDiv').css('background-image', bkgrndImg);
});
</script>
</head>
<body>
<div id='testDiv' style="border:2px solid red;width:400px;height:400px;
position:absolute;left:100px;top:100px;"> Some SVG Div </div>
<svg ... /svg>
... SVG/SVG SVG jest taka sama jak stosowana w tle i wyświetla prawidłowo.
Po przeanalizowaniu różnych rozwiązań opieram się głównie na poście this. Próbowałem również symulować obraz SVG w tle za pomocą indeksu z-Z i pozycjonowania obrazu w Div jako obrazu, ale to nie jest dobra poprawka. Chcę, aby SVG był obrazem tła, który działałby płynnie w przeglądarkach, ponieważ gradienty SVG są dobrze obsługiwane we wszystkich nowoczesnych przeglądarkach i myślę, że nadszedł czas, by potencjał SVG w pełni się zrealizował.
Czy musisz mieć go jako base64? Czy możesz nie tylko zewnętrznie linkować do svg jak normalny obraz? 'background: url (../ images/fancy.svg)' Jeśli svg nie jest dynamiczny, łatwiej jest go zachować jako zwykły plik. – Lex
@Lex Chcę go wstawić, więc mogę go dynamicznie zmieniać za pomocą JS. – Sam
post, o którym wspomniałeś, prosi o ucieczkę #, którego nie zrobiłeś, ponieważ widzę # zastąpiony przez% 23. – uzma