我想在html页面上显示svg形状,其中某些点应具有固定位置。
在下面的图像中,红色圆圈表示应保持其准确位置的点。左侧和右侧的绿色点之外是不固定且可以缩放的位置。如何实现?
我尝试了各种形式的缩放,并尝试了viewbox和preserveAspectRatio属性,但没有一个达到预期的效果。
这是svg定义。我不确定各点的顺序,但是左上角是13,-12
。我尝试将其更改为百分比,但是在我的svg编辑器inkscape中这样做,删除了该点以及周围的其他几个点。
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" fill="none">
<path d="m 32.043776,21.922259 c -4.3888,32.42227 33.58333,44.38479 62.94249,61.98573 64.330284,22.939391 72.648644,69.263531 22.383804,131.433121 -25.509995,25.04202 -103.692494,7.65258 -127.798134,-15.30517 -20.8697,-57.14796 -21.34432,-171.108891 -20.66205,-174.861331 8.03521,-44.19367 13,-12 47.82864,-18.5575098 8.45282,0 15.30525,6.8523498 15.30525,15.3051598 z" fill="#f9fdfd"/>
</svg>
答案 0 :(得分:2)
我不太确定我是否了解您,但是在我看来,我会设置viewBox
属性和宽度的动画。
itr.addEventListener("input",()=>{
let val = parseInt(itr.value);
let vb = `${-val} 50 ${2*val} 200`
let w = 2*val;
test.setAttributeNS(null,"viewBox",vb)
test.setAttributeNS(null,"width",w)
})
svg {
border: 1px solid;
display: block;
margin: 1em auto;
}
p {
text-align: center;
}
<p><input id="itr" type="range" min="100" max="250" value="250" /></p>
<svg id="test" width="500" height="200" viewBox="-250 50 500 200">
<path fill="lightgrey" d="M-250,0C-250,0,-130,35,-91,51C-52,67,-23,78,-1,81C21,84,29,78,34,81C39,84,42,86,43,105C44,124,51,133,43,136C35,139,-30,103,-38,165C-46,227,75,207,127,208C179,209,239,212,257,236C257,266,257,296,257,326C88,326,-81,326,-250,326C-250,217.333,-250,108.667,-250,0z"/>
</svg>
答案 1 :(得分:1)
您似乎希望使用slice
preserveAspectRatio
来使用svg。
body {
margin: 0;
}
#test {
width: 100%;
height: 100%;
position: absolute;
}
.content {
position: relative;
padding: 30px;
}
<svg id="test" viewBox="-250 0 500 300" preserveAspectRatio="xMidYMin slice">
<path fill="lightgrey" d="M-250,0C-250,0,-130,35,-91,51C-52,67,-23,78,-1,81C21,84,29,78,34,81C39,84,42,86,43,105C44,124,51,133,43,136C35,139,-30,103,-38,165C-46,227,75,207,127,208C179,209,239,212,257,236C257,266,257,296,257,326C88,326,-81,326,-250,326C-250,217.333,-250,108.667,-250,0z"/>
</svg>
<div class="content">
<h1>HTML Ipsum Presents</h1>
<p><strong>Pellentesque habitant morbi tristique</strong> senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. <em>Aenean ultricies mi vitae est.</em> Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, <code>commodo vitae</code>, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci,
sagittis tempus lacus enim ac dui. <a href="#">Donec non enim</a> in turpis pulvinar facilisis. Ut felis.</p>
</div>
答案 2 :(得分:0)
如果“固定”区域位于中间,您将无法很好地做到这一点。 IE,如果左点和右点需要缩放。问题在于,固定点是从左上方引用的。
固定::SVG支持基于百分比的测量和固定单位(px)的测量。只需打开SVG代码并在必要时添加/更改单位即可。
提示:使用100px x 100px的视图框重新制作图像,以便您具有可转换为百分比的有效值。