【发布时间】:2011-02-24 19:22:09
【问题描述】:
以下代码在 Chrome 或 IE 中正确显示(图片为 200 像素宽)。在 Firefox 和 Opera 中,max-width 样式被完全忽略。为什么会发生这种情况,是否有好的解决方法?另外,哪种方式最符合标准?
注意
针对这种特殊情况的一种可能的解决方法是将max-width 设置为200px。然而,这是一个相当人为的例子。我正在寻找可变宽度容器的策略。
<!doctype html>
<html>
<head>
<style>
div { display: table-cell; padding: 15px; width: 200px; }
div img { max-width: 100%; }
</style>
</head>
<body>
<div>
<img src="http://farm4.static.flickr.com/3352/4644534211_b9c887b979.jpg" />
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec facilisis
ante, facilisis posuere ligula feugiat ut. Fusce hendrerit vehicula congue.
at ligula dolor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
leo metus, aliquam eget convallis eget, molestie at massa.
</p>
</div>
</body>
</html>
[更新]
正如下面mVChr 所述,w3.org spec 声明max-width 不适用于inline 元素。我尝试过使用div img { max-width: 100%; display: block; },但似乎无法解决问题。
[更新]
我仍然没有解决这个问题。但是,我正在使用以下 javascript hack 来解决我的问题。本质上,它重新创建了上述情况并检查浏览器是否支持display: table-cell 中的max-width。 (使用数据 uri 可以防止额外的 http 请求。下面是 3x3 bmp。)
jQuery( function ( $ ) {
var img = $( "<img style='max-width:100%' src='" +
"data:image/bmp;base64,Qk1KAAAAAAAAAD4AAAAoAAAAAwAAA" +
"AMAAAABAAEAAAAAAAwAAADEDgAAxA4AAAAAAAAAAAAAAAAAAP//" +
"/wAAAAAAwAAAAKAAAAA%3D" +
"'>" )
.appendTo(
$( "<div style='display:table-cell;width:1px;'></div>" )
.appendTo( "body" )
);
$.support.tableCellMaxWidth = img.width() == 1;
img.parent().remove();
});
【问题讨论】:
-
不太确定您要达到的目标是什么?你想让你的图片缩放吗?
-
+1 不,他的例子很好。图片有......大约400px。如果你告诉它获取
width: 100px;,它会缩小。但它不尊重最大宽度。 -
好的,我明白了。你不想设置你的 div 最大宽度?
-
@edl 不,div 可以是可变宽度。
标签: html css css-tables