#html #css #flexbox
Вопрос:
У меня есть страница, на которой отображается несколько обложек фильмов, и на большом дисплее они отображаются хорошо, однако, поскольку окно браузера уменьшается, я хочу, чтобы изображения изменялись по ширине (и высоте пропорционально) до определенного размера, прежде чем произойдет обертывание.
Чтобы понять, что именно я имею в виду, ознакомьтесь с: http://www.samuelgoldwynfilms.com/films Я хочу такого же поведения.
Это образец, который я создал.
:root {
box-sizing: border-box;
}
*,
*::before,
*::after {
box-sizing: inherit;
}
body {
margin: 0;
padding: 0;
}
.flex-container {
display: flex;
flex-wrap: wrap;
}
img {
max-width: 100%;
height: 500px;
}
.box {
height: 500px;
}
.box {
margin-left: 1em;
}
.box-1 {
background-color: lightgray;
}
.box-2 {
background-color: lightsalmon;
}
.box-3 {
background-color: lightseagreen;
}
.box-4 {
background-color: lightblue;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="learn-flex.css">
<title>Learn Flex</title>
</head>
<body>
<div class="flex-container">
<div class="box box-1">
<img src="https://images-na.ssl-images-amazon.com/images/I/81PWF-yAEyL._AC_SL1100_.jpg" alt="">
</div>
<div class="box box-2">
<img src="https://images-na.ssl-images-amazon.com/images/I/71VDlRubWtL._AC_SY741_.jpg" alt="">
</div>
<div class="box box-3">
<img src="https://fanart.tv/fanart/movies/12230/movieposter/101-dalmatians-5a529ef29b36c.jpg" alt="">
</div>
<div class="box box-4">
<img src="https://i.pinimg.com/originals/b5/46/7f/b5467f2221d78d204b5a44c8d57d516f.jpg" alt="">
</div>
</div>
</body>
</html>
На этом этапе flexbox выполняет только обертывание предметов, не пытаясь уменьшить их до определенного размера перед обертыванием.
Я был бы признателен за любое предложение.
Комментарии:
1. проверьте эту ручку с кодом .это то, что вы хотите??
2. Не совсем так. Начальный размер каждого изображения обложки
width: 400px height: 600px;
теперь, когда я уменьшаю окно браузера, я хочуwidth
, чтобы иheight
было уменьшено пропорционально, и, скажем, когдаwidth
придет200px
время, чтобы обернуть элементы в несколько строк. Если вы проверите ссылку, которую я включил в свой пост, вы поймете, что я имею в виду.
Ответ №1:
Я думаю, проблема в том, что когда вы даете .box {высота: 500 пикселей;}, но не ширину, он становится неконтролируемым. Для адаптивного изображения я предлагаю вам использовать img с максимальной шириной:100% и высотой: авто. Когда вы делаете это, изображение само изменяет размер в зависимости от его родительского div, и если вы даете родительскому div любой размер, который вы хотите, вы можете управлять им проще. Итак, вот код;
:root {
box-sizing: border-box;
}
*,
*::before,
*::after {
box-sizing: inherit;
}
body {
margin: 0;
padding: 0;
}
.flex-container {
display: flex;
flex:0 0 100%;
width: 100%;
flex-wrap: nowrap;
}
img {
max-width: 100%;
height: auto;
object-fit:cover;
}
.box {
width: 300px;
max-height: 500px;
}
.box {
margin-left: 1em;
}
.box-1 {
background-color: lightgray;
}
.box-2 {
background-color: lightsalmon;
}
.box-3 {
background-color: lightseagreen;
}
.box-4 {
background-color: lightblue;
}
@media screen and (max-width:991px) {
.flex-container {
flex-wrap: wrap;
}
.box {
margin: 10px;
}
}
@media screen and (max-width:520px) {
.box {
margin: auto;
}
}
Я также добавляю кодовый код: https://codepen.io/ates_irem/pen/zYobMQr?editors=1100