«Координатный переворот» не может быть хорошим названием для того, что вы пытаетесь, так как это будет означать, что ваша траектория клипа будет инвертирована - из ваших примеров кажется, что вы хотите только перевести это.
Способ сделать это может показаться немного запутанным, но он работает: поместите элемент <svg>
туда, где находится ваш обрезанный элемент div, с тем же размером. Затем вы можете воспользоваться механизмами позиционирования SVG, чтобы переместить путь относительно его размеров: сначала переместите его вверх (в отрицательном направлении y) так, чтобы его нижняя граница находилась сверху, на величину его высоты. Затем снова переместите его вниз (в положительном направлении y) на 100% от высоты <svg>
.
Следующая проблема заключается в том, что вам нужно объединить абсолютный и относительный перевод. В CSS вы можете написать это как calc(100% - 33px)
, но здесь это не работает. Вместо этого вы сначала перемещаете путь вверх с помощью атрибута transform="translate(0,-33)"
, а затем ссылаетесь на него с помощью элемента <use>
, который имеет то преимущество, что он имеет атрибут y
для позиционирования, который может принимать значения в процентах.
#Song2{
top: 3.3333vh;
right: 1.6%;
position: absolute;
width: 47.6%;
height: 16.6666vh;
overflow: hidden;
background-color: yellow;
}
#Song2svg {
position: absolute;
width: 100%;
height: 100%;
}
#Song2sub{
width: 100%;
height: 100%;
background-color: red;
clip-path: url(#fltcnrCP1);
}
<div id="Song2">
<svg id="Song2svg">
<defs>
<path id="cpsource" transform="translate(0,-33)" d="M0 0v18.608c0 1.032.476 2.007 1.29 2.643l14.22 11.111c.59.461 1.317.711 2.066.71h159.695V0z"/>
<clipPath id="fltcnrCP1">
<use href="#cpsource" y="100%" />
</clipPath>
</defs>
</svg>
<div id="Song2sub"></div>
</div>