2013-01-10 21 views
14

Quindi ho il mio cerchio SVG.Stile SVG circle con CSS

<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> 
    <circle cx="168" cy="179" r="59" fill="white" /> 
</svg> 

Voglio che sia del 120% quando si passa il cerchio. Ho provato entrambi con larghezza, altezza e corsa. Non ho trovato alcuna soluzione per rendere il cerchio più grande quando si libra. Eventuali suggerimenti?

circle:hover 
    { 
    stroke-width:10px; 
    } 

circle:hover 
    { 
    height: 120%; 
    width: 120%; 
    } 
+2

non so se esiste per SVG, ma per quanto riguarda css3 trasformare? – philipp

+0

+1 per la trasformazione css, il tratto non ha funzionato nell'esempio OP perché non ha definito un colore 'stroke'. Usa lo stesso colore del cerchio e apparirà "più grande". – cvsguimaraes

risposta

22

Come per la specifica SVG 1.1 non è possibile lo stile l'attributo r di un cerchio SVG usando i CSS https://www.w3.org/TR/SVG/styling.html#SVGStylingProperties. Ma si può fare:

<circle cx="168" cy="179" r="59" 
     fill="white" stroke="black" 
     onmouseover="evt.target.setAttribute('r', '72');" 
     onmouseout="evt.target.setAttribute('r', '59');"/> 

In SVG 2, che è parzialmente supportato da alcuni browser moderni, questo stile l'attributo r dei cerchi usando i CSS. https://www.w3.org/TR/SVG2/styling.html#PresentationAttributes

+4

'onmouseover =" this.setAttribute ('r', '72'); 'dovrebbe funzionare egregiamente –

+0

Ottima soluzione anche se non fosse con i CSS. Grazie! – Sebastian

+1

La risposta giusta per il 2016 sembra essere quella giusta di Anshul – Fanky

0

Non sono sicuro, ma non è possibile personalizzare completamente uno svg solo con css. Tuttavia, se lo farai non sarà cross browser. In passato ho usato svg per creare una mappa complessa e per me la soluzione era rapheljs.

EDIT:

Utilizzando calcolo @phonicx per il raggio Ho modificato il codice, avendo something che è in grado di personalizzare ogni cerchio (nel caso in cui se si dispone di più):

<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> 
    <circle data-precentage='100' cx="168" cy="179" r="59" fill="red" /> 
    <circle data-precentage='120' cx="74" cy="100" r="59" fill="black" /> 
</svg> 
1

Questo dovrebbe Lavoro per te.

jsfiddle

È necessario manipolare il raggio e questo può essere fatto solo tramite javascript:

$(function() { 
    $("svg circle").on("mouseenter", function() { 

     var oldR = $(this).attr("r"); 

     var newR = (((oldR*2)/100)*120)/2; // 120% width 

     $(this).attr("r", newR); 

    }); 
}); 
+1

Non andrà alla dimensione originale su mouseleave –

+0

Sì, basta aggiungere il codice per ripristinare il vecchio raggio sul mouseleave, e questa è un'ottima risposta. –

0

hanno 2 cerchi, rendere il più grande visibility: hidden oppure display: none. Al passaggio del mouse, rendere il più grande visibile e il più piccolo invisibile.

1

Utilizzare questa:

$(function() { 
$('circle').hover(function() { 
$(this).attr('r',100); 
},function(){ 
$(this).attr('r',59); 
}); 
}); 

Demo Here

18

Vuoi utilizzare solo CSS? Utilizzare line anziché circle.

<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> 
    <style> 
    .circle { 
     stroke-width: 59; 
     stroke-linecap: round; 
    } 
    .circle:hover { 
     stroke-width: 71; 
    } 
    </style> 
    <line x1="168" y1="179" x2="168" y2="179" stroke="white" class="circle" /> 
</svg> 

http://jsfiddle.net/rLk7rd8b/

+1

+1 Ottima risposta! Ho aggiunto 'width =" 300 "height =" 300 "' al tag '' per poter vedere qualsiasi cosa.Naturalmente non è possibile tracciare i contorni del cerchio in questo modo. – stofl

+0

Non proprio circolare nei miei esperimenti :( – Ben

+0

Ecco quello che vedo, mi sembra piuttosto circolare. http://i.imgur.com/cKX9n3a.png @Ben, che browser stai usando? – interestinglythere

5

Come Phillip suggerito nel commento di cui sopra si può fare questo con i CSS 3 trasformare.

circle:hover { 
    -webkit-transform: scale(x, y); 
    } 

(prefisso "-webkit" è per Chrome solo)

Vedi https://developer.mozilla.org/en-US/docs/Web/CSS/transform

Ecco un esempio di lavoro con le transizioni CSS troppo: http://jsbin.com/sozewiso/2

+0

Secondo http: // caniuse .com/# search = transform, la maggior parte dei venditori ha abbandonato i prefissi. L'eccezione (al momento della scrittura) è Safari, che usa ancora '-webkit' – rummik

0

hai dimenticato il colore del tratto:

circle:hover { 
    stroke:white; 
    stroke-width:10px; 
} 
+0

Provato questa soluzione ma era bug in Chrome. A volte funzionava, qualche volta th Il cerchio sarebbe solo un contorno. – Ben

13

Non so se il perso n sta ancora cercando le risposte, ma per chiunque altro, può essere fatto in CSS (3), impostando l'origine della trasformazione del cerchio al suo centro.

circle { 
    transform-origin: 168px 179px; 
    transform: scale(1,1); 

}

circle:hover 
{ 
stroke-width:10px; 
transform:scale(1.2,1.2); 
} 

L'avvertimento essendo CSS è ora accoppiato con dimensioni e dobbiamo conoscere il centro esatto del cerchio nel SVG.

+0

Sì! Prefissi più per averlo cross-browser (-o-transform-origin, -webkit-transform-origin, -moz-transform-origin, -o-transform, -webkit-transform, -moz-transform) – Fanky

+1

Situazione leggermente diversa ma ha funzionato per me per fare l'origine come "50% 50%" e per passare da 'scale (0,0)' a 'scale (1,1)'. Centrato e ancora non specificando una dimensione assoluta. – Ben

0

Stavo lavorando su qualcos'altro e ho trovato questa domanda. Sto facendo qualcosa di simile e sto usando greensock. Ho animato la scala su un paio di cerchi usando Greensock, GSAP. Avevo bisogno di animare tranformOrigin e la proprietà di scala:

TweenMax.staggerFrom(".circle",1,{scale:0,transformOrigin:"50% 50%",ease:Bounce.easeOut}, .08); 

Esempio https://codepen.io/grmdgs/pen/RgjdPv

Greensock https://greensock.com/