提问人:Landon Kuehner 提问时间:8/10/2023 最后编辑:RobLandon Kuehner 更新时间:8/10/2023 访问量:27
在 html 中显示 svg 时出现问题
Issues displaying svgs in html
问:
我一直在做一个项目一段时间,该项目部分显示了我用 http://svgeditoronline.com/ 制作的 4 个 svg。但是出于某种原因,当我尝试显示最后 3 个 svg 时,由于缺乏更好的词,它看起来不对。第一个看起来还不错。
这是我写的html和css
<button class="Button" onclick="RunApp(A_Settings)">
<img class="Button-icon" src="Resources/Settings.svg" />
</button>
.Button {
height: 85%;
aspect-ratio: 1/1;
margin-top: 0.25%;
margin-bottom: 0.25%;
margin-left: 0.50%;
transition: all 0.3s ease-in-out;
border: 5px solid black;
border-radius: 10px;
}
.Button:hover {
transform: scale(1.1);
}
.Button-icon {
height: 90%;
aspect-ratio: 1/1;
margin-top: 0.25%;
margin-bottom: 0.25%;
}
为了提供一些上下文,我正在使用 Replit 处理这个项目,但我也通过在本地加载 HTML 文件来测试代码,结果相同。另外,如果它有帮助,这里是 svg 代码:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="375" height="375" viewBox="0 0 375 375" xml:space="preserve">
<desc>Created with Fabric.js 3.6.6</desc>
<defs>
</defs>
<g transform="matrix(3.19 0 0 3.19 187.99 187.99)" >
<polygon style="stroke: rgb(0,0,0); stroke-width: 22; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: round; stroke-miterlimit: 4; fill: rgb(189,189,61); fill-opacity: 0; fill-rule: nonzero; opacity: 1;" vector-effect="non-scaling-stroke" points="-50,-50 -50,50 50,50 50,-50 " />
</g>
<g transform="matrix(0.57 0.56 -0.56 0.57 104.59 91.86)" >
<path style="stroke: rgb(0,0,0); stroke-width: 8; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(0,0,0); fill-rule: nonzero; opacity: 1;" vector-effect="non-scaling-stroke" transform=" translate(-62.2, -20.73)" d="m 20.013628 0 l 84.37401 0 l 0 0 c 11.053215 -1.04756605e-14 20.013626 9.282301 20.013626 20.7326 c 0 11.450296 -8.960411 20.7326 -20.013626 20.7326 l -84.37401 0 l 0 0 c -11.053222 0 -20.013628 -9.282303 -20.013628 -20.7326 c -5.2380687e-15 -11.450298 8.960406 -20.7326 20.013628 -20.7326 z" stroke-linecap="round" />
</g>
<g transform="matrix(0.59 -0.54 0.54 0.59 104.55 140.67)" >
<path style="stroke: rgb(0,0,0); stroke-width: 8; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(0,0,0); fill-rule: nonzero; opacity: 1;" transform=" translate(-62.2, -20.73)" d="m 20.013628 0 l 84.37401 0 l 0 0 c 11.053215 -1.04756605e-14 20.013626 9.282301 20.013626 20.7326 c 0 11.450296 -8.960411 20.7326 -20.013626 20.7326 l -84.37401 0 l 0 0 c -11.053222 0 -20.013628 -9.282303 -20.013628 -20.7326 c -5.2380687e-15 -11.450298 8.960406 -20.7326 20.013628 -20.7326 z" stroke-linecap="round" />
</g>
<g transform="matrix(0.8 -0.01 0.01 0.8 211.04 163.61)" >
<path style="stroke: rgb(0,0,0); stroke-width: 8; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(0,0,0); fill-rule: nonzero; opacity: 1;" transform=" translate(-62.2, -20.73)" d="m 20.013628 0 l 84.37401 0 l 0 0 c 11.053215 -1.04756605e-14 20.013626 9.282301 20.013626 20.7326 c 0 11.450296 -8.960411 20.7326 -20.013626 20.7326 l -84.37401 0 l 0 0 c -11.053222 0 -20.013628 -9.282303 -20.013628 -20.7326 c -5.2380687e-15 -11.450298 8.960406 -20.7326 20.013628 -20.7326 z" stroke-linecap="round" />
</g>
</svg>
感谢您提供的任何帮助(并可能反驳本网站的不良声誉)
我尝试了诸如重新制作svg和使用更具体的样式之类的方法。
答:
2赞
user3546284
8/10/2023
#1
属性(和属性)会影响以不同大小的 SVG 呈现笔画的方式。您已将其设置为 ,这意味着随着图像变小,描边将(相对)变粗。vector-effect
non-scaling-stroke
解决方案 - 只需删除属性即可。这将导致比例被保留,这大概是你想要的。vector-effect
评论
0赞
Landon Kuehner
8/10/2023
谢谢,这似乎有效。不过有点奇怪,这个属性有点破坏了图形的可伸缩性。
0赞
Robert Longson
8/10/2023
名为 non-scaling-stroke 的属性不缩放@LandonKuehner奇怪吗?真?
0赞
Landon Kuehner
8/10/2023
我的意思是,既然你这么说,是的,这有点道理,但我确实只是在一些网络应用程序中制作了它们。我真的应该自己浏览 svg 的代码。但感谢您的帮助。
0赞
8/10/2023
不用担心,很容易错过这些东西,尤其是在使用工具帮助生成标记时。很高兴我能帮上忙。
下一个:使用 Java 的购物车应用程序
评论