Как сохранить соотношение сторон с помощью тега HTML IMG


132

Я использую HTML-тег img, чтобы показать фотографию в нашем приложении. Я установил для атрибутов высоты и ширины значение 64. Мне нужно отображать любое разрешение изображения (например, 256x256, 1024x768, 500x400, 205x246 и т. Д.) Как 64x64. Но установив атрибуты высоты и ширины тега img равным 64, он не поддерживает соотношение сторон, поэтому изображение выглядит искаженным.

Для справки мой точный код:

<img src="Runtime Path to photo" border="1" height="64" width="64">


Chridam, давно уже задавал этот вопрос. Я ушел из той компании, в которой работал над этим вопросом. Я не мог попробовать предлагаемые решения, потому что тогда я работал над другими приоритетами, чтобы уложиться в сроки. У меня не было шанса добиться в этом дальнейшего прогресса.
— сунил кумар

Ответы:


134

Не устанавливайте высоту И ширину. Используйте один или другой, и правильное соотношение сторон будет сохранено.

.widthSet {
    max-width: 64px;
}

.heightSet {
    max-height: 64px;
}
<img src="http://placehold.it/200x250" />

<img src="http://placehold.it/200x250" width="64" />

<img src="http://placehold.it/200x250" height="64" />

<img src="http://placehold.it/200x250" class="widthSet" />

<img src="http://placehold.it/200x250" class="heightSet" />


14
... но что, если вы хотите исправить и высоту, и ширину?
— fatuhoku 07

7
Это не имеет смысла для динамических приложений. Неизвестно, будет ли ширина или высота 64 пикселя, поскольку это зависит от соотношения сторон изображения. Почему этот ответ получил одобрение?
— Кенигсберг

@ Mär Этот вопрос касался изображений с фиксированной шириной и / или высотой. Отзывчивость не была требованием вопроса.
— Репа

3
Размер фиксированный, соотношение сторон - нет, так как речь шла конкретно о любом изображении любого разрешения. Включая разрешения меньше 64х64.
— Кенигсберг

66

вот образец

div{
   width: 200px;
   height:200px;
   border:solid
 }

img{
    width: 100%;
    height: 100%;
    object-fit: contain;
    }
<div>
  <img src="https://upload.wikimedia.org/wikipedia/meta/0/08/Wikipedia-logo-v2_1x.png">
</div>


8
Просто замечание для людей, которые хотят использовать это решение: соответствие объектам не очень хорошо поддерживается браузерами. Он вообще не поддерживается IE или Edge. Источник: caniuse.com/#feat=object-fit
— Шон Доусон

2
Теперь поддерживается Edge 16+, см. Таблицу: w3schools.com/css/css3_object-fit.asp
— Эдди Р.

45

Установите widthи heightизображений auto, но ограничьте оба max-widthи max-height:

img {
    max-width:64px;
    max-height:64px;
    width:auto;
    height:auto;
}

скрипка

Если вы хотите отображать изображения произвольного размера в «фреймах» 64x64px, вы можете использовать встроенные блочные оболочки и позиционирование для них, как в этой скрипке .


3
Не масштабируется за пределы исходного размера, только ниже исходного размера.
— Кенигсберг

40
<img src="Runtime Path to photo"
     style="border: 1px solid #000; max-width:64px; max-height:64px;">

2
Это правильное решение, поскольку оно по-прежнему не зависит от ориентации изображения. Решение 3rror404 требует, чтобы вы знали, является ли изображение шире, чем оно, или наоборот.
— devios1 05

2
также установите widthи heightна auto.
— Mahmoodvcs 05

Правильное решение для ограничения высоты и ширины.
— Паван Кумар

1
Изображение будет правильно ограничено этим, но не масштабируется сверх исходного размера. Хотя из вводного поста неясно, какой из двух OP хотел.
— Кенигсберг

14

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

Это невозможно сделать с помощью тега IMG (по крайней мере, без небольшого количества JavaScript), но это можно сделать следующим образом:

 <div style="background:center no-repeat url(...);background-size:contain;width:...;height:..."></div>

2
Да. Используйте style="background: url('_'); background-size: cover width:_px height:_px"для <img>тега.
— Удджвал Сингх

3
Спасибо, @UjjwalSingh. Действительно, нам coverне нужно containдля того, чтобы максимально увеличивать размер изображения. containприводит к "почтовому ящику".
— Ортвин Генц


3

Оберните изображение в divразмер 64x64 и установите width: inheritна изображение:

<div style="width: 64px; height: 64px;">
    <img src="Runtime path" style="width: inherit" />
</div>

1

Почему бы вам не использовать отдельный файл CSS для поддержания высоты и ширины изображения, которое вы хотите отобразить? Таким образом, вы можете указать ширину и высоту.

например:

       image {
       width: 64px;
       height: 64px;
       }

1

Попробуй это:

<img src="Runtime Path to photo" border="1" height="64" width="64" object-fit="cover">

Добавление object-fit = "cover" заставит изображение занять пространство без потери соотношения сторон.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.