Как с помощью CSS сделать все изображения разной высоты и ширины одинаковыми?


88

Я пытаюсь создать имиджевую стену, состоящую из фотографий продуктов. К сожалению, все они разной высоты и ширины. Как я могу использовать CSS, чтобы все изображения выглядели одинакового размера? предпочтительно 100 х 100.

Я думал о создании div с высотой и шириной 100 пикселей, а затем о том, как его заполнить. НЕ знаю, как это сделать.

Как я могу этого добиться?


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

2
@MarcB Думаю, ты имеешь в виду overflow: hidden;. :)
insertusername здесь

1
@MarcB такого нет overflow:noneв css. Даже overflow:hiddenпроблему не решит.
Раджеш Пол

Ответы:


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, когда вы хотите использовать повторитель пользователя!
Мэтт Кателье

1
использование div вместо img может повлиять на поисковую оптимизацию (не уверен)
Мухаммед Али Мансур

@MuhammadAliMansoor, если бы вы не компенсировали это микротадатами. Я обновил свой ответ, чтобы добиться того же результата с тегами img и object-fit, который теперь имеет хорошую поддержку.
Саймон Арнольд

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.
Romuloux

Достоинством этого является то, что ваши изображения не обрезаны и не перекошены, но недостатком является то, что они все еще не обязательно имеют одинаковый размер. Вместо object-fit: scale-down вы также можете попробовать 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>

В приведенном выше примере: красный - пейзаж, зеленый - портрет, синий - квадратное изображение. Клетчатый узор состоит из квадратов размером 16x16 пикселей.


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, который работает для нас, поскольку мы не беспокоимся о старых браузерах.

В этом примере предполагается поле размером 100x100 пикселей, но я уверен, что размер может быть гибким / отзывчивым.

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

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

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


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;
}

с помощью этого кода ваше изображение будет отображаться в исходном размере, но при отображении первого переполнения 100x100 пикселей скроется


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.