2013-11-01 4 views
3

전체 svg 요소를 채우는 SVG rect 중간에 SVG 경로를 표시하려고했습니다. 지금까지 나는 <g> 태그에 경로 요소를 배치하고, 내가 elementgetBBox()에서 왔 값을 기준으로 그룹을 변환 아무 소용이SVG 경로에 SVG 경로가 표시됩니다.

  1. 에, 다음 일을 시도했습니다. 이 값과 전체 SVG 상자의 값을 사용하여 요소의 크기를 조정하는 데 올바른 숫자를 얻으려고했지만 여전히 적합하지도 않고 중심에 있지도 않습니다.
  2. # 1과 동일한 작업을 수행했지만 <g> 태그 대신 중첩 된 <svg> 태그를 사용하십시오.
  3. 요소 자체를 변형하려고 시도했습니다. 나는 데

주요 문제는 다음과 같습니다

  • 동적으로
  • 경로 요소의 오른쪽으로 걸어 것으로 보인다 광장에 경로 요소에 맞게 할 수있는 방법을 찾을 수가 캔트 몇몇 이유. 상단 및 좌측면과 평행하게하고 싶습니다.

나는 그것이 도움이된다면 jsfiddle of the svg that I'm trying to work with입니다.

+0

그것은에 문제를 해결할 수있을만큼 쉽게를 SVG 캔버스를 확대하여 SVG의 경로를 가운데에 맞 춥니 다 - 높이 및 너비 속성을 600으로 설정하면 작동합니다. http://jsfiddle.net/remus/epTp9/1/ 동적 인 토지에 들어가면, 경로 계산에서 변수의 종류를 사용해야 할 것입니다. – brandonscript

+0

@ r3mus 만약 내가 그렇게했다면, 이미지는 거대하게 보일 것입니다. –

답변

2

여기 여기에 작업 바이올린을

http://jsfiddle.net/epTp9/3/

을의 경로에 대한 변경된 코드입니다. 방법 # 2의

<g transform="scale(0.4)"> 
<path id="star-2-outline" d="M256,128.858l42.98,88.667l97.61,13.478l-71.047,68.278l17.346,96.996L256,349.809l-86.89,46.469l17.346-96.996l-71.047-68.278l97.61-13.478L256,128.858z M256,60.082l-62.978,129.92L49.999,209.75L154.1,309.793l-25.415,142.125L256,383.828l127.315,68.09L357.9,309.793L462.001,209.75l-143.023-19.748L256,60.082z" class="flag-icon" ></path> 

    </g> 
+0

맞습니다. 그러나 정확히 일치하지는 않습니다. –

2

,이 경로의 경계가 무엇인지 명확하지 만약 당신이 바로 그 경계를 찾을 때까지 그냥 뷰 박스 실험, (당신은 그래서 당신이 아닌, 상대 경로 명령을 사용하고 있습니다). 당신의 스타에게는 (50,55 - 460,455)로 밝혀졌습니다.

http://jsfiddle.net/epTp9/4/

및 방법 # 3는 바로 규모를 fuinding 다음 오른쪽 장소에 번역 단지 문제에 대한

<svg viewBox='0 0 350 200' height='200' width='350' xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> 
    <rect width="350" height="200" x="0" y="0" fill="#126d62"></rect> 

    <svg width="350" height="200" x="0" y="0" viewBox="50 55 410 400"> 
     <path id="star-2-outline" d="M256,128.858l42.98,88.667l97.61,13.478l-71.047,68.278l17.346,96.996L256,349.809l-86.89,46.469l17.346-96.996l-71.047-68.278l97.61-13.478L256,128.858z M256,60.082l-62.978,129.92L49.999,209.75L154.1,309.793l-25.415,142.125L256,383.828l127.315,68.09L357.9,309.793L462.001,209.75l-143.023-19.748L256,60.082z" class="flag-icon" ></path> 
     </svg> 

</svg> 

.

<svg viewBox='0 0 350 200' height='200' width='350' xmlns="http://www.w3.org/2000/svg" 
    xmlns:xlink="http://www.w3.org/1999/xlink"> 
    <rect width="350" height="200" x="0" y="0" fill="#126d62"></rect> 

    <path id="star-2-outline" d="M256,128.858l42.98,88.667l97.61,13.478l-71.047,68.278l17.346,96.996L256,349.809l-86.89,46.469l17.346-96.996l-71.047-68.278l97.61-13.478L256,128.858z M256,60.082l-62.978,129.92L49.999,209.75L154.1,309.793l-25.415,142.125L256,383.828l127.315,68.09L357.9,309.793L462.001,209.75l-143.023-19.748L256,60.082z" class="flag-icon" 
      transform="scale(0.5) translate(90 -55) "></path> 

</svg> 

http://jsfiddle.net/epTp9/5/

+0

이 방법은 효과적이지만 잘 맞지 않습니다. 내가 만들고있는 응용 프로그램을 사용하면 배경 이미지가 반으로 나뉘며 때로는 이미지가 보이지 않습니다. [다음은 2 가지 색상으로 보이는 것의 피들입니다.] (http : // jsfiddle.net/epTp9/7 /) –

+0

그건 내 변형이 조금 벗어난 것을 의미합니다. 나는 눈으로 그것을 거의했다. 'translate (95 -55)'로 바꾸면 더 좋습니다. http : // jsfiddle.net/epTp9/9 /'를 참조하십시오. 필자가 나열한 두 가지 방법 중 첫 번째 방법이 더 나은 전체 솔루션 일 것입니다. 올바른 viewBox를 찾으면 여러 위치에서 별을 쉽게 재사용 할 수 있으며 자동으로 중앙에 배치 할 수 있습니다. –

+0

'viewBox' 덕분에 이것이 많은 도움이되었습니다 –

1

당신이 "RECT"의 ID를 맞게 할 RECT를 줄 경우,이 사각형에 스타 맞는 :

var rectBBox = rect.getBBox(); 
var path = document.getElementById("star-2-outline"); 
var pathBBox = path.getBBox(); 

var scaleX = rectBBox.width/pathBBox.width; 
var scaleY = rectBBox.height/pathBBox.height; 
var translateX = rectBBox.x - pathBBox.x; 
var translateY = rectBBox.y - pathBBox.y; 

path.setAttribute("transform", "scale(" + scaleX + ", " + scaleY + ") translate(" + translateX + ", " + translateY + ")"); 
+0

이것은 [여기 제안 된 업데이트가있는 바이올린입니다] (http://jsfiddle.net/epTp9/8/) 작동하지 않는 것 같습니다. 버튼을 클릭해도 아무런 변화가 없습니다. –

+0

실행이 호출되지 않기 때문입니다. 브라우저 오류 로그를 확인하면 오류가있는 사용자의 jsfiddle이 표시됩니다. 동일한 코드가 작동합니다. http://jsfiddle.net/longsonr/epTp9/11/ –

+0

위와 같이 사용하면 가로 세로 비율을 유지할 수 있습니까? 경로? – CLiown

관련 문제