Как выровнять блоки по горизонтали в CSS flex?

Я пытался выровнять свои коробки по горизонтали, но не смог решить проблему. Каждый раз, когда я пытаюсь это сделать, они складываются горизонтально. Вместо того, чтобы центрироваться прямо поперек. Или просто останется сложенным в столбец (вертикально).

HTML для блоков div:

<div class = "section2">
  <h1 class = "s2h1">This is Random Info</h1>
  <div class = "boxes">
    <div class = "box">
      <div class = "b1container">
        <img src = "" alt = "Placeholder" class = "s2boxImg">
      </div>
      <h5 class = "b1Info">PlaceHolder Text</h5>
      <div class = "box">
        <div class = "b1container">
          <img src = "" alt = "Placeholder" class = "s2boxImg">
        </div>
        <h5 class = "b1Info">PlaceHolder Text</h5>
        <div class = "box">
          <div class = "b1container">
            <img src = "" alt = "Placeholder" class = "s2boxImg">
          </div>
          <h5 class = "b1Info">PlaceHolder Text</h5>
        </div>
        <div class = "box">
          <div class = "b1container">
            <img src = "" alt = "Placeholder" class = "s2boxImg">
          </div>
          <h5 class = "b1Info">Placeholder Text</h5>
        </div>
      </div>
    </div> 
  </div>
</div>

CSS для блока div

.b1container {
width: 100px;
height: 100px;
display: flex;
justify-content: center;
align-items: center;
background-color: #ffdeab;
border-radius: 10px;
transition: 0.5s;
cursor: pointer;
}

.b1container:hover {
width: 250px;
height: 250px;
}

.s2boxImg {
width: 100px;
height: 100px;
border-radius: 5px;
border: 3px dotted #553c2b;
transition: 0.5s;
}

.s2boxImg:hover {
width: 250px;
height: 250px;
border: 3px dotted #f36dcb;
transition: 0.5s;
}

.boxes {
display: flex;
justify-content: space-evenly;
justify-content: center;
margin-top: 30px;
}

Сложенные коробки

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

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в 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. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
0
59
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Попробуйте добавить это правило CSS:

.box {
    display: flex;
    flex-wrap: nowrap;
}

Вы делаете блоки div гибкими, но div, который действительно содержит блоки, является блоком div.

просто добавьте flex-direction, который принимает либо row, либо column

b1container {
width: 100px;
height: 100px;
display: flex;
justify-content: center;
align-items: center;
flex-direction :row;
background-color: #ffdeab;
border-radius: 10px;
transition: 0.5s;
cursor: pointer;
}

вот ссылка, которая очень хорошо объясняет flexbox Основные понятия флексбокса

Если вы не хотите, чтобы элементы переносились, когда ширина становится меньше, вы можете использовать flex-wrap

которому вы можете дать nowrap атрибут flex-wrap:nowrap;

.box не flex, а тот, что держит ящики попробуй это:

.box {
  display: flex;
  flex-wrap: nowrap;
  flex-direction: row;
}

этот код выровняет ваши поля

если вы хотите добавить размер префикса в каждое поле, вы можете попробовать:

.box > * {
  flex: 0 0 25%;
  width: 100%;
  max-width: 25%;
}

с этим вы можете установить класс коробки для переноса, и у вас есть 4 столбца в строке.

Ответ принят как подходящий

Вы вложили все .box элементы на несколько уровней внутрь .boxes, поэтому они расположены стопкой. Сделайте все .box элементы прямыми потомками .boxes и все заработает.

Механизм flexbox работает только на один уровень в глубину: родительский элемент контейнера flexbox (.boxes) содержит сгибаемые дочерние элементы (.box). Любой элемент внутри .box не затрагивается или, лучше сказать, не обрабатывается механизмом flexbox. Именно поэтому основная структура в вашем случае должна быть:

<div class = "boxes">
    <div class = "box"></div>
    <div class = "box"></div>
    <div class = "box"></div>
    <div class = "box"></div>
</div>

Я также добавил flex-flow: row wrap, чтобы .box элементы переносились на следующую строку, когда это необходимо.

.b1container {
    width: 100px;
    height: 100px;
    display: flex;
    justify-content: center;
    align-items: center;
    background-color: #ffdeab;
    border-radius: 10px;
    transition: 0.5s;
    cursor: pointer;
}

.b1container:hover {
    width: 250px;
    height: 250px;
}

.s2boxImg {
    width: 100px;
    height: 100px;
    border-radius: 5px;
    border: 3px dotted #553c2b;
    transition: 0.5s;
}

.s2boxImg:hover {
    width: 250px;
    height: 250px;
    border: 3px dotted #f36dcb;
    transition: 0.5s;
}

