CSS flex, як відобразити один елемент у першому рядку та два у наступному


77

Напевно, це досить просте питання, але я не можу отримати 3 елементи у контейнері flex для відображення у 2 рядки, один у першому рядку та інші 2 у другому рядку. Це CSS для flex-контейнера. Очевидно, він відображає 3 елементи в одному рядку :)

div.intro_container {
  width: 100%;
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
}

Якщо flex-wrapвстановлено значення wrap, тоді 3 елементи відображаються у стовпці. Я думав, що параметр обтікання потрібен для відображення елементів контейнера у декількох рядках. Я спробував цей CSS для першого елемента-контейнера, маючи намір зайняти його весь перший рядок, але він не спрацював

div.intro_item_1 {
  flex-grow: 3;
}

Я дотримувався вказівок у "CSS-Tricks", але насправді не впевнений, яку комбінацію команд використовувати. Будь-яка допомога була б дуже вітається, оскільки я здивований цим.


1
Чи пробували ви просто дати перший перерахуванню а min-widthз 100%?
Mudlabs

Відповіді:


132

Ви можете зробити щось подібне:

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

.flex>div {
  flex: 1 0 50%;
}

.flex>div:first-child {
  flex: 0 1 100%;
}
<div class="flex">
  <div>Hi</div>
  <div>Hello</div>
  <div>Hello 2</div>
</div>

Ось демонстраційний файл: http://jsfiddle.net/73574emn/1/

Ця модель спирається на перенесення рядків після заповнення одного "рядка". Оскільки ми встановили для перших елементів flex-basis100%, він повністю заповнює перший рядок. Особлива увага наflex-wrap: wrap;


Відображення залишається незмінним, перебуваючи все ще в 3 рядках, 2 елементи, які повинні бути у другому рядку, займають окремі рядки, складаючи 3 рядки всі разом. Три елементи містять приблизно 6 рядків тексту на всій сторінці.
RoyS

Я не можу слідувати за тобою так. Будь ласка, зробіть демонстрацію jsFiddle.
Nico O

Добре, що я зробив, це додав близько 50 символів до кожного з div у вашій скрипці, і це поставило 3 div у формацію стовпця. Проблема, схоже, полягає в обсязі тексту в елементах контейнера
RoyS

Розумію. Перевірте цю нову версію: jsfiddle.net/73574emn/1 я встановив базовий розмір кожного гнучкого елемента на 50% (крім першого).
Nico O

До речі, як чек, я прокоментував правило розміру коробки. Це не мало ніякої різниці. То чи є якась вагома причина включити його?
RoyS

8

Відповідь, яку дав Ніко О, є правильною. Однак це не дає бажаного результату в Internet Explorer 10-11 та Firefox.

Для IE я виявив, що це змінюється

.flex > div
{
   flex: 1 0 50%;
}

до

.flex > div
{
   flex: 1 0 45%;
}

здається, робить фокус. Не питайте мене, чому, я не пішов далі в цьому, але це може мати щось спільне з тим, як IE робить межу або щось подібне.

У випадку з Firefox я вирішив це, додавши

display: inline-block;

до предметів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.