Пропорциональное масштабирование изображений с атрибутами размерностей.

Перевод статьи:  How to proportionally scale images that have dimension attributes.
Автор:  Roger Johansson.

Способность изображений масштабироваться совместно с их контейнерами является важнейшим моментом отзывчивого веб-дизайна (более того, этот вопрос был актуален еще до того, как понятие «отзывчивый веб-дизайн» вообще существовало). И в этом нет ничего сложного, все, что вам нужно — это установить процентное значение ширины (или максимальной ширины):

img {
max-width:100%;
}

Такое форматирование позволяет предотвратить превышение любым из имеющихся на странице img элементов ширины его контейнера. И в ситуации, когда контейнер становится ýже содержащегося в нем изображения, элемент изображение пропорционально уменьшает свою ширину, для того, чтобы быть в рамках контейнера. Все очень просто, не правда ли, однако, есть нюансы.

Если в разметке у элемента изображения имеются контентные атрибуты размерностей (width и height) и вы, используя приведенный выше способ, средствами CSS переопределяете его ширину, высота изображения останется прежней, поскольку ее значение определяется с помощью контентного атрибута элемента. А это, естественно, приведет к искажению изображения.

*Когда элемент не содержит в своем составе контентных атрибутов размерностей, то для корректного масштабирования изображения, одного, приведенного выше правила будет достаточно, так как в этом случае значение высоты не задается явным образом, а значит, будет применено исходное значение свойства height: auto, что сохранит пропорции внутренних размеров элемента изображения. Казалось бы, все очевидно и понятно. Однако автор статьи не зря обратил внимание на этот нюанс. Здесь имеет место так называемый «конфликт» спецификаций. Разработчик может понадеяться на то, что пользовательский агент, руководствуясь рекомендациями CSS спецификации, будет автоматически использовать исходное значение высоты элемента (т.е. auto), однако его высота уже установлена явно с помощью атрибута HTML стандарта. Этот дефект может оставаться незамеченным довольно долго, вплоть до финальных тестирований конечного продукта. Далее, совет профессионала.

Простейший способ предотвращения подобной проблемы заключается в исключении атрибутов width и height из разметки элемента. Однако, именно такой способ определения размеров изображения, с помощью контентных атрибутов, наиболее предпочтителен с точки зрения производительности ресурса, поскольку это позволяет снизить время, требуемое браузеру для отображения изображения. Более детально данный вопрос раскрывается в рекомендациях Google по определению размеров изображения. Каких либо жестких рекомендаций по размещению этих данных нет, они могут содержаться в HTML разметке и/или определяться с помощью CSS кода. Я, все же, склоняюсь к мнению, что как с практической, так и с логической точки зрения, необходимо использовать HTML атрибуты.

Итак, мы хотим указывать требуемые размеры наших изображений и в тоже время получить возможность их пропорционального масштабирования. К счастью, такой способ есть, более того, он невероятно прост — необходимо добавить CSS декларацию, переопределяющую явно указанное значение высоты контентным атрибутом в HTML. То есть совместно с max-width нужно использовать height:auto:

img {
max-width:100%;
height:auto;
}

Теперь масштабирование изображений будет происходить без искажений. Наглядный пример пропорционального масштабирования содержащих атрибуты размерностей изображений можно увидеть на этой демо-странице.

Поддержка браузерами.

Даже в нашем, казалось бы простейшем случае, существует пару различий в реализации некоторыми браузерами, на которые необходимо обратить внимание, по крайней мере, если вы заинтересованы в предоставлении гибко изменяющейся по ширине компоновки в IE8 и ниже.

IE7, кстати, выполняет пропорциональное масштабирование изображения независимо от того, указаны ли атрибуты размерностей в разметке и даже в том случае, если вы не используете декларацию height:auto.

Что касается IE8, то для корректного масштабирования изображений, вам, как ни странно, потребуется помимо переопределения установленной в разметке высоты, переопределить и значение ширины. К великой радости, наличие дополнительной декларации width:auto не вызывает никаких проблем в других браузерах. Итак, для пропорционального масштабирования изображений в IE8 вам необходимо использовать следующее правило:

img {
width:auto;
max-width:100%;
height:auto;
}
* Примечание переводчика.

Комментариев: 2 на Пропорциональное масштабирование изображений с атрибутами размерностей.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *