2013-01-10 19 views
14

Mam więc swoje koło SVG.Styl koła SVG z CSS

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

Chcę, aby było 120%, gdy jeden najechanie koła. Próbowałem zarówno szerokości, wysokości i skoku. Nie znalazłem żadnego rozwiązania, które spowodowałoby zwiększenie koła po zawieszeniu. Jakieś sugestie?

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

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

nie wiem, czy istnieje dla SVG, ale co CSS3 przekształcić? – philipp

+0

+1 dla transformacji css, udar nie zadziałał w przykładzie OP, ponieważ nie zdefiniował koloru "obrysu". Użyj tego samego koloru co wypełnienie koła, a będzie wyglądał "większy". – cvsguimaraes

Odpowiedz

22

Jak na SVG 1.1 specyfikacji nie można projektować atrybut z kręgu SVG przy użyciu CSS https://www.w3.org/TR/SVG/styling.html#SVGStylingPropertiesr. Ale można zrobić:

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

W SVG 2, który jest częściowo wspierany przez niektórych nowoczesnych przeglądarkach, można projektować atrybut kręgów za pomocą CSS r. https://www.w3.org/TR/SVG2/styling.html#PresentationAttributes

+4

'onmouseover =" this.setAttribute ('r', '72'); 'powinno działać również dobrze –

+0

Świetne rozwiązanie, nawet jeśli nie było to w CSS .. Dzięki! – Sebastian

+1

Właściwa odpowiedź na 2016 rok wydaje się być tą właściwą autor: Anshul – Fanky

0

Nie jestem pewien, ale nie można w pełni spersonalizować svg tylko przy pomocy css. Jeśli jednak to zrobisz, nie będzie to przeglądarka. W przeszłości używałem svg do tworzenia złożonej mapy, a dla mnie rozwiązaniem było rapheljs.

EDIT:

Korzystanie @phonicx rachunku dla promienia i zmodyfikowanego kodu, mający something, która jest w stanie dostosować każdy okrąg (w przypadku, gdy masz więcej):

<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

Powinno to praca dla Ciebie.

jsfiddle

trzeba manipulować promień i można to zrobić tylko za pośrednictwem 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

To nie przejdzie do oryginalnego rozmiaru na mouseleave –

+0

Tak, wystarczy dodać kod, aby przywrócić stary promień na myszy, i jest to świetna odpowiedź. –

0

posiadają 2 kółka sprawiają, że większy widoczność: ukryte lub display: none. Po najechaniu spraw, aby większy był widoczny, a mniejszy niewidoczny.

1

Użyj tego:

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

Demo Here

18

Chcesz używać tylko CSS? Użyj line zamiast 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 Świetna odpowiedź! Dodałem 'width =" 300 "height =" 300 "' do tagu '', aby móc cokolwiek zobaczyć .. Oczywiście nie możesz narysować konturu koła w ten sposób – stofl

+0

Nie całkiem cykl w moich eksperymentach. :( – Ben

+0

Oto co widzę, wygląda mi to dość okrężnie http://i.imgur.com/cKX9n3a.png @Ben, jakiej przeglądarki używasz? – interestinglythere

5

Jak Phillip sugerowane w komentarzu powyżej można to zrobić z CSS 3 przekształcać.

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

("-webkit" prefix jest dla Chrome tylko)

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

Oto przykład pracy z przejściami CSS też: http://jsbin.com/sozewiso/2

+0

Według http: // caniuse .com/# search = transform, większość producentów zrzuciła prefiksy. Wyjątek (w chwili pisania tego tekstu) to Safari, które nadal używa '-webkit'. – rummik

0

Zapomniałaś kolor obrysu:

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

Wypróbowałem to rozwiązanie, ale było ono wadliwe w Chrome. czasami th e koło to tylko zarys. – Ben

13

Nie jestem pewien, czy osoba n wciąż szuka odpowiedzi, ale dla kogokolwiek innego można to zrobić w CSS (3), ustawiając początek transformacji koła na jego środek.

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

}

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

Zastrzeżenie jest CSS jest teraz w połączeniu z wymiarami i musimy znać dokładny środek okręgu w SVG.

+0

Tak! Plus przedrostki, które mają mieć przeglądarkę (-o-transform-origin, -webkit-transform-origin, -moz-transform-origin, -o-transform, -webkit-transform, -moz-transform) – Fanky

+1

Nieco inna sytuacja, ale zadziałało dla mnie, by wykonać pochodzenie jako "50% 50%" i przejść z 'skali (0,0)' do 'skali (1,1)'. Wyśrodkowany i wciąż nie określający bezwzględnego rozmiaru. – Ben

0

Pracowałem nad czymś innym i natknąłem się na to pytanie. Robię coś podobnego i używam greensock. Animowałem skalę w kilku kręgach przy użyciu Greensock, GSAP. Musiałem animować tranformOrigin i właściwość skalę:

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

Przykład https://codepen.io/grmdgs/pen/RgjdPv

Greensock https://greensock.com/