是否可以使用CSS扩展内联SVG?

eme*_*his 53 css svg

我想使用CSS样式来控制SVG设计的大小.例如...

.svg { width:100%; }
Run Code Online (Sandbox Code Playgroud)

当我从文件中嵌入SVG图像时,它就像任何其他图像一样工作并且工作正常:

<img src="image.svg" class="svg" />
Run Code Online (Sandbox Code Playgroud)

但是当我使用内联SVG时,它不起作用:

<svg class="svg">...</svg>
Run Code Online (Sandbox Code Playgroud)

svg"盒子"会增长,但内容保持不变.

有没有办法做到这一点?

Joe*_*e50 68

您可以使用的第一个也许是最好的方法就是使用该viewBox属性.这将使svg标记的内容自动占用svg标记本身的定义宽度和高度,只显示定义边界内的内容.例如:

<svg width="82" height="82" viewbox="0 0 102 102">
    <rect x="1" y="1" width="100" height="100" stroke="black" stroke-width="2" fill="white"/>
    <text fill="black" x="10" y="30">FooBarBaz</text>
</svg>
Run Code Online (Sandbox Code Playgroud)

或者,您可以将svg transform应用于SVG标记的内容,如下所示:

<svg width="82" height="82">
    <g transform="scale(0.8)">
        <rect x="1" y="1" width="100" height="100" stroke="black" stroke-width="2" fill="white"/>
        <text fill="black" x="10" y="30">FooBarBaz</text>
    </g>
</svg>
Run Code Online (Sandbox Code Playgroud)

最后,您可以尝试使用CSS3 transform来扩展整个svg元素.这是最不受支持的方法,但无论如何我都提到它,因为你最初要求的是CSS解决方案.我强烈建议使用上述解决方案之一,如果可能的话.

<svg width="102" height="102" style="transform:scale(0.8); -webkit-transform:scale(0.8); -moz-transform:scale(0.8); -ms-transform:scale(0.8); -o-transform:scale(0.8);">
    <rect x="1" y="1" width="100" height="100" stroke="black" stroke-width="2" fill="white"/>
    <text fill="black" x="10" y="30">FooBarBaz</text>
</svg>
Run Code Online (Sandbox Code Playgroud)

  • 无法在CSS中使用常规的width / height属性缩放?那是相当有限的:/ (3认同)
  • `svg { 宽度:100%; }` 尝试将其应用于 SVG 元素而不是类。这对我有用。 (2认同)
  • 这已经太晚了,但是 css 样式 Zoom:0.8 可以工作 (2认同)
  • @drowhunter我猜你可能会将此作为这个问题的独立答案。事情发生了变化,所以我可以想象这样的事情使得做当时没有得到很好支持的事情成为可能。 (2认同)