この回答の日付の時点で投稿された、クリーンで高速で簡単なソリューションは満足のいくものではありません。それらは、SVG 文書には z オーダーがないという欠陥のあるステートメントに基づいて構築されています。ライブラリも必要ありません。xyz 空間で 2D オブジェクトを移動するアプリの開発で必要となる可能性がある、オブジェクトまたはオブジェクトのグループの z オーダーを操作するためのほとんどの操作を 1 行のコードで実行できます。
ZオーダーはSVGドキュメントフラグメントに確実に存在します
SVG ドキュメント フラグメントと呼ばれるものは、ベース ノード タイプ SVGElement から派生した要素のツリーです。SVG ドキュメント フラグメントのルート ノードは、HTML5 <svg>タグに対応する SVGSVGElementです。SVGGElement は<g>タグに対応し、子の集約を許可します。
CSS のように SVGElement に z-index 属性を設定すると、SVG レンダリング モデルが無効になります。W3C SVG 勧告 v1.1 第 2 版のセクション 3.3 および 3.4 では、SVG ドキュメント フラグメント (SVGSVGElement から派生したツリー) は、ツリーの深さ優先検索と呼ばれるものを使用してレンダリングされると述べられています。そのスキームは、用語のあらゆる意味で z オーダーです。
Z オーダーは、実際にはコンピューター ビジョンのショートカットであり、レイ トレーシングの複雑さとコンピューティング要求を伴う真の 3D レンダリングの必要性を回避します。SVG ドキュメント フラグメント内の要素の暗黙的な z インデックスの線形方程式。
z-index = z-index_of_svg_tag + depth_first_tree_index / tree_node_qty
正方形の下にあった円を上に移動したい場合は、円の前に正方形を挿入するだけなので、これは重要です。これは JavaScript で簡単に実行できます。
サポート方法
SVGElement インスタンスには、シンプルで簡単な z オーダー操作をサポートする 2 つのメソッドがあります。
- parent.removeChild(子)
- parent.insertBefore(子、子参照)
混乱しない正解
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' 要素 (コンテナ要素を参照) などのグループ化要素には、子要素が描画される透明な黒に初期化された一時的な別のキャンバスを生成する効果があります。グループが完了すると、グループに指定されたフィルター効果が適用され、変更された一時的なキャンバスが作成されます。変更された一時キャンバスは、グループのグループ レベルのマスキングと不透明度の設定を考慮して、背景に合成されます。