.boxes {
    display: flex;
    flex-flow: row wrap; /* ADDED to make content wrap */
    justify-content: space-evenly;
    justify-content: center;
    margin-top: 30px;
}
<div class = "section2">
    <h1 class = "s2h1">This is Random Info</h1>
    <div class = "boxes">

        <div class = "box">
            <div class = "b1container">
                <img src = "" alt = "Placeholder" class = "s2boxImg">
            </div>
            <h5 class = "b1Info">PlaceHolder Text</h5>
        </div>

        <div class = "box">
            <div class = "b1container">
                <img src = "" alt = "Placeholder" class = "s2boxImg">
            </div>
            <h5 class = "b1Info">PlaceHolder Text</h5>
        </div>

        <div class = "box">
            <div class = "b1container">
                <img src = "" alt = "Placeholder" class = "s2boxImg">
            </div>
            <h5 class = "b1Info">PlaceHolder Text</h5>
        </div>

        <div class = "box">
            <div class = "b1container">
                <img src = "" alt = "Placeholder" class = "s2boxImg">
            </div>
            <h5 class = "b1Info">Placeholder Text</h5>
        </div>
    </div>
</div>

означает ли это, что способ структурирования HTML вызывал проблему сложенных друг в друга блоков (запрашивая разъяснения)? То есть я неправильно вложил свой div(.box)? Кроме того, есть ли способ написать более чистый и читаемый код, как у вас? У меня есть расширение красивее, но мне интересно, есть ли у вас какие-либо советы по «лучшим практикам» для дальнейшего использования?

DevSimone 17.01.2023 01:33

Обновил ответ. У меня есть редактор HTML/CSS, настроенный на автоматическое добавление 4 пробелов на уровень вложенности кода (а не символ «табуляция», как вы часто видите в IDE). Я бы сказал, используйте правильный редактор кода с поддержкой HTML/CSS/JS/SASS и т. д. Многие разработчики используют бесплатный VSCode. Особо позаботьтесь о читабельности вашего кода, так как это очень поможет вам, когда вы быстро просматриваете код, чтобы найти ошибки или внести изменения. Используйте пробелы и комментарии, когда они необходимы, или, как я часто делаю, когда вы пишете (мини) учебник. Занимаюсь этим более 40 лет и до сих пор понимаю весь мой код на любом языке.

Rene van der Lende 17.01.2023 02:06

Когда вы разработчик-одиночка, как я, найдите (или скопируйте) стиль кодирования, который лучше всего соответствует вашим потребностям, и придерживайтесь его. Наиболее удобно читать или изменять старый код, не выясняя, что вы делали, когда впервые его создавали. Погрузитесь в популярные фреймворки, у них есть «стиль», который вы можете перенять. ИТ призван облегчить жизнь, почему бы не начать с вашего кода/дизайна/текста/графики/мыслей?

Rene van der Lende 17.01.2023 02:26

Спасибо за советы. В настоящее время я использую VSCode. Я посмотрю, смогу ли я добавить это в настройки моего редактора, чтобы автоматически добавлять 4 пробела на уровень вложенности кода, или любые расширения, которые также делают это. Я готов погрузиться в популярные фреймворки, я делаю этот проект (простой лендинг) для того, чтобы понять основы HTML/CSS и т.д.

DevSimone 17.01.2023 02:40

И последнее: всегда находите инструменты, которые соответствуют вашим потребностям, никогда не подстраивайте свои потребности под инструмент.

Rene van der Lende 17.01.2023 02:52

Я думаю, что ваш стиль CSS правильный. Однако HTML структурирован неправильно. Логично, что div.boxes включает в себя кучу div.box. И у каждого div.box есть содержимое коробки; как в вашем случае div.b1container и тег h5. Однако вы вложили div.box внутрь div.box вместо div.boxes.

Вот рисунок того, как это должно быть структурировано:

Вот исправленный HTML-файл:

    <div class = "section2">
      <h1 class = "s2h1">This is Random Info</h1>
      <div class = "boxes">        
        <div class = "box">
          <div class = "b1container">
            <img src = "" alt = "Placeholder" class = "s2boxImg" />
          </div>
          <h5 class = "b1Info">PlaceHolder Text</h5>
        </div>

        <div class = "box">
          <div class = "b1container">
            <img src = "" alt = "Placeholder" class = "s2boxImg" />
          </div>
          <h5 class = "b1Info">PlaceHolder Text</h5>
        </div>

        <div class = "box">
          <div class = "b1container">
            <img src = "" alt = "Placeholder" class = "s2boxImg" />
          </div>
          <h5 class = "b1Info">PlaceHolder Text</h5>
        </div>

        <div class = "box">
          <div class = "b1container">
            <img src = "" alt = "Placeholder" class = "s2boxImg" />
          </div>
          <h5 class = "b1Info">Placeholder Text</h5>
        </div>
      </div>
    </div>

Хорошенькая схема! Какой инструмент вы использовали для его создания?

Rene van der Lende 17.01.2023 02:31

Это было очень информативно! Я полагаю, что это произошло, когда я копировал и вставлял свой div.box вместо того, чтобы печатать его. Кроме того, ваш пример показывает, насколько важно правильно структурировать HTML, что обеспечивает лучшую читабельность, и объясняет, почему я не смог обнаружить эту ошибку с первого взгляда.

DevSimone 17.01.2023 02:44

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