为什么我的SVG图像不能使用CSS"width"属性进行缩放?

Fra*_*rpa 40 html css svg sass

我正在建立一个投资组合网站.

HTML代码

<div id = "hero">
   <div id = "social">
      <img src = "facebook.svg">
      <img src = "linkedin.svg">
      <img src = "instagram.svg">
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS代码(使用SASS)

#hero {
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    height: 300px;

    #social {
        width: 50%;
        display: flex;
        justify-content: space-between;
        flex-wrap: wrap;

        img {
            width: 2em;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是我无法使用CSS width属性调整SVG的大小.以下是我在不同情况下获得的内容:

img { width: 2em; }

在此输入图像描述

img { width: 3em; }

在此输入图像描述

img { width: em; }

在此输入图像描述

请注意图标如何向herodiv 的中间折叠.

相反,如果我使用CSS height属性:

img { height: 2em; }

在此输入图像描述

img { height: 3em; }

在此输入图像描述

img { height: 4em; }

在此输入图像描述

这种行为是我需要的,但我不确定这是正确的方法.为什么会这样?您是否了解调整SVG图像大小的更好方法(特别是使用flexbox模型)?

Pau*_*eau 60

SVG与位图图像(例如PNG等)不同.如果SVG具有viewBox- 如您所见 - 那么它将被缩放以适合其定义的视口.它不会像PNG那样直接扩展.

因此,增加widthimg不会使任何的图标,如果更高的高度受到限制.你最终会img在一个更宽的盒子里水平居中.

我相信你的问题是你的SVG中有一个固定的高度.打开SVG文件并确保它们:

  1. 没有widthheight定义,或
  2. 已经widthheight两个都设置为"100%".

那应该可以解决你的问题.如果没有,请将您的一个SVG发布到您的问题中,以便我们可以看到它是如何定义的.


Cha*_*nka 28

转换CSS属性可以旋转,缩放,倾斜或翻译的元素。

例如,您可以轻松使用该transform: scale(2.5);选项来缩放 2.5 倍。

  • 很好的解决方案,但不是最好的,因为转换后的 SVG 图像父元素不会意识到 SVG 元素大小的增加。 (7认同)
  • 这个解决方案对我来说效果很好,因为我无法控制 SVG 文件的内部结构。感谢您发帖;) (6认同)
  • 简单直接!谢谢。 (3认同)

OZZ*_*ZIE 22

我必须自己弄清楚,但是您需要一些 svgs 来匹配 viewBox 和宽度+高度。

例如,如果它已经有width="x" height="y"那么 =>

添加 <svg ... viewBox="0 0 [width] [height]">

而相反。

之后它将与 <svg ... style="width: xxx; height: yyy;">

  • 它是 **viewBox**,而不是视口 (2认同)

Pat*_*at8 16

  1. 如果 svg 文件的高度和宽度已width="100" height="100"在 svg 文件中定义,则x="0px" y="0px" width="100" height="100" viewBox="0 0 100 100"在保留已定义的width="100" height="100".
  2. 然后,您可以通过在您的案例中使用选择器来缩放 css 文件中的 svg,img以便您可以执行以下操作:img{height: 20px; width: 20px;}并且图像将缩放。


Paw*_*wel 8

使用任何文本编辑器打开 SVGwidthheight从根节点中删除和属性。

<svg width="12px" height="20px" viewBox="0 0 12 20" ...
Run Code Online (Sandbox Code Playgroud)

<svg viewBox="0 0 12 20" ...
Run Code Online (Sandbox Code Playgroud)

现在图像将始终填充所有可用空间,并将使用 CSSwidthheight. 它不会伸展,所以它只会增长到可用空间。


小智 2

您必须修改viewBox属性才能使用 svg 正确更改高度和宽度。它位于<svg>svg 的标签中。

https://developer.mozilla.org/en/docs/Web/SVG/Attribute/viewBox

  • 我对反对票的猜测是,更改视图框实际上并不会缩放 svg 元素,它只是更改视口大小。 (8认同)