css SVG调整大小而不是溢出

k3bvogb1  于 2023-04-08  发布在  其他
关注(0)|答案(1)|浏览(154)

考虑HTML页面中的以下SVG图像:

<img src="https://keyller.io/generators/fr/solfege/cle-de-sol/img/treble-clef-9-sol.svg">

将以下CSS应用于图像:

img { 
    position: absolute;
    left: 500px;    
}

当图像接近视口的右极限时,将调整图像的大小以完全适合页面。
JSFiddle:https://jsfiddle.net/Imabot/hr6mowxp/1/
如果我用jpg替换图像,图像现在会溢出,并且不会调整大小。
JSFiddle:https://jsfiddle.net/Imabot/hr6mowxp/2/
因此,以下SVG溢出:

<img src="https://upload.wikimedia.org/wikipedia/commons/0/02/Stack_Overfl
ow_logo.svg">

JSFiddle:https://jsfiddle.net/Imabot/hr6mowxp/3/
有人能解释一下为什么第一个SVG的大小被调整,而其他图像溢出?
如何在第一个图像上执行溢出而不是调整大小?

bxgwgixi

bxgwgixi1#

为什么会这样呢?因为SVG不仅仅是一个图像,它还是一个文档。
当你包含一个带有<iframe>的HTML文件时,当你改变框架的大小时,你不希望里面的文本缩放。SVG也是如此。
相反,SVG图像可以以任何像素大小绘制,因此它们不需要明确定义的高度或宽度。而且它们并不总是具有明确定义的宽高比。如果您希望SVG缩放以适应您给予它的尺寸(即min-width),则需要显式提供此信息(以及更多信息)。
有用的文章:How to Scale SVG | CSS-Tricks - CSS-Tricks
要执行溢出,你可以简单地添加一个min-width,如下所示:

img {
  position: absolute;
  left: 500px;
  min-width: 640px;
}
<!-- resized -->
<img src="https://keyller.io/generators/fr/solfege/cle-de-sol/img/treble-clef-9-sol.svg">

<!-- overflow -->
<!-- <img src="https://www.silicon.fr/wp-content/uploads/2019/08/stack_overflow.jpg"> -->

编辑:

SO svg声明了一个widthheight,而另一个没有。SO svg将尝试维护这个width,这导致了你看到的overflow。你会注意到,如果音乐svg上声明了width,那么它会按照你的要求导致溢出。
宽度未定义:

img {
  position: absolute;
  left: 500px;
}
<img src="https://keyller.io/generators/fr/solfege/cle-de-sol/img/treble-clef-9-sol.svg">

定义的宽度:svg[Attributes Style] {width: 800.12;}

img {
  position: absolute;
  left: 500px;
}
<img src="https://upload.wikimedia.org/wikipedia/commons/0/02/Stack_Overflow_logo.svg">

在聊天中解决了静态宽度和vminmax-heightmax-width以及object-fit: cover;

相关问题