Як встановити максимальну ширину зображення в CSS


84

На своєму веб-сайті я хотів би відображати зображення, завантажені користувачем, у новому вікні з певним розміром ( width: 600px). Проблема в тому, що зображення можуть бути великими. Отже, якщо вони більші за ці 600px, я хотів би змінити їх розмір, зберігаючи пропорції.

Я спробував max-widthвластивість CSS, але воно не працює: розмір зображення не змінюється.

Чи є спосіб вирішити цю проблему?

HTML :

<div id="ImageContainerr">
    <img src="DisplayImage.do?ad_id=${requestScope.advert.id}" class="Image" />
</div>

CSS :

img.Image { max-width: 100%;}
div#ImageContainer { width: 600px; }

Я також спробував встановити max-width: 600pxзображення, але не працює. Зображення передається з сервлету (воно зберігається поза папкою веб-додатків Tomcat).


1
якщо ви хочете, щоб він автоматично зменшився, просто встановіть max-width, не встановлюйте, max-heightі він повинен працювати. Якщо ні, опублікуйте свій код, щоб інші могли допомогти вам виявити проблему.
Ray Cheng

2
Я щойно спробував ваш приклад, і він працює тут. Ви впевнені, що у вашому фактичному html ("ImageContainerr") немає такої помилки, як у цьому прикладі?
Містер Лістер,

Блін, ти маєш рацію. Я перезапустив Tomcat і браузер, спробував ще раз - і це дійсно працює нормально. Все одно дякую :) Помилка не була такою - я змінив тут ідентифікатор та назву класу, щоб було легше зрозуміти.
user1315305

3
З цього я міг би припустити, що ви не використовуєте Firebug чи інші інструменти розробника. Я пропоную вам придбати собі Firebug і навчитися користуватися нею. (Оглянувши ці два елементи, ви побачили б, що ширина не була додана до контейнера.)
Joonas

2
Попередження: Це питання набагато менш широко застосовується, ніж спочатку. Схоже, що багато прихильників можуть бути, тому що ті прихильники також пропустили, щоidтут не відповідає CSS. Як писано (20151201), це питання зводиться до: "Селектори CSS, які не відповідають жодним об'єктам DOM, не впливають на зовнішній вигляд". ; ^) (Не можу зрозуміти, чи було б краще відредагувати питання, запитати, що означає його заголовок, чи ні ...)
ruffin

Відповіді:


133

Ви можете написати так:

img{
    width:100%;
    max-width:600px;
}

Перевірте це http://jsfiddle.net/ErNeT/


Дуже дякую! Це чудово працює! Редагувати: Ну, не чітко - він також змінює розміри зображень розміром менше 600 пікселів - і це те, що я не хочу.
user1315305

3
Я голосував проти. Те, що хоче OP, - це не те, що ви пропонуєте. Ви також повинні були усвідомити, що в коді ОП може бути проблема, тому що, як він намагався, має спрацювати .. Хто колись голосував, дайте мені причину, дякую
Joonas

1
@Lollero спочатку редагує своє запитання після моєї відповіді, і чи можете ви пояснити, що не так у моїй відповіді? спасибі
sandeep

2
Це не зберігає співвідношення сторін в IE
Cocowalla

1
Яка мета "ширини: 100%"? Здається, пов’язана скрипка добре працює без неї? (Випробувано у Firefox та Safari на Mac OX)
Джон Шнайдер

12

Я бачу, що на це не відповіли остаточно.

Я бачу, у вас максимальна ширина 100%, а ширина 600. Переверніть їх.

Простий спосіб також:

     <img src="image.png" style="max-width:600px;width:100%">

Я часто цим користуюся, і тоді ви також можете керувати окремими зображеннями, і не мати їх на всіх тегах img. Ви можете CSS це також сподобатися нижче.

 .image600{
     width:100%;
     max-width:600px;
 }

     <img src="image.png" class="image600">

5

Проблема в тому, що тег img є вбудованим елементом, і ви не можете обмежити ширину вбудованого елемента.

Отже, щоб спочатку обмежити ширину тегу img, вам потрібно перетворити його в елемент inline-block

img.Image{
    display: inline-block;
}

3

Враховуючи ширину вашого контейнера 600px.

Якщо ви хочете, щоб всередині розміщувалися лише більші зображення, ніж це, додайте: CSS:

#ImageContainer img {
    max-width: 600px;
}

Якщо ви хочете, щоб ВСІ зображення займали доступний простір (600 пікселів):

#ImageContainer img {
    width: 600px;
}

Також коментарі до OP вказують на те, що ви використовуєте неправильний ідентифікатор у файлі CSS: div # ImageContainer не те саме, що <div id = "ImageContainerr">
Лео Арментано,

1

Спробуйте це

 div#ImageContainer { width: 600px; }
 #ImageContainer img{ max-width: 600px}

1
Це неправильно. Ваш селектор означає "елемент img всередині елемента Image".
Містер Лістер,

0

Ваш css майже правильний. Вас просто не вистачає display: block;в image css. Також одна помилка у вашому ідентифікаторі. Вона повинна бути<div id="ImageContainer">

img.Image { max-width: 100%; display: block; }
div#ImageContainer { width: 600px; }
<div id="ImageContainer">
    <img src="http://placehold.it/1000x600" class="Image">
</div>

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.