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

我如何用它的父容器制作svg缩放?

东方建修
2023-03-14

我想有一个内联svg元素的内容缩放,当size是非本机的。当然,我可以把它作为一个单独的文件并按比例缩放。

index.html:

foo.svg:

但是,我想通过CSS向SVG添加额外的样式,所以链接外部样式不是一个选项。如何制作内联SVG缩放?

共有1个答案

胥康安
2023-03-14

若要指定SVG图像内的坐标,与图像的缩放大小无关,请使用SVG元素上的viewbox属性定义图像的边界框在图像的坐标系中的位置,并使用widtheadheight属性定义相对于包含页面的宽度或高度。

例如,如果您具有以下内容:

<svg>
    <polygon fill=red stroke-width=0 
             points="0,10 20,10 10,0" />
</svg>

它将呈现为10px×20px的三角形:

现在,如果只设置宽度和高度,这将改变SVG元素的大小,但不会缩放三角形:

<svg width=100 height=50>
    <polygon fill=red stroke-width=0 
             points="0,10 20,10 10,0" />
</svg>

如果您设置了视图框,这将导致它转换图像,使给定的框(在图像的坐标系中)按比例放大,以适应给定的宽度和高度(在页面的坐标系中)。例如,将三角形放大到100px乘以50px:

<svg width=100 height=50 viewBox="0 0 20 10">
    <polygon fill=red stroke-width=0 
             points="0,10 20,10 10,0" />
</svg>

如果要将其放大到HTML视口的宽度:

<svg width="100%" viewBox="0 0 20 10">
    <polygon fill=red stroke-width=0 
             points="0,10 20,10 10,0" />
</svg>

请注意,默认情况下,纵横比被保留。所以如果您指定元素的宽度应该是100%,但高度是50px,那么它实际上只会向上缩放到50px的高度(除非您有一个非常窄的窗口):

<svg width="100%" height="50px" viewBox="0 0 20 10">
    <polygon fill=red stroke-width=0 
             points="0,10 20,10 10,0" />
</svg>

如果您实际上希望它水平拉伸,请使用preserveaspectratio=none禁用纵横比保留:

<svg width="100%" height="50px" viewBox="0 0 20 10" preserveAspectRatio="none">
    <polygon fill=red stroke-width=0 
             points="0,10 20,10 10,0" />
</svg>

(请注意,虽然在我的示例中我使用了适用于HTML嵌入的语法,但为了将示例作为一个图像包含在StackOverflow中,我将其嵌入到另一个SVG中,因此我需要使用有效的XML语法)

 类似资料:
  • 问题内容: 当大小为非本机时,我希望有一个内嵌svg元素的内容比例。当然,我可以将其作为单独的文件并像这样进行缩放。 index.html: foo.svg: 但是,我想通过CSS向SVG添加其他样式,因此链接外部样式不是一种选择。如何制作嵌入式SVG秤? 问题答案: 要独立于SVG图像的缩放大小指定SVG图像内的坐标,请使用SVG元素上的属性来定义图像的边界系统在图像的坐标系中,并使用和属性来定

  • 我正在使用作为覆盖层。它应该和它的父容器一样宽和一样高。然而,由于某种奇怪的原因,它不是垂直填充其父级的(而是水平填充)。下面是相关的XML: 使用上面的代码,覆盖层也不可见(其高度为)。当我在内部放置时,它会展开以适应。简而言之,它的行为就好像它的高度被设置为。 我如何强制它装满它的容器,同时让它空着?

  • 我需要用三个值的动画制作一个svg饼图,在代码中找不到我的错误。当我移除setTimeout(function(){circle.setAttribute(“Stroke-Dasharray”,p+“100”);},10);在JavaScript中,饼图看起来不错,但没有动画。当我添加这段代码时,它是动画的,但不是加载所有的值,而是逆时针加载,而不是顺时针加载。我不知道任何javascript,但

  • 我有一个运行在Ubuntu16.04上的amazon web服务器。此服务器专用于运行由多个进程组成的模拟。我被赋予了创建docker容器的任务,以便可以在服务器上同时运行模拟的多个实例。我知道运行多个容器需要为每个容器更改一些端口ID,所以我的第一个任务是在一个容器中运行一个模拟实例。看来我可以在dockerFile中调用所有必要的软件映像来创建我的映像文件。但我想知道是否有一个更简单的方法来创

  • 所以我有一个超级奇怪的案例(至少对我来说是超级奇怪的)。 SVG路径不包含在SVG元素中。我已经尝试了很多事情来让这个工作,但没有一个是有效的,现在怀疑我错过了什么。 我有一把JS小提琴:https://jsfidle.net/67w3hays/ 正如您所看到的,youtube图标比容器大,因此无法伸长到容器中 代码: 答案的预期结果: 我希望这个SVG路径适合于18宽和18高的容器(或者接近18

  • 我在Python中使用PIL模块制作了一个Mandelbrot分形。现在,我想做一个放大到一点的GIF。我在网上看过其他代码,但不用说,我不明白,因为我使用的模式有点不同(我使用的是类)。 我知道要放大我需要改变比例。。。但我显然不知道如何实施它。