html - 嵌套 SVG 的宽度高度设置为 % 在 chrome 或 edge 中不起作用
问题描述
<div>
<div style="width:200px;height:70px">
<div style="width:100%;height:100%;">
<svg id="svg1" width="100%" height="90%">
<rect height="100%" width="100%" fill="#00001a"></rect>
<svg id="svg2" width="90%" height="10%" x="10%">
<rect height="100%" width="100%" fill="#ff4d4d"></rect>
</svg>
<svg id="svg3" width="90%" height="90%" x="10%" y="10%">
<rect height="100%" width="100%" fill="#ff4d4d"></rect>
<line x1="0%" x2="2700px" y1="25%" y2="25%" stroke="#aa001a"/>
</svg>
<svg id="svg4" width="10%" height="90%" y="10%">
<rect height="100%" width="100%" fill="#ff4d4d"></rect>
</svg>
</svg>
</div>
</div>
</div>
我有一些 svg,我想设置相对于其父 svg 的大小。我已经使用 height%/width% inline 设置了大小属性,这在 Firefox 中非常有效。这是在 chrome 和 firefox 中呈现的代码结构的简化示例(与读取相同),如果您只是在 html 文件中打开它,则此代码在 chrome 中按预期工作:
<div>
<div style="width:200px;height:70px">
<div style="width:100%;height:100%;">
<svg id="svg1" width="100%" height="90%">
<rect height="100%" width="100%" fill="#00001a"></rect>
<svg id="svg2" width="90%" height="10%" x="10%">
<rect height="100%" width="100%" fill="#ff4d4d"></rect>
</svg>
<svg id="svg3" width="90%" height="90%" x="10%" y="10%">
<rect height="100%" width="100%" fill="#ff4d4d"></rect>
</svg>
<svg id="svg4" width="10%" height="90%" y="10%">
<rect height="100%" width="100%" fill="#ff4d4d"></rect>
</svg>
</svg>
</div>
</div>
</div>
但是,当我在 chrome 和 edge 中运行我的项目时,它尊重#svg3 的 x 和 y 值,但尺寸设置得更大,甚至比 body 更大。svg3 中的矩形按预期工作(仅填充给定的 % 大小)。我发现了这两个问题:
SVG 翻译似乎在 Chrome/Chromium 中表现不同
它们指的是转换,而不是设置大小。奇怪的是,svg3 中的 rect 只填充给定的空间(如预期的那样),但是当你检查它时实际 svg 的大小要大得多。我正在使用 vuejs,但由于在浏览器中呈现的代码符合预期,并且它在 Firefox 中按预期工作,我相信问题不在于 vuejs。
任何帮助/提示将不胜感激。
编辑:我也许可以说得更好,但上面的代码对我来说运行良好(在 chrome 中也是如此)。代码的结构与我在 chrome 中检查原始代码时的结构相同。这是一张图片专辑,展示了我在项目中看到的内容。第一张和最后一张图片可能是最重要的,因为它显示 100% 宽度和高度的矩形尺寸正确,但最后一张图片显示 svg 元素大于该区域。 https://imgur.com/a/ozJqEgB
编辑 2:我能够找出导致我的问题的原因,这是我的一个非常简单的错误,我有 svg 元素,我们写得比 svg 本身更大。这是最后一个示例的编辑版本:
<div>
<div style="width:200px;height:70px">
<div style="width:100%;height:100%;">
<svg id="svg1" width="100%" height="90%">
<rect height="100%" width="100%" fill="#00001a"></rect>
<svg id="svg2" width="90%" height="10%" x="10%">
<rect height="100%" width="100%" fill="#ff4d4d"></rect>
</svg>
<svg id="svg3" width="90%" height="90%" x="10%" y="10%">
<rect height="100%" width="100%" fill="#ff4d4d"></rect>
<line x1="0%" x2="500px" y1="25%" y2="25%" stroke="#236ce0" />
<line x1="50%" x2="50%" y1="0%" y2="500px" stroke="#236ce0" />
</svg>
<svg id="svg4" width="10%" height="90%" y="10%">
<rect height="100%" width="100%" fill="#ff4d4d"></rect>
</svg>
</svg>
</div>
</div>
</div>
如果您在 chrome/edge 中打开此代码,则 svg3 是 500 像素 x 500 像素的正方形,而在 Firefox 中则是 180 像素 x 56.7 像素。这种不一致是预期的吗?如果您不希望有与 SVG 相关的点击事件,这是一个问题,因为不同浏览器的大小和顶部/左侧边距并不相同。
解决方案
推荐阅读
- mysql - 如何减少子查询中的 JOIN?
- android - 使用 Firebase 将数据回收器适配器传递给其他活动
- jakarta-ee - Spring-Batch @StepScope 和 @JobScope 不适用于带有转换的 Job 中使用的 Step
- c# - .NET CORE 中的“指定密码模式对此算法无效”,但在 .NET Standard 中工作
- rpm - 只下载最新版本的软件
- ruby-on-rails - Ruby on rails webpacker 在asset_pack_path 下找不到图片
- python - 在 Python 中使用 SNS 发布到主题时如何指定不同的用户?
- angular2-nativescript - Nativescript Angular 2 - 如何在点击函数(xml)中传递变量?
- python - Python套接字不处理所有命令
- image - 在产品轮播 wcps 中更改产品图片