当大小为非本机时,我希望有一个内联svg元素的内容比例.当然,我可以把它作为一个单独的文件,并像那样进行zoom .

指数html:<img src="foo.svg" style="width: 100%;" />

福.svg:<svg width="123" height="456"></svg>

但是,我想通过CSS向SVG添加其他样式,因此链接外部样式不是一个选项.如何制作内嵌SVGzoom ?

推荐答案

要独立于图像的zoom 大小指定SVG图像中的坐标,请使用SVG元素上的viewBox属性定义图像的边框在图像坐标系中的位置,并使用widthheight属性定义相对于包含页面的宽度或高度.

例如,如果您有以下情况:

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

它将渲染为10px x 20px的三角形:

10x20三角形

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

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

10x20三角形

如果设置视图框,则会导致它对图像进行变换,以使给定框(在图像的坐标系中)被放大以适应给定的宽度和高度(在页面的坐标系中).例如,要将三角形放大到100px x 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>

100x50三角形

如果要将其放大到HTML视口的宽度,请执行以下操作:

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

300x150三角形

请注意,默认情况下,会保留纵横比.因此,如果您指定元素的宽度应为100%,但高度应为50px,则它实际上只会向上zoom 至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>

100x50三角形

如果您实际上希望它水平拉伸,请禁用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>

300x50三角形

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

Html相关问答推荐

如何在水平对齐(居中)元素的右侧创建迪夫.在tailwind 或CSS中

使用位置时,dis会越过粘性导航栏:relative

容器内的SVG图像没有响应

如何在伪元素背景中定位多个CSS径向梯度

如何在一行文本溢出省略号后显示文本?

为什么前端框架可以创建自定义属性,而我却被期望在挖掘之前添加数据

如何保持嵌套进度条的背景色?

Angular -表和源映射中未显示的数据错误

防止position:relative的child在出界时收缩

我正在try 向列表中的图像添加悬停,以放大图像并将div的不透明度设置为1而不是0

我无法动态嵌入Instagram帖子,因为无法分配Instagram固定链接

当文本添加到元素中时,将元素拉到页面上

为什么根捕获上的`min-height`溢出,而`height`没有?

如何在r中提取明显非标准html标签的值

当多个a元素用作目标时的:target伪类

在 html 和 css 中绘制表格内的倾斜线

使单行路径的 svg 填充父级的 100% 宽度

CSS "overflow"不能显示整个单词

Bootstrap 5 英雄

让 Iframe 覆盖整个页面