当浏览器的宽度/高度变化时,如何使用CSS动态调整图像大小?


107

我不知道如何与浏览器窗口一起调整图像大小,是我到目前为止所做的(或将整个网站下载为ZIP格式)。

这在Firefox中可以正常工作,但在Chrome中却存在问题:图像不一定总是调整大小,它在某种程度上取决于加载页面时窗口的大小。

在Safari中也可以,但是有时会以最小宽度/高度加载图像。我不确定这可能是图像尺寸引起的。(如果加载正常,请尝试刷新几次以查看错误。)

关于如何使它更加防弹的任何想法?(如果需要JavaScript,我也可以接受,但是最好使用CSS。)


使用CSS3媒体查询或javascript的window.onresize事件处理程序。w3schools.com/jsref/event_onresize.asp
Shahid

如果您正在使用引导程序,请添加一个类似该类的类=“ img-thumbnail”。仅此而已。
VivekDev

Answers:


179

可以使用纯CSS完成,甚至不需要媒体查询。

要使图像灵活,只需添加max-width:100%height:auto。图像max-width:100%height:auto在IE7中可用,但在IE8中不可用(是的,另一个怪异的IE错误)。要解决此问题,您需要添加width:auto\9IE8。

来源:http//webdesignerwall.com/tutorials/response-design-with-css3-media-queries

CSS:

img {
    max-width: 100%;
    height: auto;
    width: auto\9; /* ie8 */
}

而且,如果您想强制使用固定的图片最大宽度,只需将其放在容器中即可,例如:

<div style="max-width:500px;">
    <img src="..." />
</div>

JSFiddle示例在这里。无需JavaScript。在最新版本的Chrome,Firefox和IE(我测试过的所有版本)中均可使用。


我在Opera 11和一些最新的Firefox上测试了jsfiddle链接,虽然当窗口缩小时可以很好地调整图像大小,但是当窗口超过650px时它无法调整大小
GDR

3
@GDR我不希望图像超出其原始大小,它只会像素化并且看起来很难看。如果您需要放大,我会从更大的图像开始。
Kurt Schindler 2012年

好的,那么我错误地认为这是此问题的重点,对不起。
GDR 2012年

2
将max-width设置为100%,将height设置为auto对我没有任何作用-我确实使用了容器。将图像包装在div中,设置最大高度/宽度,然后将图像(#div img {})设为宽度100%和高度100%。
Mave

1
这是什么魔法?!这太棒了!
Leonardo Wildt

24

2018年及以后的解决方案:

鉴于我们拥有一只猫的形象,使用相对于视口的单位应该使您的生活更轻松:

猫

现在,我们希望这只猫在我们的代码中,同时注意长宽比:

img {
  width: 100%;
  height: auto;
}
<img src="https://www.petmd.com/sites/default/files/petmd-cat-happy-10.jpg" alt="cat">

到目前为止,这并不是很有趣,但是如果我们想将猫的宽度更改为最大视口的50%怎么办?

img {
  width: 100%;
  height: auto;
  /* Magic! */
  max-width: 50vw;
}
<img src="https://www.petmd.com/sites/default/files/petmd-cat-happy-10.jpg" alt="cat">

相同的图像,但现在限制为最大宽度50vw vw(=视口宽度),这意味着该图像将是视口的X宽度,具体取决于所提供的数字。这也适用于身高:

img {
  width: auto;
  height: 100%;
  max-height: 20vh;
}
<img src="https://www.petmd.com/sites/default/files/petmd-cat-happy-10.jpg" alt="cat">

这会将图像的高度限制为最大20%的视口。


谢谢!当我有不同尺寸的图像时,如何确定vh和vw?
Herman Toothrot

@HermanToothrot大家好,您是说要在使用视口单位时保持宽高比吗?
roberrrt-s

@Roberrrt说我在行内块中有几张不同大小的图像,想要保持所有图像的长宽比,但将它们设置为相同的高度或宽度。
赫尔曼·托特罗特

做宽度:100%和最大高度:50vh或反
roberrrt-s

@Roberrrt宽度:100%似乎影响不大。我只需要猜测vh,就我而言50太多了,40最大化了所有图像的高度。
赫尔曼·托特罗特


6

将大小调整属性设置为两者。然后,您可以像这样更改宽度和高度:

.classname img{
  resize: both;
  width:50px;
  height:25px;
}

5

您正在使用jQuery吗?

因为我在jQuery插件上进行了快速搜索,并且它们似乎有一些插件可以执行此操作,所以请检查一下该插件是否可以工作:

http://plugins.jquery.com/project/jquery-afterresize

编辑:

这是CSS解决方案,我只添加了style =“ width:100%”,至少对我来说适用于chrome和Safari。我没有ie,所以只在那里测试,让我知道,这是代码:

            <div id="gallery" style="width: 100%">
                <img src="images/fullsize.jpg" alt="" id="fullsize" />
                <a href="#" id="prev">prev</a>
                <a href="#" id="next">next</a>
            </div>

1
jQuery对于这样一个简单的问题是不必要的。为什么在几行JS上加载50 KB +(整个库)会有好处?

1
当然,您s why I问他是否正在使用jQuery 是完全正确的,因为如果他使用jQuery可能是个好主意,只需添加插件!
亚瑟·内维斯

所以没有JS不可能吗?我找到简单的解决方案是这样一个unstoppablerobotninja.com/search/...,但是我无法在我的模板完全实现它成功地
DEPI

4

最初,我使用以下html / css:

img {
  max-width: 100%;
  height: auto;
  width: auto\9; /* ie8 */
}
<div> 
  <img src="..." />
</div>

然后我添加class="img"<div> 这样的:

<div class="img">
  <img src="..." />
</div>

一切开始正常。




0

尝试

.img{
   width:100vw; /* Matches to the Viewport Width */
   height:auto;
   max-width:100% !important;
}

仅适用于显示块和内联块,这对伸缩项目没有影响,因为我花了很长时间尝试找出答案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.