あなたが見ているのはバグではありません。それが正しい振る舞いです。デフォルトでは、ブラウザーは SVGビューボックス(用語に注意してください。ブラウザーのビューポートについて話しているわけではありません) をスケーリングして、CSS によって決定された SVG 要素の寸法を埋めます。塗りつぶしの動作は、SVG preserveAspectRatio属性によって決定されます。デフォルトでは に設定されmeet
ており、SVG 全体を表示可能にし、縦横比を維持します。別の方法としてslice
、トリミングを意味する場合でも、要素をカバーするためにビューボックスを拡大します。( CSS3slice
と同様に動作します。)background-size:cover
あなたがする必要があるのは:
a) SVG ファイルで高さや幅を明示的に宣言しないでください。グラフィックエディタがそれらを生成している場合は、手動で削除してください。仕様によると、幅と高さが指定されていない場合、100% の値が想定されるため、疑似コードはせいぜい冗長です。
b) CSS で svg 要素の明示的な高さを設定していることを確認します。Chrome 18 Dev Tools にはバグが修正されているため、レスポンシブ svg サイズのトラブルシューティングには Chrome の開発者ビルドまたは Canary ビルドをお勧めします。Chrome で動作するようになれば、ほぼ確実に Safari でも動作します。
c) preserveAspectRatio を設定する方法を理解し、手動で svg を編集して宣言に入れます。
それでも問題が解決しない場合は、jsfiddle を投稿してください。他の人がコメントするのははるかに簡単です。