Как можно объяснить ситуацию, при которой при уменьшении экрана изображение не сжимается, если оно не обернуто в дополнительный контейнер? В первом случае (card-1), когда картинка находится в div, все работает как ожидается. Однако, во втором (card-2) и третьем (card-3) примерах это не происходит. Каким образом можно исправить данное поведение?
Вероятно, причина такого поведения заключается в том, что изображение не является элементом, который по умолчанию поддерживает свойства flexbox. Поэтому, если изображение обернуто в дополнительный контейнер (например, div), этот контейнер будет рассматриваться как элемент flexbox, а изображение будет его потомком и изменять свои размеры в соответствии с правилами flexbox. Чтобы исправить данное поведение, можно добавить свойство "flex: 1" к изображению напрямую (например, img {flex: 1;}), чтобы указать, что оно должно занимать все доступное пространство внутри своего родительского контейнера flexbox и изменять свои размеры соответственно. Пример: ```css .card-2, .card-3 { display: flex; } .card-2 img, .card-3 img { flex: 1; } ``` Таким образом, изображение будет сжиматься и увеличиваться в размере вместе с изменением размеров экрана, как и ожидалось.
Тоже страдал от такой штуки. И даже спрашивал как-то на хабре и мы анализировали с топом.
Короче если у картинки есть родитель с каким-то фиксированным рамером - она заполнит его.
Если нет (независимо от того, есть ли выше у предков какой-то фикс размер) - она будет считать эти проценты от самой себя. Т.е если оригинал картинки допустим 2000х1000пх и мы поставим ейwidth:100%
илиmax-width:100%
в стилях - она не будет заполнять 100% доступного места от родителя, а будет показывать 100% от своего оригинального размера. Т.е 2000х1000пх
И даже если у картинки будет обёртка, размер обёртки будет зависеть от размера картинки, а не от того, что ты зада в стилях этой обертке. Поэтому лично я использую обертку какrelative
, а картинку какabsolute
со значениямиWH:100%
Такая вот шляпа.
Поэтому я в любом своём проекте никогда не вставляю картинки без обёртки. Только если у них фикс.размер по макету.
Ещё в качестве примера могу показать своё:
На первый взгляд, тут у родителя нет фикс. размера, однако все картинки адекватно вебя ведут... Но не тут то было. CSS правилоaspect-ratio: 1/1;
у обертки, делает этой обёртке фикс размер, т.к по итогу браузер пересчитывает это в пиксели)) Стоит его убрать - картинки пойдут по п. Я искал инфу по этому поводу в спецификации и тд., но чет не нашел. Методом тыка напоролся, поборолся, понял что нифига не выйдет с этим сделать и принял так, как оно есть.
Так что как итог и ответ: Она и не должна сжиматься без родителя с фикс размером, т.к ориентируется на свой собственный размер.