Как начать новую строку с определенного элемента с помощью Flexbox?

Это очень простое упражнение, но я не могу найти способ его решить (только начал изучать HTML и CSS).

Как начать новую строку с определенного элемента с помощью Flexbox?

Мне нужно, чтобы 5-й блок («блок 5») красного цвета находился под остальными четырьмя с помощью Flexbox. Результат должен быть:

Как начать новую строку с определенного элемента с помощью Flexbox?

Может ли кто-нибудь помочь мне с этим, пожалуйста? Это то, что у меня есть до сих пор:

div {
  margin: 5px;
  border: 1px solid pink;
  padding: 5px;
  font-family: arial, sans-serif;
  font-size: 14px;
}

.contenidor {
  width: 760px;
  display: flex;
}

div[class*=element] {
  width: 100%;
  padding: 2px 30px 5px 2px;
}

.element5 {
  background-color: red;
}
<div class = "contenidor">
  <div class = "element1">bloque 1</div>
  <div class = "element2">bloque 2</div>
  <div class = "element3">bloque 3</div>
  <div class = "element4">bloque 4</div>
  <div class = "element5">bloque 5</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 страниц, которые помогут...
2
0
862
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

  1. На самом деле нет причин делать что-то подобное div[class*=element] просто укажите класс с точкой div.element

  2. одна из причин, по которой ваш код не работает, заключается в том, что вам не хватает размера коробки. Добавление отступов и полей таким образом увеличит ваши дочерние элементы до желаемого размера.

  3. При работе с flex используйте параметры flex, это действительно упростит вашу работу.

Вы можете увидеть хороший учебник по использованию flex-box здесь. https://css-tricks.com/snippets/css/a-guide-to-flexbox/

Вот простой способ сделать это.

 div {
      border: 1px solid black;
       box-sizing: border-box;
    }
    
    .parent {
      display: flex;
      flex-wrap: wrap;
      justify-content: stretch;
    }
    
    .child {
      flex: 1 0 25%;
    }
<div class = "parent">
      <div class = "child">I am one</div>
      <div class = "child">I am two</div>
      <div class = "child">I am three</div>
      <div class = "child">I am four</div>
      <div class = "child">I am five</div>
    </div>

   

* {
  margin: 0;
  box-sizing: border-box;
}

section {
  display: flex;
  flex-wrap: wrap;
  width: 100vw;
  height: 100vh;
}

section > div {
  flex-basis: 25%;
  justify-content: space-around;
  background: rgba(0, 0, 0, 0.1);
  text-align: center;
}

section > div:last-child {
  flex-basis: 100%;
}
<section>
  <div>
  1
  </div>
  <div>
  2
  </div>
  <div>
  3
  </div>
  <div>
  4
  </div>
  <div>
  5
  </div>
</section>
Ответ принят как подходящий

суть наличия n элементов подряд с flexbox заключается в том, что набивка и поле также необходимо учитывать, потому что вы упаковка flexbox. Я сделал следующие изменения в вашем коде:

  • для обертывания флексбокса нужно поставить flex-wrap: wrap на флексбокс-контейнер,

  • чтобы получить 4 элемента в строке, вы можете использовать flex-basis как 25% и настроить поля, используя calc,

  • чтобы получить строки с менее чем 4 элементами заполнить доступное пространство, вы также можете рассмотреть flex-grow: 1 на гибкие элементы,

  • также рассмотрите возможность добавления box-sizing: border-box к element*, чтобы набивка был включен в ширина (и, следовательно, в flex-basis)

Вы можете найти аналогичный вопрос здесь: arranging 5 items in a row. См. демо ниже:

div {
  margin: 5px;
  border: 1px solid pink;
  padding: 5px;
  font-family: arial, sans-serif;
  font-size: 14px;
}

.contenidor {
  width: 760px;
  display: flex;
  flex-wrap: wrap; /* wrapping flexbox */
}

div[class*=element] {
  /*width: 100%;*/
  padding: 2px 30px 5px 2px;
  box-sizing: border-box; /* adjusts for padding */
  flex-grow: 1; /* expand to fill remaining space */
  flex-basis: calc(25% - 10px); /* 4 items per row, adjust for the 5px margin */
}

.element5 {
  background-color: red;
}
<div class = "contenidor">
  <div class = "element1">bloque 1</div>
  <div class = "element2">bloque 2</div>
  <div class = "element3">bloque 3</div>
  <div class = "element4">bloque 4</div>
  <div class = "element5">bloque 5</div>
 </div>

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