Как масштабировать количество изображений для заполнения области - PullRequest
0 голосов
/ 07 мая 2019

Я пытаюсь заполнить область веб-страницы определенного фиксированного размера неизвестным количеством изображений (максимум 10), максимально увеличив размер изображения, не переполняя область.Чтобы быть мобильным, я хочу, чтобы он работал как в альбомном, так и в портретном режимах без необходимости прокрутки.

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

Обновление:

Вот суть кода, который я получил до сих пор.Я пробовал много разных вещей, но это самое чистое.

html {
	height: 100%;
}

body {
	padding-top: 0;
	padding-bottom: 0;
	height: 100%;
}

.container {
	height: 100%;
	width: 100%;
	display: flex;
	flex-direction: column;
	flex-wrap: nowrap;
	text-align: center;
}

.above {
	margin-bottom: 20px;
	font-size: larger;
	background-color: lightgrey;
}

.middle {
	flex-grow: 1;
	max-height: 100%;
}

.below {
	margin-top: 20px;
	background-color: lightgrey;
}

img {
	border: 5px solid transparent;
	height: 100%;
}

.images {
	flex-direction: row;
	justify-content: center;
	display: flex;
	flex-wrap: wrap;
	height: 100%;
}

.image {
	margin: 5px;
}
<html>
<body>
<div class="container">
	<div class="above">
		Some text about the images
	</div>
	<div class="middle">
		<div class="images">
			<div class="image">
				<img src="https://dummyimage.com/200x200/000/fff" alt="" />
			</div>
			<div class="image">
				<img src="https://dummyimage.com/200x200/000/fff" alt="" />
			</div>
			<div class="image">
				<img src="https://dummyimage.com/200x200/000/fff" alt="" />
			</div>
			<div class="image">
				<img src="https://dummyimage.com/200x200/000/fff" alt="" />
			</div>
			<div class="image">
				<img src="https://dummyimage.com/200x200/000/fff" alt="" />
			</div>
			<div class="image">
				<img src="https://dummyimage.com/200x200/000/fff" alt="" />
			</div>
			<div class="image">
				<img src="https://dummyimage.com/200x200/000/fff" alt="" />
			</div>
			<div class="image">
				<img src="https://dummyimage.com/200x200/000/fff" alt="" />
			</div>
			<div class="image">
				<img src="https://dummyimage.com/200x200/000/fff" alt="" />
			</div>
			<div class="image">
				<img src="https://dummyimage.com/200x200/000/fff" alt="" />
			</div>
		</div>
	</div>
	<div class="below">
		<button>Ok</button>
		<button>Cancel</button>
	</div>
</div>
</body>
</html>

Смысл состоит в том, чтобы попытаться заставить изображения полностью оставаться внутри элемента div, называемого "средний", но масштабируемого до максимально возможного размера.Вот несколько каркасов.

Пейзаж, 10 изображений:

Landscape, 10 images

Портрет, 10 изображений:

Portrait, 10 images

Портрет, 4 изображения

Portrait, 4 images

1 Ответ

0 голосов
/ 08 мая 2019

Думаю, вам нужно учитывать свойство flex, это сокращенная версия свойств flex-grow, flex-shrink и flex-basis. Посмотрите, если это то, что вы ищете.

html,body{
    padding: 0;
    margin: 0;
    width: 100vw;
    box-sizing: border-box;
}
.container{
    width: 100%;
    display: flex;
    align-items: flex-start;
    justify-content: flex-start;
    flex-direction: column;
}
.row{
    display: flex;
    width: 100%;
    flex-direction: row;
}
.col{
    display: flex;
    width: 100%;
    flex-wrap: wrap;
    justify-content: center;
    align-items: center;
    text-align: center;
}
.item{
    display: flex;
    max-width: 100%;
    height: 150px;
    background-color: #222;
    margin: 1%;
    flex: 1 1 15%;
}
@media only screen and (max-width: 600px) {
    .item {
        height: 100px;
        flex: 1 1 45%;
        max-width: 100%;
    }
  }
<div class="container">
        <div class="row ">
            <div class="col">
                <h1>some text about images</h1>
            </div>
        </div>
        <div class="row">
            <div class="col">
                <div class="item"></div>
                <div class="item"></div>
                <div class="item"></div>
                <div class="item"></div>
                <div class="item"></div>
                <div class="item"></div>
                <div class="item"></div>
                <div class="item"></div>
                <div class="item"></div>
                <div class="item"></div>
            </div>
        </div>
        <div class="row">
            <div class="col">
                <p>Some other elements</p>
            </div>
        </div>
    </div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...