Vedere il codice qui sotto - Sto cercando di includere inline svg nel mio sito web. Sto seguendo a neat suggestion per usare l'elemento switch svg in modo che si degradi con grazia sui browser più vecchi. L'idea è che i browser che supportano svg usano il primo elemento nel blocco switch; quelli che non ignorano tutti i tag svg e mostrano semplicemente l'img sepolto nel secondo elemento (cioè il tag foreignobject) del blocco switch.inline svg in html - come degradare con grazia?
Funziona davvero bene ... a parte che il mio SVG (che è di spartiti) include necessariamente elementi di testo e ottengono reso (così come il foreignObject) dai browser più vecchi.
Ironia della sorte è facile affrontare questo in IE8 e sotto usando i commenti condizionali.
Per altri browser più vecchi ho un javascript di lavoro all'interno del foreignobject che ridefinisce la classe del testo svg. Funziona ... ma sembra un vero trucco.
C'è un modo migliore per farlo (migliore javascript, una soluzione css, un altro modo di fare il testo svg ...)?
Comunque ecco le ossa nude del codice:
<html>
<head>
<!-- this deals with elements using the svgtext class in old IE browsers -->
<!--[if lte IE 8]>
<style type="text/css">
.svgtext { display: none; }
</style>
<![endif]-->
<style type="text/css">
.donotdisplay { display: none; }
</style>
</head>
<body>
<svg ...>
<switch>
<g>
<!-- the svg goes here -->
<text class="svgtext">this gets rendered unless I deal with it</text>
</g>
<foreignObject ...>
<script type="text/javascript">
window.onload=function(){
var inputs=document.getElementsByTagName('text');
for(i=0;i<inputs.length;i++){
inputs[i].className='donotdisplay';
}
}
</script>
<!-- the replacement img tag goes here -->
</foreignObject>
</switch>
</svg>
</body>
</html>
mi piacerebbe guardare RaphaelJS, nel caso in cui ha disposizione per il rilevamento funzione - o forse Modernizr. Neanche usato, ma sarebbero entrambi valsi la pena. – halfer
Quali altri vecchi browser oltre a IE8 che non supportano SVG stai cercando di supportare? –
@halfer - Modernizr aggiungerà una classe 'svg' o' no-svg' all'intero documento, che può essere controllato in codice o con un selettore CSS. Non risolverà automaticamente il problema, ma lo rende abbastanza facile da controllare. –