Як я можу зробити всі зображення різної висоти та ширини однаковими за допомогою CSS?


88

Я намагаюся створити стіну зображення, що складається з фотографій товару. На жаль, всі вони різної висоти та ширини. Як я можу використовувати css, щоб усі зображення мали однаковий розмір? переважно 100 х 100.

Я думав зробити div, який має висоту та ширину 100px, а потім трохи поповнив його. Не знаю, як це зробити.

Як я можу це зробити?


1
зробіть divs фіксованою висотою / шириною, потім набийте зображення зображеннями overflow:noneта відцентруйте зображення горизонтально / вертикально в div.
Marc B

2
@MarcB Мабуть, ти маєш на увазі overflow: hidden;. :)
insertusername тут

1
@MarcB такого немає overflow:noneв css. Навіть overflow:hiddenне вирішить проблему.
Rajesh Paul,

Відповіді:


171

Оновлена ​​відповідь (без підтримки IE11)

img {
    float: left;
    width:  100px;
    height: 100px;
    object-fit: cover;
}
<img src="http://i.imgur.com/tI5jq2c.jpg">
<img src="http://i.imgur.com/37w80TG.jpg">
<img src="http://i.imgur.com/B1MCOtx.jpg">

Оригінальна відповідь

.img {
    float: left;
    width:  100px;
    height: 100px;
    background-size: cover;
}
<div class="img" style="background-image:url('http://i.imgur.com/tI5jq2c.jpg');"></div>
<div class="img" style="background-image:url('http://i.imgur.com/37w80TG.jpg');"></div>
<div class="img" style="background-image:url('http://i.imgur.com/B1MCOtx.jpg');"></div>


2
чудова відповідь! працює і для таких бібліотек, як Angular та Vue, коли хочеш користувацький репітер!
Matt Catellier

1
використання div замість img могло вплинути на seo (не впевнений)
Мухаммад Алі Мансур

@MuhammadAliMansoor це могло б, якщо ви не компенсуєте мікроданими. Я оновив свою відповідь, щоб досягти того ж результату за допомогою тегів img та об'єкта-пристосування, який тепер має хорошу підтримку.
Саймон Арнольд,

1
Чому, блін, це не по всьому Інтернету? Він навіть працює з% ширини!
Ліз

33

чи можу я просто додати, що якщо ви занадто спотворюєте свої зображення, тобто виймаєте їх із пропорції, вони можуть виглядати неправильно, - крихітна кількість - це нормально, але один із способів зробити це - помістити зображення всередину "контейнера" і встановіть для контейнера значення 100 x 100, потім встановіть, щоб ваше зображення не переповнювало жодне, і встановіть найменшу ширину на максимальну ширину контейнера, хоча це трохи обріже ваше зображення,

наприклад

<h4>Products</h4>
<ul class="products">
    <li class="crop">
        <img src="ipod.jpg" alt="iPod" />
    </li>
</ul>



.crop {
 height: 300px;
 width: 400px;
 overflow: hidden;
}
.crop img {
 height: auto;
 width: 400px;
}

Таким чином зображення залишатиметься розміром свого контейнера, але буде змінювати розмір, не порушуючи обмежень


Це мій найкращий метод. Це практичніше, ніж використання фонів.
gillytech

1
Це, безумовно, кращий варіант, мої зображення не були спотворені в al.l
pwborodich

31

Найпростіший спосіб - це збереже розмір зображення таким, яким він є, а іншу область заповнить простором, таким чином всі зображення займуть однаковий вказаний простір незалежно від розміру зображення без розтягування

.img{
   width:100px;
   height:100px;

/*Scale down will take the necessary specified space that is 100px x 100px without stretching the image*/
    object-fit:scale-down;

}

1
Ого, це було насправді так просто. Можливо, інші відповіді є "правильними", але цю найпростішу в реалізації.
Randall Arms Jr.

5
Єдине застереження щодо цього - відсутність підтримки IE11.
Ромулу

Перевагою цього є те, що ваші зображення не обрізані і не перекошені, але недоліком є ​​те, що вони все одно не обов’язково мають однаковий розмір. Замість того, щоб object-fit: масштабувати, ви також можете спробувати object-fit: cover.
Вінсент

19

Ви можете використовувати object-fitвластивість для розміру imgелементів:

  • coverрозтягує або стискає зображення пропорційно, щоб заповнити контейнер. Зображення обрізається горизонтально або вертикально, якщо це необхідно.
  • contain розтягує або стискає зображення пропорційно до розміщення всередині контейнера.
  • scale-down стискає зображення пропорційно, щоб поміститися всередині контейнера.

.example {
  margin: 1em 0;
  text-align: center;
}

.example img {
  width: 30vw;
  height: 30vw;
}

.example-cover img {
  object-fit: cover;
}

.example-contain img {
  object-fit: contain;
}
<div class="example example-cover">
  <img src="https://i.stack.imgur.com/B0EAo.png">
  <img src="https://i.stack.imgur.com/iYkNH.png">
  <img src="https://i.stack.imgur.com/gne9N.png">
