Ответ 1
img {max-width:100%;}
- это один из способов сделать это. Просто добавьте его в свой CSS-код.
Я использовал раскладку Flex flex, которая появляется, как показано ниже:
Если экран становится меньше, он превращается в это:
Проблема заключается в том, что изображения не изменяются, сохраняя аспектный рацион от исходного изображения.
Можно ли использовать чистый CSS и макет гибкой коробки, чтобы позволить размеру изображений уменьшаться?
Вот мой html:
<div class="content">
<div class="row">
<div class="cell">
<img src="http://i.imgur.com/OUla6mK.jpg"/>
</div>
<div class="cell">
<img src="http://i.imgur.com/M16WzMd.jpg"/>
</div>
</div>
</div>
мой CSS:
.content {
background-color: yellow;
}
.row {
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-webkit-box-orient: horizontal;
-moz-box-orient: horizontal;
box-orient: horizontal;
flex-direction: row;
-webkit-box-pack: center;
-moz-box-pack: center;
box-pack: center;
justify-content: center;
-webkit-box-align: center;
-moz-box-align: center;
box-align: center;
align-items: center;
background-color: red;
}
.cell {
-webkit-box-flex: 1;
-moz-box-flex: 1;
box-flex: 1;
-webkit-flex: 1 1 auto;
flex: 1 1 auto;
padding: 10px;
margin: 10px;
background-color: green;
border: 1px solid red;
text-align: center;
}
img {max-width:100%;}
- это один из способов сделать это. Просто добавьте его в свой CSS-код.
Я пришел сюда, чтобы найти ответ на мои искаженные образы. Не совсем уверен в том, что ищет op выше, но я обнаружил, что добавление в align-items: center
решит его для меня. Чтение документов, имеет смысл переопределить это, если вы сгибаете изображения напрямую, поскольку align-items: stretch
является значением по умолчанию. Еще одно решение - перенести ваши изображения на div.
.myFlexedImage {
display: flex;
flex-flow: row nowrap;
align-items: center;
}
Возможно, вы захотите попробовать очень новую и простую функцию CSS3:
img {
object-fit: contain;
}
Он сохраняет соотношение изображения (как при использовании трюка с фоновой картинкой), и в моем случае хорошо работал для той же проблемы.
Будьте осторожны, он не поддерживается IE (см. Подробности поддержки здесь).
Предлагаю просмотреть параметры background-size
, чтобы настроить размер изображения.
Вместо того, чтобы иметь изображение на странице, если оно установлено в качестве фонового изображения, вы можете установить:
background-size: contain
или
background-size: cover
Эти параметры учитывают как высоту, так и ширину при масштабировании изображения. Это будет работать в IE9 и во всех других браузерах последних версий.
На втором изображении вы хотите, чтобы изображение заполнило поле, но в примере, который вы создали, он поддерживает соотношение сторон (домашние животные выглядят нормально, а не тонкие или жирные).
У меня нет подсказки, если вы сделали фотошоп в качестве примера или второй, "как это должно быть" (вы сказали, что IS, в то время как первый пример, который вы сказали "должен" )
В любом случае, я должен предположить:
Если "изображения не изменяются с сохранением формата аспект", и вы показываете мне изображение, которое поддерживает соотношение сторон пикселей, я должен предположить, что вы пытаетесь выполнить соотношение сторон области "обрезки" ( внутренняя часть зеленого) WILE, сохраняющая соотношение сторон пикселей. То есть вы хотите заполнить ячейку изображением, увеличив и обрезая изображение.
Если ваша проблема, предоставленный вами код НЕ отражает "вашу проблему", но ваш стартовый пример.
Учитывая предыдущие два предположения, то, что вам нужно, не может быть достигнуто с помощью реальных изображений, если высота окна динамическая, но с фоновыми изображениями. Либо используя "background-size: contains", либо эти методы (умные прокладки в процентах, которые ограничивают обрезку или максимальные размеры в любом месте): http://fofwebdesign.co.uk/template/_testing/scale-img/scale-img.htm
Единственное, что можно сделать с изображениями, это то, что мы ЗАБЫЛИ о вашем втором iimage, а ячейки имеют фиксированную высоту, и, судя по вашим образцам, FORTUNATELY, высота остается неизменной!
Итак, если высота вашего контейнера не изменяется, и вы хотите, чтобы ваши изображения были квадратными, вам просто нужно установить максимальную высоту изображений на это известное значение (минус paddings или границы, в зависимости от размера окна свойство ячеек)
Вот так:
<div class="content">
<div class="row">
<div class="cell">
<img src="http://lorempixel.com/output/people-q-c-320-320-2.jpg"/>
</div>
<div class="cell">
<img src="http://lorempixel.com/output/people-q-c-320-320-7.jpg"/>
</div>
</div>
</div>
И CSS:
.content {
background-color: green;
}
.row {
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-webkit-box-orient: horizontal;
-moz-box-orient: horizontal;
box-orient: horizontal;
flex-direction: row;
-webkit-box-pack: center;
-moz-box-pack: center;
box-pack: center;
justify-content: center;
-webkit-box-align: center;
-moz-box-align: center;
box-align: center;
align-items: center;
}
.cell {
-webkit-box-flex: 1;
-moz-box-flex: 1;
box-flex: 1;
-webkit-flex: 1 1 auto;
flex: 1 1 auto;
padding: 10px;
border: solid 10px red;
text-align: center;
height: 300px;
display: flex;
align-items: center;
box-sizing: content-box;
}
img {
margin: auto;
width: 100%;
max-width: 300px;
max-height:100%
}
Ваш код недействителен (открывающие теги вместо закрытых, поэтому они выводят ячейки NESTED, а не братья и сестры, он использовал SCREENSHOT ваших изображений внутри неисправного кода, а гибкая коробка не удерживает ячейки, но оба примера в столбец (вы устанавливаете "строку", но коррумпированный код, вложенный в одну ячейку внутри другой, привел к гибкому изгибу, наконец, работающему как COLUMNS. Я понятия не имею, что вы хотели выполнить, и как вы придумали этот код, но я предполагаю, что вы хотите это.
Я добавил отображение: flex для ячеек тоже, поэтому изображение центрируется (я думаю, display: table
мог бы использоваться здесь также со всей этой разметкой)
<div class="container">
<div class="box">
<img src="http://lorempixel.com/1600/1200/" alt="">
</div>
</div>
.container {
display: flex;
flex-direction: row;
justify-content: center;
align-items: stretch;
width: 100%;
height: 100%;
border-radius: 4px;
background-color: hsl(0, 0%, 96%);
}
.box {
border-radius: 4px;
display: flex;
}
.box img {
width: 100%;
object-fit: contain;
border-radius: 4px;
}
Вот как бы я обрабатывал разные изображения (размеры и пропорции) в гибкой сетке.
.images {
display: flex;
flex-wrap: wrap;
margin: -20px;
}
.imagewrapper {
display: flex;
justify-content: center;
align-items: center;
width: calc(50% - 20px);
height: 300px;
margin: 10px;
}
.image {
display: block;
object-fit: cover;
width: 100%;
height: 100%; /* set to 'auto' in IE11 to avoid distortions */
}
<div class="images">
<div class="imagewrapper">
<img class="image" src="https://via.placeholder.com/800x600" />
</div>
<div class="imagewrapper">
<img class="image" src="https://via.placeholder.com/1024x768" />
</div>
<div class="imagewrapper">
<img class="image" src="https://via.placeholder.com/1000x800" />
</div>
<div class="imagewrapper">
<img class="image" src="https://via.placeholder.com/500x800" />
</div>
<div class="imagewrapper">
<img class="image" src="https://via.placeholder.com/800x600" />
</div>
<div class="imagewrapper">
<img class="image" src="https://via.placeholder.com/1024x768" />
</div>
</div>
Я использую jquery или vw для сохранения отношения
jquery
function setSize() {
var $h = $('.cell').width();
$('.your-img-class').height($h);
}
$(setSize);
$( window ).resize(setSize);
оч.сл.
.cell{
width:30vw;
height:30vw;
}
.cell img{
width:100%;
height:100%;
}