Як підтримувати співвідношення сторін за допомогою тегу HTML IMG


132

Я використовую тег img HTML для показу фотографії в нашому додатку. Я встановив атрибут висоти та ширини як 64. Мені потрібно показати будь-яку роздільну здатність зображення (наприклад, 256x256, 1024x768, 500x400, 205x246 і т.д.) як 64x64. Але встановивши атрибути висоти та ширини тегів img до 64, це не підтримує співвідношення сторін, тому зображення виглядає спотвореним.

Для вашої довідки мій точний код:

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


Крідам, Давно пора, коли я задав це питання. Я покинув цю компанію, де працював над цим питанням. Я не міг спробувати запропоновані рішення, оскільки працював над іншими пріоритетами, щоб дотриматись термінів до того часу. Я не міг отримати шанс зробити подальший прогрес у цьому.
sunil kumar

Відповіді:


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
... але що робити, якщо ви хочете зафіксувати і висоту, і ширину?
фатухоку

7
Це не має сенсу для динамічних додатків. Невідомо, чи буде ширина або висота 64px, оскільки це залежить від співвідношення зображення. Чому це відповідна реакція?
Конігсберг

@ 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
Едді Р.

44

Набір 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

2
також встановити widthі heightв auto.
Mahmoodvcs

Правильне рішення для обмеження як висоти, так і ширини.
Паван Кумар

1
Це зображення буде належним чином обмежене цим, але не масштабуватиметься за його вихідний розмір. Хоча з вступного поста невідомо, кого з двох хотіли ОП.
Конігсберг

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.