</div>

<div class="example example-contain">
  <img src="https://i.stack.imgur.com/B0EAo.png">
  <img src="https://i.stack.imgur.com/iYkNH.png">
  <img src="https://i.stack.imgur.com/gne9N.png">
</div>

У наведеному вище прикладі: червоний - це пейзаж, зелений - портрет, а синій - квадратне зображення. Картатий візерунок складається з квадратів 16x16px.


1
Це чудово, за винятком того, що це не працює для будь-якої версії IE. caniuse.com/#feat=object-fit
Джаміла Хук

3

Для тих, хто використовує Bootstrap і не бажає втрачати реакцію, просто не встановлюйте ширину контейнера. Наступний код базується на повідомленні gillytech .

index.hmtl

<div id="image_preview" class="row">  
    <div class='crop col-xs-12 col-sm-6 col-md-6 '>
         <img class="col-xs-12 col-sm-6 col-md-6" 
          id="preview0" src='img/preview_default.jpg'/>
    </div>
    <div class="col-xs-12 col-sm-6 col-md-6">
         more stuff
    </div>

</div> <!-- end image preview -->

style.css

/*images with the same width*/
.crop {
    height: 300px;
    /*width: 400px;*/
    overflow: hidden;
}
.crop img {
    height: auto;
    width: 100%;
}

АБО style.css

/*images with the same height*/
.crop {
    height: 300px;
    /*width: 400px;*/
    overflow: hidden;
}
.crop img {
    height: 100%;
    width: auto;
}

3

Ви можете зробити це таким чином:

 .container{
position: relative;
width: 100px;
height: 100px;
overflow: hidden;
z-index: 1;
}

img{
left: 50%;
position: absolute;
top: 50%;
-ms-transform: translate(-50%, -50%);
-webkit-transform: translate(-50%, -50%);
-moz-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
max-width: 100%;
}

1

Я шукав рішення цієї ж проблеми, щоб створити список логотипів.

Я придумав це рішення, яке використовує трохи flexbox, яке працює для нас, оскільки нас не турбують старі браузери.

Цей приклад передбачає розмір 100x100px, але я впевнений, що розмір може бути гнучким / адаптивним.

.img__container {
    display: flex;
    padding: 15px 12px;
    box-sizing: border-box;
    width: 100px; height: 100px;

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

пс .: можливо, вам доведеться додати деякі префікси або скористатися автопрефіксом.


1

Спираючись на відповідь Енді Уілкінсона (друга), я трохи вдосконалився, переконайтесь, що показано центр зображення (як прийнята відповідь):

HTML:

<div class="crop">
   <img src="img.png">
</div>

CSS:

.crop{
  height: 150px;
  width: 200px;
  overflow: hidden;
}
.crop img{
  width: 100%;
  height: auto;
  position: relative;
  top: 50%;
  -webkit-transform: translateY(-50%); /* Ch <36, Saf 5.1+, iOS < 9.2, An =<4.4.4 */
  -ms-transform: translateY(-50%); /* IE 9 */
  transform: translateY(-50%); /* IE 10, Fx 16+, Op 12.1+ */
}

1

Встановіть параметри висоти та ширини у файлі CSS

.ImageStyle{

    max-height: 17vw;
    min-height: 17vw;
    max-width:17vw;
    min-width: 17vw;
    
}


1
.article-img img{ 
    height: 100%;
    width: 100%;
    position: relative;
    vertical-align: middle;
    border-style: none;
 }

Ви зробите розмір зображень таким же, як div, і ви можете використовувати сітку завантаження, щоб відповідно маніпулювати розміром div


0

Розмір зображення не залежить від висоти та ширини div,

використовувати елемент img у css

Ось код css, який вам допоможе

div img{
         width: 100px;
         height:100px;
 }

якщо ви хочете встановити розмір за допомогою div

використовуй це

div {
    width:100px;
    height:100px;
    overflow:hidden;
}

за цим кодом ваше зображення відображається в оригінальному розмірі, але перше переповнення 100x100px приховає


0

Без коду вам важко допомогти, але ось кілька практичних порад для вас:

Я підозрюю, що ваша "стіна зображення" має якийсь контейнер з ідентифікатором або класом, щоб надати йому стилі.

наприклад:

<body>

<div id="maincontainer">
  <div id="header"></div>

  <div id="content">
    <div id="imagewall">
      <img src"img.jpg">
<!-- code continues -->

Скласти розмір на всіх зображеннях для вашої стіни зображення, не впливаючи на інші зображення, наприклад, на ваш логотип тощо, легко, якщо ваш код налаштований подібно до вищезазначеного.

#imagewall img {
  width: 100px;
  height: 100px; }

Але якщо ваші зображення не ідеально квадратні, вони будуть перекошені за допомогою цього методу.


0

Перейдіть до свого файлу CSS та змініть розмір усіх зображень, як показано нижче

img {
  width:  100px;
  height: 100px;
}

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