重置通过CSS设置的图像宽度和高度

5
我正在尝试在HTML中创建一个包含图像的流体布局。现在,我支持两种大小的布局。默认布局用于显示1000像素宽的网站。如果屏幕足够宽(大于1200像素),我将使用CSS媒体查询增强许多方面。
我有一个DIV容器,对于默认布局宽度为600像素,对于增强布局为700像素。里面有一个随机图像,我知道一些元数据(宽度和高度)。如果图像太大无法适应容器,我可能需要缩小图像。
因此,我使用以下代码实现流动布局:
<div class="container">
  <!-- for a 650px/400px image, the downsized version is 600px/369px -->
  <img src="/image?id=1234" width="650" height="400" style="width:600px;height:369px" />
</div>

和风格

@media screen and (min-width:1200px){
  .container IMG {
    width:auto !important;
    height:auto !important;
  }
}

这是它的工作原理:
对于默认布局,应用内联样式。因此,图像被缩小到600px/369px以适应容器。 否则,媒体查询样式适用,图像处于其默认宽度/高度(我知道图像从未超过700px,所以一切正常)。
我的问题来自浏览器加载状态和预留空间。Chrome / Firefox的行为相同,但对我来说很奇怪。未使用IE进行测试(实际上不是我的优先事项)
对于默认布局,没有问题,仍然应用内联样式。浏览器显示与图像相对应的白色空间。
对于增强布局,应用“自动”大小。但是,浏览器在图像未完全加载时不知道其自然大小,而似乎“自动”等效于0px。如果设置的图像宽度和高度属性应用,则会非常完美。但情况并非如此。结果是不为图像保留任何空间,这不是我想要的行为。
我找到的第一个解决方案是为图像添加另一个内联CSS规则。如果我添加“min-width:600px; min-height:369px”,则为图像保留的空间始终为600x369像素,而不是增强布局的0像素。那更好了,但还不够完美。
- 你认为呢? - 是否可能“重置”CSS而不是使用“auto!important”规则覆盖它? - 我应该采用其他方法吗? - 我可以使用一些JavaScript,但我认为依赖它是一个坏主意。实际上,我可能有很多类似上面描述的容器。我更喜欢自动解决方案(CSS非常适合这种情况)。

你知道是否可以为元素添加内联媒体查询吗?我认为这是不可能的。但如果可以的话,我可以写成:<img src="..." style="width:600px;height:369px; @media screen and (min-width:1200px){width:650px;height:400px}" />。 - Mat
删除使用CSS的height:auto。 - Ciro Santilli OurBigBook.com
3个回答

4

您可以将widthheight设置为initial,这将重置覆盖上的值。


4
实际上这并不起作用。如果一张图片有widthheight属性,并且存在任何设置宽度的CSS,则似乎无法让浏览器使用属性值... - random_user_name

1
我听说过响应式图片的一般方法是使用媒体查询来调整父元素(例如.container)的大小。在您的标记中,删除宽度和高度属性,然后在CSS中添加以下内容:
img {
   width: 100%;
 }

由于您的父元素的大小受媒体查询规则的限制,因此您的图像将相应地增长。

我提出这个问题是因为看起来您想使用同一张图像文件,只是让它变大/缩小。主要的缺点是较大的图像可能会加载到移动设备屏幕上,并增加页面加载时间。这是当前响应式设计面临的主要技术难题,关于如何解决这个问题存在很大的争议。


我刚刚进行了一项测试。实际上,我面临完全相同的问题,但是出于某种原因,我在第一篇帖子中没有解释清楚。我知道容器的宽度,但不知道其高度。我希望容器的高度与子图像相同。因此,在加载图像时,容器仍然没有高度。 - Mat
关于在两个布局中使用相同的图像,我有两个原因:(1)如果图像小于600像素宽,则对于两个布局来说是完全相同的图像。(2)我认为从600像素到700像素的开销不足以表明图像的重要减轻。但是,如果我有两个图像,我必须将这两个图像存储在服务器端。 - Mat
回复:图片大小 - 这是使用相同图片的好理由。100像素的差异不足以证明需要更复杂的解决方案。回复:父容器 - 如果您没有设置父容器的显式高度,则应该随着图像的大小而增长,无论图像的高度如何。您的情况是否不是这样? - chipcullen

0
使用.container IMG.someClass { ... },然后您就可以从图像中删除类名以删除CSS样式。

我只需要默认布局的样式,这是正确的。因此,当我检测到增强布局时,我可以使用Javascript删除类。但正如我在第一篇帖子末尾所说,这样做会失去CSS媒体查询提供的所有出色功能,对吧? - Mat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接