SVG использует "модель рисовальщиков" для своего рендеринга, что означает, что элементы, которые появляются раньше в исходном коде / DOM, всегда могут отображаться элементами, которые появляются позже в источнике / DOM. (Это в отличие от HTML, который имеет свойство z-index
, позволяющее переупорядочивать элементы.)
Таким образом, если вы хотите переместить элемент в «верх», вам необходимо повторно вставить элемент в другую точку DOM. Например, см. this demo ; перетащите синие и красные поля так, чтобы они перекрывали друг друга, а затем поочередно нажмите на каждую. Это выполняется строкой 94 в исходном коде:
el.parentNode.appendChild(el); // move to top
Комментарий слегка вводит в заблуждение, поскольку элемент не перемещается в абсолютный top , а должен быть нарисован последним из всех его братьев и сестер. Если вы посмотрите на исходный DOM, вы увидите (упрощенно):
<svg ...>
<g transform="scale(1.2,0.8)">
<rect class="drag resize" ... fill="#c66"/>
<rect class="drag resize" ... fill="#69c"/>
</g>
<circle class="drag sizer" ... r="5"/>
<circle class="drag sizer" ... r="5"/>
</svg>
Таким образом, когда вы щелкаете по прямоугольнику, он переупорядочивается, чтобы стать последним дочерним элементом в группе <g>
, рендеринг после другого прямоугольника в группе, но всегда рендеринг перед желтыми кругами, нарисованными над углами.