Как SVG 1.1 spec , так и CSS masking spec утверждают это:
Путь отсечения влияет на рендеринг элемента.Это не влияет на внутреннюю геометрию элемента.Геометрия обрезанного элемента (то есть элемента, который ссылается на элемент <clipPath>
через свойство clip-path
или дочерний элемент ссылочного элемента) должна оставаться такой же, как если бы он не был обрезан.r
И это то, что происходит в примере ниже.Так что это может быть не тот результат, к которому относится ваш результат.
Обратите внимание, что результаты для .getBBox()
и .getBoundingClientRect()
отличаются.Это связано с тем, что первый указывает размер в локальной системе координат пользовательского пространства, а последний - размер в пикселях экрана.Может быть неочевидно, что между ними происходит преобразование, поскольку оно может быть скрыто косвенно в отношении между viewBox
, width
и height
атрибутами элемента <svg>
.
const clipped = document.querySelector('#clipped');
const bbox = clipped.getBBox();
console.log(bbox.x, bbox.y, bbox.width, bbox.height);
const bcrect = clipped.getBoundingClientRect();
console.log(bcrect.x, bcrect.y, bcrect.width, bcrect.height);
<svg width="400" height="300" viewBox="0 0 200 200">
<clipPath id="cp">
<rect x="50" y="50" width="100" height="100" />
</clipPath>
<rect id="clipped" width="200" height="200" clip-path="url(#cp)" />
</svg>