이 답변 날짜에 게시 된 깨끗하고 빠르고 쉬운 솔루션은 불만족 스럽습니다. SVG 문서에는 z 순서가 없다는 잘못된 설명으로 구성됩니다. 라이브러리도 필요하지 않습니다. 한 줄의 코드는 대부분의 작업을 수행하여 xyz 공간에서 2D 객체를 이동시키는 앱 개발에 필요할 수있는 객체 또는 객체 그룹의 z 순서를 조작 할 수 있습니다.
SVG 문서 조각에 Z 순서가 존재 함
SVG 문서 조각은 기본 노드 유형 SVGElement에서 파생 된 요소 트리입니다. SVG 문서 조각의 루트 노드는 SVGSVGElement이며 HTML5 <svg> 태그에 해당합니다. SVGGElement는 <g> 태그에 해당하며 자식을 집계 할 수 있습니다.
CSS에서와 같이 SVGElement에 z-index 속성이 있으면 SVG 렌더링 모델이 무효화됩니다. W3C SVG 권장 사항 v1.1 2 판의 3.3 절과 3.4 절에서는 SVG 문서 조각 (SVGVSElement의 자손 나무)을 트리의 깊이 우선 검색 이라고하는 것을 사용하여 렌더링한다고 설명 합니다 . 이 계획은 모든 의미에서 z 순서입니다.
Z 순서는 실제로 레이 트레이싱의 복잡성과 컴퓨팅 요구와 함께 진정한 3D 렌더링이 필요하지 않도록하는 컴퓨터 비전 바로 가기입니다. SVG 문서 조각에서 요소의 암시 적 z- 색인에 대한 선형 방정식.
z-index = z-index_of_svg_tag + depth_first_tree_index / tree_node_qty
정사각형 아래에있는 원을 그 위로 이동하려면 원 앞에 정사각형을 삽입하기 만하면됩니다. 이것은 JavaScript에서 쉽게 수행 할 수 있습니다.
지원 방법
SVGElement 인스턴스에는 간단하고 쉬운 z 순서 조작을 지원하는 두 가지 메소드가 있습니다.
- parent.removeChild (child)
- parent.insertBefore (child, childRef)
혼란을 일으키지 않는 정답
SVGGElement ( <g> 태그)는 SVGCircleElement 또는 다른 모양처럼 쉽게 제거하고 삽입 할 수 있기 때문에 SVGGElement 를 사용하여 Adobe 제품 및 기타 그래픽 도구의 일반적인 이미지 레이어를 쉽게 구현할 수 있습니다. 이 JavaScript는 기본적으로 아래 로 이동 명령입니다.
parent.insertBefore(parent.removeChild(gRobot), gDoorway)
SVGGElement gRobot의 자식으로 그려진 로봇 레이어가 SVGGElement gDoorway의 자식으로 그려진 출입구 앞에있는 경우, 출입구의 z 순서는 이제 로봇의 z 순서에 1을 더하기 때문에 로봇은 출입구 뒤에 있습니다.
위 이동 명령은 쉽게 거의이다.
parent.insertBefore(parent.removeChild(gRobot), gDoorway.nextSibling())
이것을 기억하기 위해 a = a와 b = b를 생각하십시오.
insert after = move above
insert before = move below
뷰와 일치하는 상태로 DOM을 떠나기
이 답변이 옳은 이유는 Adobe 제품이나 기타 잘 디자인 된 그래픽 편집기의 내부와 같이 최소화되고 완벽하기 때문입니다. 렌더링으로 작성된 뷰와 일치하는 상태로 내부 표현을 유지합니다.
대안이지만 접근 방식
일반적으로 사용되는 또 다른 방법은 CSS z-index를 아래쪽 배경을 제외한 대부분 투명한 배경을 가진 여러 SVG 문서 조각 (SVG 태그)과 함께 사용하는 것입니다. 다시 말하지만, 이는 SVG 렌더링 모델의 우아함을 없애고 z 순서로 객체를 위 또는 아래로 이동하기 어렵게 만듭니다.
노트:
- ( https://www.w3.org/TR/SVG/render.html v 1.1, 2 판, 2011 년 8 월 16 일)
3.3 SVG 문서 조각의 렌더링 순서 요소는 암묵적인 그리기 순서를 가지며 SVG 문서 조각의 첫 번째 요소는 "페인트"됩니다. 후속 요소는 이전에 페인트 한 요소 위에 페인트됩니다.
3.4 그룹을 렌더링하는 방법 'g'요소 (컨테이너 요소 참조)와 같은 그룹화 요소는 하위 요소가 칠 해지는 투명한 검정으로 초기화 된 임시 별도 캔버스를 생성하는 효과가 있습니다. 그룹이 완료되면 그룹에 지정된 필터 효과가 적용되어 수정 된 임시 캔버스를 만듭니다. 수정 된 임시 캔버스는 그룹의 마스킹 및 불투명도 설정을 고려하여 배경에 합성됩니다.