Итерация трех столбцов flexbox

У меня есть компонент в реакции, который я повторяю в цикле. Этот компонент всегда будет отображаться три раза, и я хочу, чтобы они отображались в одной строке (каждый компонент в столбце). Примеры, которые я видел, вручную добавляют «flex: 1;» и так далее для каждого столбца, но так как итерация невозможна.

Это выглядит так:

<div className = "styles.grid">
  <!-- stuff  -->
</div>

Выше будет показано три раза, и все они должны быть в одной строке (каждый будет столбцом).

Я пытался:

.grid {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  align-items: center;
} 

Не работает. Любая помощь?

flex-wrap: wrap приведет к разрыву вашей строки с одной строки на несколько, если содержимое не может располагаться рядом друг с другом. Попробовать удалить это?

Tom Finney 12.03.2019 14:24

Вы пробовали использовать float: left?

PYer 12.03.2019 14:26
Улучшение производительности загрузки с помощью 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 страниц, которые помогут...
3
2
942
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Попробуйте использовать flex-grow: 1 в дочерних столбцах. Это говорит детям расти одинаково, чтобы заполнить ширину своих родителей.

Для получения дополнительной информации о flexbox: https://css-tricks.com/snippets/css/a-guide-to-flexbox/

Ниже приведен простой пример с тремя столбцами, где каждый столбец расширяется одинаково.

.parent {
  width: 100%;
  height: 200px;
  display: flex;
  flex-direction: row;
  justify-content: space-between;
}

.col {
   flex-grow: 1;
   height: 200px;
   border: 1px solid black;
}
<div class = "parent">
  <div class = "col">1</div>
  <div class = "col">2</div>
  <div class = "col">3</div>
</div>
Ответ принят как подходящий

Вы можете удалить flex-wrap, чтобы все flex-элементы находились в одной строке, и дать каждому flex-элементу треть ширины.

Пример

function App() {
  return (
    <div className = "grid">
      <div className = "grid-item item-1">Foo</div>
      <div className = "grid-item item-2">Bar</div>
      <div className = "grid-item item-3">Baz</div>
    </div>
  );
}

ReactDOM.render(<App />, document.getElementById("root"));
.grid {
  display: flex;
}

.grid-item {
  width: 33.33333%;
  height: 200px;
}
.item-1 {
  background-color: red;
}
.item-2 {
  background-color: green;
}
.item-3 {
  background-color: blue;
}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

<div id = "root"></div>

Это то, чего вы, вероятно, пытаетесь достичь:

.grid {
  display: flex;
  flex-wrap: wrap;
  align-items: space-between;
}

.grid-item {
  width: 30%;
}
<div class = "grid">
  <div class = "grid-item">Item content</div>
  <div class = "grid-item">Item content</div>
  <div class = "grid-item">Item content</div>
  <div class = "grid-item">Item content</div>
  <div class = "grid-item">Item content</div>
  <div class = "grid-item">Item content</div>
  <div class = "grid-item">Item content</div>
  <div class = "grid-item">Item content</div>
  <div class = "grid-item">Item content</div>
  <div class = "grid-item">Item content</div>
</div>

Контейнер Flex будет обертывать каждый элемент, как только он выйдет за свои границы с помощью свойства flex-wrap: wrap;.

И каждый элемент внутри flex должен быть установлен на width: 30%;. Каждый 4-й элемент в сетке будет перенесен на следующую строку.

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