【问题标题】:Scaling an embedded <image> inside <svg> in IE 11+在 IE 11+ 的 <svg> 中缩放嵌入的 <image>
【发布时间】:2017-10-18 05:56:54
【问题描述】:

在我放弃并完全使用 SVG 构建我的解决方案之前,我想我会把它扔给 StackOverflow 人群,看看我是否遗漏了什么。

在当前项目中,我有一个 .png 文件,它代表真实世界水灌溉控制器的面板。 SVG 充当叠加层,包含所有可按下按钮和虚拟 LED 的坐标,在必要时在真实世界设备上闪烁,与正在与“真实”水控制器对话的 Node 应用程序交互,并且 .png 是嵌入式背景图像。 (参见下面的代码)我们以编程方式(通过 Javascript)在进入页面时更改覆盖 SVG 和面板图像,具体取决于之前的用户输入。

一切都很好,我们可以按下 SVG 叠加层上的按钮,现实世界的控制器会做出响应,反之亦然。

问题归结为缩放嵌入的图像。在 Chrome、Firefox 和 Opera 下,我可以将浏览器窗口调整为各种大小,并且 SVG 和嵌入的图像缩放精美。

但是 IE 11+ 拒绝玩球,并且顽固地将嵌入的图像保持在缩小的大小。

我想我已经用谷歌搜索了关于在 IE 中缩放 SVG 的所有内容,并尝试了各种 CSS hack 和 DOM 操作,尽管 大多数似乎适用于将 SVG 嵌入 HTML img 标签中,而不是带有嵌入图像标签的 SVG

我尝试从 SVG 中删除所有宽度/高度并仅使用 CSS;我尝试在图像标签中使用 100% 的宽度/高度来(据说)允许 viewBox 控制它的尺寸;我尝试将宽度/高度固定为 viewBox 的相同值;我尝试在 SVG 标头和图像中使用 preseveAspectRatio。我的想法不多了。

相关代码示例:

<svg class="scaling-svg" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 970 530" preserveAspectRatio="xMidYMid meet" >

  <image id="faceplate" xlink:href="../images/TWC-front.jpg" class="svg-content" height="530" width="970" preserveAspectRatio="xMidYMid meet"></image>

  <g>
    <rect id="rect_textDisplay" x="322" y="157" width="530" height="52" opacity="0" />
    <text fill="black" x="326" y="176" id="displine1" xml:space="preserve">Welcome to the Virtual Controller</text>
    <text fill="black" x="326" y="198" id="displine2" xml:space="preserve">  ...  waiting for connection</text>
  </g>

  <rect id="dial_irroff" x="39" y="319" opacity="0" width="75" height="25" />
  <rect id="dial_manual" x="63" y="287" opacity="0" width="80" height="25" />
  <rect id="dial_auto" x="148" y="278" opacity="0"  width="50" height="25" />
...

非常感谢任何我可能没有考虑过的想法或方向。我想尽可能保持当前形式的解决方案,因为我们根据用户输入动态更改面板,并且在两个 SVG 覆盖之间使用大约 15 种不同的面板。在纯 SVG 中重新构建每个面板需要相当多的时间。但如果有必要,我准备这样做。 :(

【问题讨论】:

  • 放弃对 IE 的支持,让他们使用 Edge。问题解决了。
  • 尝试在根 svg 元素上为图像指定一个明确的宽度/高度,即 width="100%" height="100%"。
  • 对 html、body 和 svg 元素应用 100% 的高度。如果它仍然不起作用,则在现代浏览器中使用 100vh 高度,在 IE 中使用固定高度。
  • @RobertLongson 我在我的问题中提到“......我已经尝试在图像标签中使用 100% 的宽度/高度来(据说)允许 viewBox 控制它的尺寸......”。 .. 或者等等,你的意思也是在 svg 标签上?
  • @thedigitalmouse 啊,伙计,你能在 codepen.io 上制作一个非常简单的复制品吗?明天我将挑战我的 webdev 专家同事来解决它!

标签: javascript css svg


【解决方案1】:

上面用户 llobet 的评论为 html、body 和 svg 元素添加 100% 的高度似乎起到了作用。最初,我采用了用户 Mardoxx 要求的 codepen 中的工作并将其应用到我的 CSS 中,但它仍然没有工作。经过几分钟的修剪,除了最基本的 CSS 规则发现了几个 height: auto;,属性并将它们删除或将它们设置为 100%,然后 IE11 开始运行良好并按预期缩放.清除并仔细检查您的 CSS 直到事情按预期运行是值得的。感谢你们俩朝着正确的方向前进。

相关codepen.io:http://codepen.io/digitalmouse/pen/LygOWe

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    • 2014-08-03
    • 2014-03-27
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多