2015-12-11 12 views
5

SVG ile bir çizgi oluşturuyorum ve web sayfamda bulanık görünüyor. Daha açık olmak gerekirse, 1px inme genişliğinden daha büyük görünür. Bu neden oluyor ve SVG'de düzeltmenin bir yolu var mı?1px belirttiğimde neden SVG hattım bulanık veya 2px yüksekliğinde?

İşte kod. Bu kodu kendi başıma çalıştırdığımda bulanık değil. Benim web sayfasında geldiğinde onun Y tam pikselden üzerinde yalan koordinatları zaman 1px inme böylece etrafında olup Çünkü çizgi 1.

#HorizontalLine1178 { 
 
\t stroke:rgb(154,154,154); 
 
\t stroke-width:1; 
 
}
<svg style="width:100%;"> 
 
    <line id="HorizontalLine1178" y2="97" y1="97" x2="100%" x1="62" > 
 
</svg>

+1

Olası yinelenen svg rectangles] (http://stackoverflow.com/questions/23376308/avoiding-lines-between-adjecent-svg-rectangles) –

+0

@PaulLeBeau Gönderiyi güncelledim. myf'un cevabı, diğer gönderide olmayan yeni ek bilgileri içerir. –

+0

Paranın nerede olduğu konusunda kredi vermek için Pauls, cevaplarında da yorumlarda bulundu; Hatta ondan o zaman bile bunu öğrendim: https://stackoverflow.com/questions/23376308/avoiding-lines-between-adjecent-svg-rectangles#comment56203656_23376793 – myf

cevap

11

yerine yaklaşık 2px yüksekliğinde olduğu anlaşılıyor "kenar yumuşatma". Yarım piksel bu durumda koordinatları kullanın veya sizin için yuvarlama pikseli yapacak shape-rendering="crispEdges" uygulamak, ama daha yuvarlak nesneler üzerinde keskin kenarları üretecek: [adjecent arasındaki çizgiler kaçınmak ait

rect , circle, line { 
 
\t stroke: rgb(154,154,154); 
 
\t stroke-width: 1; 
 
\t fill: none; 
 
}
<svg style="width:100%;"> 
 
\t <line y2="10.0" y1="10.0" x2="90%" x1="10" /> 
 
\t <line y2="15.5" y1="15.5" x2="90%" x1="10" /> 
 
\t <line y2="20.0" y1="20.0" x2="90%" x1="10" shape-rendering="crispEdges" /> 
 
\t <circle cy="50" cx="20" r="10" /> 
 
\t <circle cy="50" cx="50" r="10" shape-rendering="crispEdges" /> 
 
\t <rect x="90" y="40" width="20" height="20" /> 
 
\t <rect x="120" y="40" width="20" height="20" shape-rendering="crispEdges" /> 
 
\t <rect x="149.5" y="39.5" width="20" height="20" /> 
 
\t <rect x="190" y="40" width="20" height="20" style="stroke: none; fill: black" /> 
 
</svg>

+0

Harika örnekler. Bu yüzden, bir vuruşun yükseklikte 1px (yatay çizgi) ve dikey konum tek sayı olduğu, yani "81" in "80" değil, bu konumu 1px'i tutmak için "81.5" e değiştirmem gerektiğinden yükseklikte mi? –

+0

Güncellemenizi göremiyorum. CrispEdges ayarı harika görünüyor. Neden dolduramayacağınız için Line'ı koydu? Varsayılan olarak doldurma var mı? –

+0

Tek/çift değil: * vuruşlar * işlenen koordinatları bağlayan * etrafında * çizgiler olduğunu ve tüm koordinatların piksel sınırlarını ifade ettiğini unutmayın. Bağlantılı sorudaki Pauls yanıtını görün, daha iyi açıklıyor. Reklam satır için 'doldur': Hayır, sadece 'rect's etkilemek için seçici haline parçaladı. – myf

İlgili konular