Как обернуть div и img в контейнер display:flex

EDIT: вам нужно запустить фрагмент в полноэкранном режиме.

У меня есть дисплей: гибкий контейнер с элементом div и другой с img внутри него, оба с шириной 50%. Я хочу, чтобы они при изменении размера ширины ниже 800 пикселей были со 100% шириной экрана и переносились одна за другой на новые строки (flex-wrap), но при этом оставались отзывчивыми, как и до переноса.

Я пробовал, но что-то делаю не так - когда ширина экрана меньше 800px, img набирает 100% ширины как надо, но первый элемент скрыт и flex-wrap вообще отсутствует.

#elegantImg{
    max-width: 100%;
    height: auto;
}

.elegant-container {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
}

.col {
    position: relative;
    width: 50%;
    height: auto;
    overflow: hidden;
}

.background {
    background-color: #F6F4F1;
    height: 100%;
}

.col img {
    width: 100%;
    height: auto;
    object-fit: cover;
}


@media screen and (max-width: 800px) {
    .col {
        width: 100%;
    }
}
        <section>
            <div class = "elegant-container">
                <div class = "col">
                    <div class = "background"></div>
                </div>
                <div class = "col">
                    <img id = "elegantImg" src = "https://i.imgur.com/TVL0phR.png" alt = "">
                </div>
            </div>
        </section>

Пожалуйста помоги :)

Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
1
0
53
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

#elegantImg{
    max-width: 100%;
    height: auto;
}

.elegant-container {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
}

.col {
    position: relative;
    width: 50%;
    height: auto;
    min-height: 500px;
    overflow: hidden;
}

.background {
    background-color: #F6F4F1;
    height: 100%;
}

.col img {
    width: 100%;
    height: auto;
    object-fit: cover;
}


@media screen and (max-width: 800px) {
    .col {
        width: 100%;
    }
}
        <section>
            <div class = "elegant-container">
                <div class = "col">
                    <div class = "background"></div>
                </div>
                <div class = "col">
                    <img id = "elegantImg" src = "https://i.imgur.com/TVL0phR.png" alt = "">
                </div>
            </div>
        </section>

Они не сохраняют тот же размер при изменении размера

Christian 21.08.2023 03:48

#elegantImg{
    max-width: 100%;
    height: auto;
}

.elegant-container {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
}

.col {
    position: relative;
    width: 50%;
    height: auto;
    overflow: hidden;
}

.background {
    background-color: #F6F4F1;
    height: 100%;
}

.col img {
    width: 100%;
    height: auto;
    object-fit: cover;
}


@media screen and (max-width: 800px) {
    .col {
        width: 100%;
    }
    .background{
        min-height: 300px;
    }
}
        <section>
            <div class = "elegant-container">
                <div class = "col">
                    <div class = "background"></div>
                </div>
                <div class = "col">
                    <img id = "elegantImg" src = "https://i.imgur.com/TVL0phR.png" alt = "">
                </div>
            </div>
        </section>

Почти то, что я хочу, но div с цветом фона не такого размера, как div с img, когда они сворачиваются на новую строку

Christian 21.08.2023 05:04

Измените свой медиа-запрос на это:

@media screen and (max-width: 800px) {
    .col {
        width: 100%;
        height: 50%;
    }
    .elegant-container {
      height:170vw;
    }
}

Эта высота является моей приблизительной оценкой двойной высоты вашего изображения по отношению к ширине области просмотра. Проблема в том, что когда элементы div расположены рядом, собственная ширина окна дает значение width: 50%. Но когда они установлены как вертикальные, у элемента .elegant-container нет собственной высоты, и единственным элементом с определенным размером является изображение. Элементы Flex растягиваются до размера своих дочерних элементов, если размер не указан, поэтому для расчета этого размера необходимо получить высоту своих дочерних элементов. 50% от 0 равно 0, поэтому столбец .background не имеет высоты. Только после этого высота .elegant-container рассчитывается на основе высоты изображения, после чего столбец .background уже имеет высоту 0.

Просто представьте, что вам нужно растянуть контейнер до размера, при котором поместится полное изображение, а столбец .background будет такого же размера.

Эй, тай. А как вы рассчитали, что высота должна быть 170vw?

Christian 21.08.2023 10:29
Ответ принят как подходящий

Вы можете указать соотношение сторон элемента столбца для применения высоты в зависимости от ширины. Так же уберите стилизацию по id - она ​​не нужна. Измените свой код на это:

.elegant-container {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
}

.col {
    position: relative;
    width: 50%;
    aspect-ratio: 1/1;
    overflow: hidden;
}

.background {
    background-color: #F6F4F1;
    height: 100%;
}

.col img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}


@media screen and (max-width: 800px) {
    .col {
        width: 100%;
    }
}
        <section>
            <div class = "elegant-container">
                <div class = "col">
                    <div class = "background"></div>
                </div>
                <div class = "col">
                    <img src = "https://i.imgur.com/TVL0phR.png" alt = "">
                </div>
            </div>
        </section>

ибаси манка лек

Christian 21.08.2023 10:56

Другие вопросы по теме