以下のコードを参照してください - 自分のウェブサイトにインラインsvgを含めるようにしています。私はa neat suggestionの後にsvg switch要素を使用して、古いブラウザでは正常に機能しなくなるようにしています。その考え方は、svgをサポートするブラウザはスイッチブロックの最初の要素を使用するということです。すべてのsvgタグを無視せず、スイッチブロックの第2の要素(すなわち、異物タグ)に埋め込まれたimgを表示するだけのものである。inline svg in html - 正常に機能を低下させる方法
これは本当にうまくいきます...私のsvgは必ずテキスト要素を含んでいて、古いブラウザでレンダリングされます(foreignオブジェクトも同様です)。
皮肉なことに、条件付きコメントを使用してIE8以下で対処するのは皮肉なことです。
他の古いブラウザでは、私はsvgテキストのクラスを再定義するforeignobjectの中でjavascriptを回避しています。それは動作します...しかし、それは本当のハッキングのように感じます。
これを行うには良い方法がありますか?(javascript、CSSソリューション、svgテキストを行う別の方法...)ここではIE8以外のブラウザおよびそれ以前のためのアイデアだ
<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>
で私は、特徴検出のための引当金を有している場合には、RaphaelJSで見てね。どちらも使用されていませんが、どちらも使える価値があります。 – halfer
IE8以外のSVGをサポートしていない他の古いブラウザでは、サポートしようとしていますか? –
@halfer - Modernizrはドキュメント全体に 'svg'または' no-svg'クラスを追加します。これはコードでチェックすることも、CSSセレクタでチェックすることもできます。自動的には問題は解決しませんが、チェックするのはかなり簡単です。 –