CSS:
img{
max-height:30px;
}
HTML:
<img src="foo.svg" />
最大30ピクセルの高さに比例してスケーリングするこのsvg画像を探しています。 svgの自然な寸法は200x200ピクセルです。 FFおよびChrome(30x30)でうまく動作しますが、IE9では画像は30x200です。今度はキッカーです。特定のSVGファイルでのみ発生し、他のsvgは正しくスケーリングします。
違いは、1つはポリゴンで作成され、もう1つはパスで作成されているようです。
正しくスケーリングされない:
http://www.radiantinteractive.com/rs/images/allies/other/crocs.svg
正しくスケーリングします:
なぜこれが起こるのか、またはIE9で最初に比例してスケーリングする方法はありますか?
ブラウザ間でより一貫したスケーリングを得るには、必ずviewBox
を指定し、width
要素のheight
およびsvg
属性を指定しないようにしてください。 テストページの作成 CSSで指定された幅と高さと組み合わせて、異なるSVG属性を指定した場合の効果を比較しました。いくつかの異なるブラウザで並べて比較すると、処理に多くの違いがあります。
Ie9で修正し、これにこだわらないようにします。理由はわかりませんが、css-ruleでwidth:100%を設定する必要がありますが、img-tagでは設定しないでください。アスペクト比は魔法で機能します))それは私を助けました、この投稿が他の人を助けることを願っています。
こちらもご覧ください: https://Gist.github.com/larrybotha/7881691 -これはこの「物語」の続きです。
<img>
タグのSVGを修正IE9、IE10、およびIE11は、img
、viewBox
、およびwidth
属性が指定されている場合、height
タグが追加されたSVGファイルを適切にスケーリングしません。さまざまなブラウザで このcodepen を表示します。
画像が画像幅より狭いコンテナ内にある場合、画像の高さは拡大縮小されません。これは2つの方法で解決できます。
sed
を使用して、SVGファイルの幅と高さの属性を削除しますStackoverflowのこの回答 のとおり、width
属性とheight
属性のみを削除することで問題を解決できます。
この小さなスクリプトは、現在の作業ディレクトリでSVGファイルを再帰的に検索し、ブラウザ間の互換性のために属性を削除します。
find ./ -name '*.svg' -print0 | xargs -0 sed -i "" -e 's/width="[0-9]*\.*\[0-9]*" //' -e 's/height="[0-9]*\.*\[0-9]*" //'
幅と高さの属性を削除すると、画像がIE以外のブラウザでコンテナの幅いっぱいに表示されます。
IE10(他のブラウザではテストが必要)は、画像を任意のサイズに縮小します。つまり、それらの画像をコンテナに合わせるには、CSSにwidth: 100%
を追加する必要があります。
とにかく上記のソリューションはCSSを必要とするため、ハックを使用してIEを取得し、個々のSVGファイルを管理する必要はありません。
以下は、SVGファイルを含むすべてのimg
タグをIE6 +でターゲットにします(ただし、IE9 +のみがSVGファイルをサポートします)。
/*
* Let's target IE to respect aspect ratios and sizes for img tags containing SVG files
*
* [1] IE9
* [2] IE10+
*/
/* 1 */
.ie9 img[src*=".svg"] {
width: 100%;
}
/* 2 */
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
img[src*=".svg"] {
width: 100%;
}
}
これは、IE9、IE10、およびIE11の「.svg」を含むすべてのimg
タグを対象としています。特定の画像でこの動作が望ましくない場合は、その画像のこの動作をオーバーライドするクラスを追加する必要があります。
私は週間を費やして、あらゆる種類のソリューションを試して、主要な最新のブラウザで動作するサイズに適応可能なウェブサイトでSVGを使用できるようにしました。
SVGは、CSSパーセンテージを使用してスケーリングし、埋め込みビットマップ画像を含める必要があります。
IE)でサイズ変更の割合を見つけたonlyソリューションは、外部SVGを<に埋め込むことです object>タグ。
IEでSVGのサイズを変更するためのさまざまな解決策があり、ピクセルサイズを厳密にしますが、いずれもパーセントサイズ変更には機能しません。
非網羅的なテストスイート here を作成しました。
どういうわけか、このscssは私の問題を修正しました。
ul {
li {
list-style: none;
margin: 0;
padding: 0;
display: inline;
img {
height: 20px;
margin: 0 10px;
display: inline-block;
}
}
}
私は実際にフッター用のロゴの中央リストを作成していましたが、幅の問題がありました。通常、内部にブロック要素を持つインラインブロックを作成します。インラインブロック要素を使用してインライン要素を作成すると、うまくいきました。これはバグが私に見せた特定の実装であり、すべてのバグを実際に解決するわけではありませんが、これを読んでいる人の助けになることを願っています。