Да, вы можете использовать проценты в SVG.
для основных форм его довольно просто. Вы можете написать свой основной прямоугольник, как
<rect x="0" y="5" width="100%" height="10"/>
ваш второй прямоугольник еще проще, так как она сидит на 0,0 Все время
<rect x="0" y="0" width="10" height="20"/>
но со стрелкой есть проблема в трактах и многоугольник вы не можете использовать проценты. Для решения этой проблемы существует двухэтапное решение.
первый положил путь в символе элемента:
<symbol id="arrow" viewBox="0 0 20 20" width="20" height="20">
<path d="M0,0L20 10L0 20z" />
</symbol>
теперь вы можете расположить этот символ, как вы бы расположить прямоугольник ... легко ...
<use xlink:href="#arrow" x="100%" y="0" width="20" height="20"/>
но теперь ваша стрелка начинает 100% и полностью выходит за пределы вашего окна просмотра. вы можете просто установить переполнение: видимо на вашем svg и покончить с ним, но это не то, что мы хотим ... мы хотим, чтобы стрела закончилась со 100%. Но так легко, мы знаем, что стрела шириной 20 пикселей.Так просто перевести обратно 20px Использовать:
<use xlink:href="#arrow" x="100%" y="0" width="20" height="20" transform="translate(-20 0)"/>
, используя этот подход, вы можете поместить любую форму в любом положении основания на процентах ...
деформировать все это, ваш полный SVG теперь выглядит следующим образом :
<svg id="svg" height="20px" xmlns:xlink="http://www.w3.org/1999/xlink">
<symbol id="arrow" viewBox="0 0 20 20" width="20" height="20">
<path d="M0,0L20 10L0 20z" />
</symbol>
<g id="Group" fill="#5FDCC7">
<rect x="0" y="5" width="100%" height="10" transform="translate(-20 0)" />
<rect x="0" y="0" width="10" height="20" />
<use xlink:href="#arrow" width="20" height="20" x="100%" y="0" transform="translate(-20 0)" />
</g>
</svg>
и вот фрагмент с помощью этого СВГ с 3 различной ширины:
svg:nth-of-type(1) {
width: 100px
}
svg:nth-of-type(2) {
width: 200px
}
svg:nth-of-type(3) {
width: 300px
}
<svg height="20px" xmlns:xlink="http://www.w3.org/1999/xlink">
<symbol id="arrow" viewBox="0 0 20 20" width="20" height="20">
<path d="M0,0L20 10L0 20z" />
</symbol>
<g id="Group" fill="#5FDCC7">
<rect x="0" y="5" width="100%" height="10" transform="translate(-20 0)" />
<rect x="0" y="0" width="10" height="20" />
<use xlink:href="#arrow" width="20" height="20" x="100%" y="0" transform="translate(-20 0)" />
</g>
</svg>
<br/>
<svg height="20px" xmlns:xlink="http://www.w3.org/1999/xlink">
<symbol id="arrow" viewBox="0 0 20 20" width="20" height="20">
<path d="M0,0L20 10L0 20z" />
</symbol>
<g id="Group" fill="#5FDCC7">
<rect x="0" y="5" width="100%" height="10" transform="translate(-20 0)" />
<rect x="0" y="0" width="10" height="20" />
<use xlink:href="#arrow" width="20" height="20" x="100%" y="0" transform="translate(-20 0)" />
</g>
</svg>
<br/>
<svg height="20px" xmlns:xlink="http://www.w3.org/1999/xlink">
<symbol id="arrow" viewBox="0 0 20 20" width="20" height="20">
<path d="M0,0L20 10L0 20z" />
</symbol>
<g id="Group" fill="#5FDCC7">
<rect x="0" y="5" width="100%" height="10" transform="translate(-20 0)" />
<rect x="0" y="0" width="10" height="20" />
<use xlink:href="#arrow" width="20" height="20" x="100%" y="0" transform="translate(-20 0)" />
</g>
</svg>
так что вы хотите, чтобы средняя линия растянулась по пространству? – Stewartside
да, точно ... (но динамически в ответ, скажем, ширина div) – to7be
okay дайте мне 5 минут – Stewartside