2013-06-03 5 views
11

小さなSVGアイコン(9px:9pxズーム:1.5)にCSS3 Zoomを適用すると、SVGアイコンがぼやけることがあります。この場合、シャープでクリーンなアイコンを得るためのアイデアはありますか?前もって感謝します。CSS3を適用するときにsvgのアンチエイリアスをオフにします:要素を拡大しますか?

SVG:

<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" 
     x="0px" y="0px" width="9px" height="9px" viewBox="0 0 9 9" enable-background="new 0 0 9 9"> 
    <g> 
     <g fill="none" transform="translate(0.5, 0.5)"> 
      <g stroke="#000000" stroke-width="0.5" stroke-linecap="square" > 
       <line x1="2" y1="4" x2="6" y2="4"/> 
       <line x1="4" y1="2" x2="4" y2="6"/> 
      </g> 
      <g stroke="#909090" stroke-width="1" stroke-linecap="square" > 
       <rect x="0" y="0" width="8" height="8"/> 
      </g> 
     </g> 
    </g> 
</svg> 
+1

どのブラウザですか?一部のブラウザでは、サイズ変更やズームの際にSVGを再計算しません。 CSS3ズームとは何ですか?ブラウザをズームインするだけでいいのですか?または、非標準IEプロパティ? –

+0

ご質問ありがとうございます。ここには[CSS3 Zoom](http://www.css3.com/css-zoom/)の情報があります。最新のブラウザで広くサポートされています。 ChromeとSafariのiOSでこれを試しています。 – bigbearzhu

+0

はい、これは非標準です。再計算せずにレンダリングされた要素をズームするだけです。代わりにスケール変換関数を使ってみましたか?または、元のSVGを大きくして、最初に表示したときに縮小していますか? –

答えて

21

は解決策自分自身を手に入れました。トリックは、SVG要素への追加です:

shape-rendering="crispEdges" 

をSVG要素に追加しています。 Mozilla MDNから

crispEdges は、ユーザーエージェントがレンダリング速度と幾何学的な精度を超えるアートワークのきれいなエッジ間のコントラストを強調しようとするものがあることを示します。鮮明なエッジを得るために、ユーザエージェントは、すべてのラインとカーブ、または垂直または水平に近い直線のアンチエイリアスをオフにすることがあります()。また、ユーザエージェントは、行の位置と線の幅を調整して、デバイスのピクセルとエッジを揃えることができます。

jsFilddleの違いを参照してください。

+1

誰でもこのブラウザのサポートを知っていますか?それを参照することはできません。 –

+2

2016年現在、ブラウザのサポートはこちらhttp://caniuse.com/#feat=css-crisp-edges – Luciano

+0

期待通りに、2017年9月のcrispEdgesのサポートはFirefoxとSafariに限定されていますFirefoxの結果は他のものよりも 'pixelated'の方が最適です。https://codepen.io/Volker_E/pen/wrBJYb –

関連する問題