以下代码在 Chrome 或 IE 中正确显示(图像为 200px 宽)。在 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 规范声明max-width
不适用于inline
元素。我试过使用div img { max-width: 100%; display: block; }
,但它似乎并没有解决问题。
[更新]
我仍然没有解决这个问题。但是,我正在使用以下 javascript hack 来解决我的问题。本质上,它重新创建了上述情况并检查浏览器是否支持max-width
. display: table-cell
(使用数据 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();
});