Следующий код работает как и ожидалось в Firefox
Я не согласен с этим, потому что для меня Chrome ведет себя как ожидалось по двум причинам:
Вы устанавливаете ширину изображения равной 100%
, что означает 100% содержащего их блока (контейнера), который определяется как 600px
.Таким образом, каждое изображение будет 600px
Изображение не может сжиматься до размера его содержимого из-за конфигурации min-width
по умолчанию (обратите внимание, что при использовании unset
эквивалентно initial
в этом случае, так что это как-то бесполезно).Таким образом, изображение будет сохранено на 600px
Если вы добавите min-width:0
, изображение будет уменьшаться только по ширине:
.r {
width: 100%;
/*height: auto; useless */
min-width: 0;
max-width: 100%;
}
.container {
display: flex;
width: 600px;
}
<div class="container">
<img src="https://lundbeckconsulting.no/Temp/illu1.jpg" class="r" />
<img src="https://lundbeckconsulting.no/Temp/illu1.jpg" class="r" />
<img src="https://lundbeckconsulting.no/Temp/illu1.jpg" class="r" />
<img src="https://lundbeckconsulting.no/Temp/illu1.jpg" class="r" />
</div>
Теперь, если учесть высоту, вы столкнулись с эффектом stretch
, который также не одинаков в обоих браузерах.Объяснить 1 немного сложно, но если вы измените выравнивание по умолчанию, вы получите ожидаемый результат в chrome:
.r {
width: 100%;
/*height: auto; useless */
min-width: 0;
max-width: 100%;
}
.container {
display: flex;
width: 600px;
align-items:flex-start;
}
<div class="container">
<img src="https://lundbeckconsulting.no/Temp/illu1.jpg" class="r" />
<img src="https://lundbeckconsulting.no/Temp/illu1.jpg" class="r" />
<img src="https://lundbeckconsulting.no/Temp/illu1.jpg" class="r" />
<img src="https://lundbeckconsulting.no/Temp/illu1.jpg" class="r" />
</div>
Или, если вы измените высоту, используя процентное значение , вы заставите ее потерпеть неудачу , а также получите то, что хотите (это немного страннопотому что мы вызываем другую проблему, чтобы исправить актуальную)
.r {
width: 100%;
height:658%; /*any value here with %*/
min-width: 0;
max-width: 100%;
}
.container {
display: flex;
width: 600px;
}
<div class="container">
<img src="https://lundbeckconsulting.no/Temp/illu1.jpg" class="r" />
<img src="https://lundbeckconsulting.no/Temp/illu1.jpg" class="r" />
<img src="https://lundbeckconsulting.no/Temp/illu1.jpg" class="r" />
<img src="https://lundbeckconsulting.no/Temp/illu1.jpg" class="r" />
</div>
Почему Firefox ведет себя так?
Я не знаю точно, но логическое объяснение состоит в том, чтоFirefox не учитывает конфигурацию min-width
по умолчанию и отдает приоритет сохранению соотношения, а не растяжению.
1 Первоначально ваше изображениеОпределяя высоту контейнера, так как они большие (около 700 пикселей в высоту), эта высота используется контейнером, затем мы применяем свойства к нашему изображению, чтобы они сжимались по ширине, и так как выравнивание по умолчанию растягивается, они растягиваются до высоты.контейнера, который был первоначально определен их собственной начальной высотой, создающей это рендеринг.
Если мы удалим эффект растяжения, изображение попытается сохранить их соотношение , так как мы сняли ограничение по высоте.
Та же логика, если мы рассмотрим процентное значение для высоты.На этот раз не будет auto
, и мы вернемся к поведению по умолчанию (сохраняя соотношение сторон)
Другая альтернатива
Проблема возникла из-заиспользование изображения, заменяющего элемент с внутренним размером, где вычисление ширины / высоты не так просто, как для другого элемента.
Чтобы избежать такого поведения, лучше обернуть изображение внутри div
и избегать ихкак гибкие предметы.
.r {
width: 100%;
max-width: 100%;
}
.container {
display: flex;
width: 600px;
}
img {
max-width: 100%;
}
<div class="container">
<div class="r"><img src="https://lundbeckconsulting.no/Temp/illu1.jpg" /></div>
<div class="r"><img src="https://lundbeckconsulting.no/Temp/illu1.jpg" /></div>
<div class="r"><img src="https://lundbeckconsulting.no/Temp/illu1.jpg" /></div>
<div class="r"><img src="https://lundbeckconsulting.no/Temp/illu1.jpg" /></div>
</div>