2014-11-05 4 views
0

Возможно относительный простой вопрос, но я не могу найти ответ на него:Круг заполнения SVG CSS

Можно ли заполнить круг с цветом степени (с определенным радиусом)? Или у вас есть две граничные линии - одна цветная и одна белая с цветом заливки?

style="fill:steelblue; stroke-width: 2px; stroke: #8cc63f;" 

Я ищу, чтобы достичь что-то вроде этого (или аналогичный) в этом fiddle:

enter image description here

+0

вы можете сделать это с помощью 'коробки shadow' [как это] (http://jsfiddle.net/ agv6jr0h/1 /) –

+0

Восемь, извиняюсь, я должен был подготовить скрипку SVG. Может ли ваш ответ быть адаптирован в этом [пример] (http://jsfiddle.net/agv6jr0h/3/)? –

ответ

1

ты это хотел? надеюсь, что это поможет!

var svg = d3.select('body').append('svg') 
.attr('class', 'chart') 
.attr('width', 300) 
.attr('height', 300) 
.append('g') 
.attr('transform', 'translate(100, 100)'); 

svg.append('g') 
.append('circle') 
.attr('r', 30) 
.style('stroke', 'red') 
.style('stroke-width', '6px') 
.style('fill', 'red') 
.style('fill-opacity', 0) 
; 

fiddle

+0

Я не уверен ... Взгляните на эту [скрипку] (http://jsfiddle.net/agv6jr0h/3/). Вы видите, что у второго есть идентификатор границы зеленого цвета как белый пробел (другая граница, не уверен, как его называть) между зеленой границей и заливом. Точно как его в вопросительном изображении –

1

Edit от комментариев:
Как я не нашел, как применить CSS "фоновое изображение" в circle элементов, я добавил путь с помощью JS.

Или вы можете добиться этого с помощью gradients и здесь особенно radial-gradients:

var svg = document.querySelectorAll('svg')[0], 
 
    r = 30, 
 
    cy = 60, 
 
    nr = r - (r * 0.7), 
 
    c1 = document.querySelectorAll('circle')[0], 
 
    //Assuming you already have those ones 
 

 
    //first make a copy of the circle you just made 
 
    c2 = c1.cloneNode(); 
 

 
//then apply new styles to the first circle 
 
c1.setAttributeNS(null, "fill", "transparent"); 
 
c1.style.stroke = "#8cc63f"; 
 
c1.style.strokeWidth = "2px"; 
 
c1.parentNode.appendChild(c2); 
 

 
//and to the new one 
 
c2.setAttributeNS(null, "fill", "red"); 
 
c2.style.strokeWidth = "0"; 
 
c2.r.baseVal.value = r - nr; //change its radius 
 

 
//Wrap thoe elements into a single g that will act as one element 
 
var g = document.createElementNS("http://www.w3.org/2000/svg", 'g'); 
 
g.appendChild(c2); 
 
g.appendChild(c1); 
 
svg.appendChild(g)
<svg width="720" height="120"> 
 
    <defs> 
 
    <radialGradient id="gradient"> 
 
     <stop offset="0%" stop-color="red" /> 
 
     <stop offset="70%" stop-color="red" /> 
 
     <stop offset="71%" stop-color="transparent" /> 
 
    </radialGradient> 
 
    </defs> 
 
    <circle cx="40" cy="60" r="30"></circle> 
 
    <circle cx="120" cy="60" r="30" style="fill:url(#gradient); stroke-width: 2px; stroke: #8cc63f;"></circle> 
 
</svg>

+0

Я уверен, что с помощью css должен быть проще, чем загромождать мои js этим ... но я думаю, это должно будет сделать. Спасибо –

+0

Да, вы можете сделать то же самое с css [радиальные градиенты] (https://developer.mozilla.org/en-US/docs/Web/CSS/radial-gradient), а также – Kaiido

+0

. Можете ли вы привести пример, используя css для круга svg? –