2014-01-13 4 views
4

Я пытаюсь нарисовать прямоугольник с пунктиром сильным в SVG с помощью D3, но когда я делаю верхнюю и нижнюю пунктирные линии, размыты. Вот мой код:Обводка на прямоугольнике в D3 размыта

var width = 400, 
     height = 400; 

var svg = d3.select('body') 
     .append('svg') 
      .attr('width', width) 
      .attr('height', height) 
     .append('g') 
      .attr('transform', 'translate('+height/2+','+width/2+')'); 

svg.append('rect') 
    .attr('width', '185') 
    .attr('height', '45') 
    .attr('x', -height/2+185/2) 
    .attr('y', -width/2+10) 
    .attr('fill', 'rgba(0,0,0,0)') 
    .attr('stroke', '#2378ae') 
    .attr('stroke-dasharray', '10,5') 
    .attr('stroke-linecap', 'butt') 
    .attr('stroke-width', '3') 

http://jsfiddle.net/sigscotty/9H9PX/

Вот как это выглядит в браузере:

enter image description here

Любой способ получить сверху и снизу хрустящий, глядя, как стороны?

ответ

5

shape-rendering возможно, что вы хотите. shape-rendering="crispEdges" должен сделать это для вашего дела. В качестве альтернативы вы можете использовать атрибуты adjust the y and height, чтобы верхнее и нижнее положения составляли + 0,5.

+0

Форма-рендеринга сделал трюк. Благодаря!! –

+0

Я бы не рекомендовал «настроить атрибуты для центрирования линий по центру пикселя», поскольку он будет разваливаться, если масштабируется SVG в целом. А потому, что настройка формы-рендеринга в CSS намного проще ... – AmeliaBR

+1

Моя проблема заключалась в том, что все строки были размыты в IE. Поэтому я поставил перевод (0,5 0,5) на основной SVG и зафиксировал его. Тем не менее, я абсолютно НЕ НЕНАВИСТЬ, что сдвиг 0,5 - это вещь. Это масштабируемая векторная графика для бога. МАСШТАБИРУЕМАЯ. – QueueHammer

Смежные вопросы