当前位置: 首页 > 知识库问答 >
问题:

带有viewBox和width的SVG在IE中未正确缩放高度

李和昶
2023-03-14

我试图构造带有viewBox属性的内联SVG,但没有显式的width或height属性。我正在使用CSS将SVG的宽度设置为100%。这将允许SVG缩放到其包装容器中,保持由ViewBox设置的纵横比。在Chrome和Firefox中,这是完美的!

下面是我所讲内容的一个最小代码示例:http://codepen.io/pcorey/pen/amkgl

HTML:

<div>
  <svg viewBox="0 0 100 10">
    <text x="1" y="9">hello</text>
  </svg>
</div>

CSS:

div {
  width: 400px;
}

svg {
  width: 100%;
  max-height: 100%;
  outline: 1px solid tomato;
}

text {
  font-size: 10px;
}

viewBox是100x10。外部div设置为400px宽度。这意味着SVG的高度应该是40px(在Chrome/Firefox中也是如此)。但是,在IE 11中,宽度总是150px(即使当div的宽度超过1500px...)

在IE中有没有很好的方法来解决这个问题?为什么IE不能正确处理未知的高度?我可以使用“内部纵横比”技巧,但这是非常糟糕的,需要另一个DOM元素,并且要求我在包装器每次调整大小时重新计算填充顶部。

关于我为什么要这样做的更多信息,我写了一篇关于它的快速博客文章:http://1pxsolidtomato.com/2014/10/08/quest-for-scalable-Svg-text/

谢谢你的帮助!

共有1个答案

湛安宁
2023-03-14

在所有浏览器中都可以使用的一种解决方法是将一个空白图像添加到SVG所在的容器中,该容器具有与SVG相同的维度:

null

.wrap {
  position: relative;
}
img {
  width: 100%;
  height: auto;
}
.viz {
  position: absolute;
  top: 0;
  left: 0;
}
html lang-html prettyprint-override"><div class="wrap">
  <img src="img/blank.png" />
  <div class="viz">
    <svg preserveAspectRatio="xMinYMin slice" viewBox="0 0 1000 600"></svg>               
  </div>
</div>
 类似资料:
  • 我正在研究一个svg平面布局,用户应该可以放大和缩小。 当我第一次编码它时,缩放特性起作用,但是svg不响应容器大小。我添加了viewbox属性以使其具有响应性,但这会干扰缩放功能--即使您尝试缩放,它也会缩放,并且缩放不像添加viewbox之前那样工作。 以下是两个相互依存关系来演示此问题: 没有ViewBox-SVG可以正确缩放,但不响应容器大小 https://codepen.io/nico

  • 问题内容: 我决定为我的一个项目切换到svg符号-但需要它们做出 响应 。主要思想是不要有多个http请求,因此我考虑将所有SVG合并到一个SVG中,定义符号并按如下方式使用它们: 这是一个jsfiddle,请检查IE中的其他行为(我检查了11,但读到9也有多个问题): http //jsfiddle.net/ws472q71/ 为了我的一生,我无法正常工作。上面的代码在Firefox和Chrom

  • 我一直在尝试做一些看起来很容易的事情,但是我已经尝试了几个小时了,也找不到解决的办法。 我有一个SVG需要在屏幕上。它来自设计师,具有这些维度: 在React Native中,这将位于容器内部,SVG需要获取屏幕的全宽度,我从以下内容获取: 我的问题是,我还没有找到一种方法来缩放SVG以获得100%的屏幕宽度,找出正确的高度(或者自动设置高度的方法),并保留纵横比。我已经尝试了很多事情,包括玩容器

  • 在codepen中,我有一个svg元素,它具有以下两个属性: preserveAspectratio=“none”viewbox=“0 0 500 300”

  • IE 9/10/11存在一个已知的问题,如果您有一个SVG文件,其中元素指定了宽度和高度,然后使用标记的属性缩放SVG图像,IE就不能正确缩放图像。 我遇到过这个问题。我有一系列SVG标志图标。对于美国标志图标,SVG对象写成: 下面是SVG的全部源代码。 我将SVG插入到带有标记的HTML文档中,并将其缩放为20x15: null 在Chrome 39上,SVG的渲染方式如下所示: 但在IE10

  • SVG VIEWBOX viewport 首先来了解下SVG中的viewport这个概念,简单来说viewbox就是值指SVG图片本身可视区域的大小,除了SVG本身,其它一些元素也有可视区域的限制,比如symbol、image、pattern等。 在SVG中viewport主要是通过width和height属性来定义的。比如,我们定义一个width="600"和height="600"就表示我们定