在 html 中显示 svg 时出现问题

Issues displaying svgs in html

提问人:Landon Kuehner 提问时间:8/10/2023 最后编辑:RobLandon Kuehner 更新时间:8/10/2023 访问量:27

问:

我一直在做一个项目一段时间,该项目部分显示了我用 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和使用更具体的样式之类的方法。

SVG XHTML格式

评论

0赞 Rob 8/10/2023
您声明的是 XHTML,而不是 HTML。为您更改了标签

答:

2赞 user3546284 8/10/2023 #1

属性(和属性)会影响以不同大小的 SVG 呈现笔画的方式。您已将其设置为 ,这意味着随着图像变小,描边将(相对)变粗。vector-effectnon-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
不用担心,很容易错过这些东西,尤其是在使用工具帮助生成标记时。很高兴我能帮上忙。