Следующий код отображается правильно в 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 гласит, что max-width
не применяется к inline
элементам. Я пытался использовать div img { max-width: 100%; display: block; }
, но, похоже, это не решает проблему.
* * Тысяча двадцать-одина [Обновление] * * тысяча двадцать-дв
У меня до сих пор нет решения этой проблемы. Тем не менее, я использую следующий взлом JavaScript, чтобы исправить мои проблемы. По сути, он воссоздает описанную выше ситуацию и проверяет, поддерживает ли браузер 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();
});