Следующий код отображается правильно в 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>
[Update]
Как указано mVChr ниже, w3.org spec что max-width
не относится к элементам inline
. Я пробовал использовать div img { max-width: 100%; display: block; }
, но, похоже, это не исправляет проблему.
[Update]
У меня все еще нет решения этой проблемы. Тем не менее, я использую следующий javascript hack, чтобы исправить свои проблемы. По сути, он воссоздает ситуацию выше и проверяет, поддерживает ли браузер max-width
внутри display: table-cell
. (Использование данных uri предотвращает дополнительный HTTP-запрос. Ниже приведен размер 3x3 бит.)
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();
});