我最近发现CSS调整了大小:
div {
resize: both;
overflow: auto;
}
‘也有一个polyFill,但是没有一个不适用于SVG元素:/
至少有可能吗?
发布于 2019-01-09 15:42:18
从您的代码和@ChrisG的注释开始,您可以执行以下操作。
单击svg
时,将此svg
包装为可调整大小的div
,并将svg
宽度和高度属性设置为“100%”,这样svg
将获得包装器的大小。
然后,当调整div
大小时,svg
也会被调整大小。
当单击出div
时,显式地设置svg
宽度和高度属性,并删除div
。
请参阅下面的片段:
window.addEventListener('DOMContentLoaded', () => {
document.addEventListener('click', (e) => {
var r = document.getElementById('r');
if (r && r != e.target) {
var svg = r.querySelector('svg');
svg.setAttribute('width', r.offsetWidth + 'px');
svg.setAttribute('height', r.offsetHeight + 'px');
r.replaceWith(svg);
}
var svg = e.target;
while (!!svg && svg.nodeName != 'svg')
svg = svg.parentElement;
if (!svg) return;
var r = document.createElement('div');
r.id = 'r';
r.style.width = svg.width.baseVal.valueAsString;
r.style.height = svg.height.baseVal.valueAsString;
svg.setAttribute('width', '100%');
svg.setAttribute('height', '100%');
svg.parentElement.insertBefore(r, svg);
r.appendChild(svg.parentElement.removeChild(svg));
});
});
svg {
background: #cef
}
#r {
display: inline-block;
box-sizing: border-box;
border: solid 1px;
resize: both;
overflow: hidden;
}
<svg width="100px" height="100px" viewBox="0 0 100 100">
<circle stroke="navy" stroke-width="5" fill="pink" cx="50" cy="50" r="40"/>
</svg>
<svg width="100px" height="100px" viewBox="0 0 100 100">
<circle stroke="green" stroke-width="5" fill="gold" cx="50" cy="50" r="40"/>
</svg>
https://stackoverflow.com/questions/54112004
复制相似问题