Есть flex-контейнер с flex-элементами внутри, которые расположены в колонки равной ширины. можно ли как-то сделать так, чтобы первый flex-элемент располагался в строку, то есть занимал всю ширину контейнера, а остальные flex-элементы также располагались в колонки, как раньше.
<div>
<div>a</div><!-- данный блок должен растянуться на всю ширину контейнера -->
<div>b</div>
<div>c</div>
<div>d</div>
<div>e</div>
</div>
Результат можете увидеть тут — пример работы с flexbox.
2
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
By clicking “Отправить ответ”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.
html — flexbox — перенос блока на новую строку
Как при маленьком экране (к примеру max-width:480px
) сделать так, чтобы блок отправить переходил на новою строку?
В . modal-form добавляем правило переноса элементов:
.modal-form {
flex-wrap: wrap;
}
Тогда, если во флексбокс не будет влезать его содержимое, то оно переедет на следующую строку. Для полной уверенности в переносе можно добавить @media запрос растягивающий кнопку на 100% по ширине от родителя:
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
By clicking “Отправить ответ”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.
Переход к новой строке с помощью flexbox
Вот задача: если вы хотите создать макет flexbox с несколькими рядами элементов, как вы контролируете, какой элемент оказывается в какой строке? Предположим, вы хотите создать макет, который выглядит примерно так, с тремя сложенными элементами и чередующимися элементами полной ширины:
Обычный способ управления позиционированием и размером гибких элементов — использовать width или flex-basis ; если мы установим для четвертого элемента ширину 100%, он будет расположен в отдельной строке. Но что, если мы не хотим или не можем устанавливать ширину отдельных элементов, нам это действительно нужно? Или есть способ просто сказать flexbox о разрыве строки в определенных точках?
Нет свойства, которое мы могли бы установить для flex-элемента, чтобы он разорвался на новую строку, но мы можем вставить свернутую строку (вы можете думать об этом как ) между двумя flex-элементами, два из которых достигают чего-то похожего. Вкратце:
/* Вставка этой свернутой строки между двумя гибкими элементами сделает
* гибкий элемент, который появляется после того, как он разбивается на новую строку */
.перерыв {
flex-основа: 100%;
высота: 0;
}
<дел>
<дел>дел>
<дел>дел>
Давайте рассмотрим несколько сценариев, когда вы можете захотеть использовать это, и рассмотрим некоторые интересные методы компоновки, которые мы можем использовать.
Обратите внимание, что все приведенные ниже примеры кода требуют и предполагают, что у вас есть контейнер flex с дисплеем : flex и flex-wrap: wrap и что в этот контейнер добавлены элементы flex:
Использование элемента для перехода к новой гибкой строке приводит к интересному эффекту: мы можем пропустить указание ширины любого элемента в нашем гибком макете и полностью полагаться на разрывы строк для определения потока нашей сетки.
Начнем с простого примера. Скажем, у нас есть два элемента, показанные рядом (они настроены на рост с помощью flex-grow: 1 , и у них нет определенной ширины или flex-basis ):
Мы можем вставить элемент разрыва строки между элементами, чтобы они оба занимали 100% доступного пространства:
<дел>...дел>
<дел>...дел>
Получается макет с двумя вертикально расположенными элементами полной ширины (я добавил границу к элементу .break , чтобы проиллюстрировать его положение и поведение):
Как это работает? Поскольку мы сказали, что .break должен занимать 100% ширины контейнера (поскольку мы установили flex-basis: 100% ), ломающий flex-элемент должен находиться в своей собственной строке, чтобы выполнить это. Он не может разделить строку с первым элементом, поэтому он разбивается на новую строку, в результате чего первый элемент остается один в одной строке. Затем первый элемент будет увеличиваться, чтобы заполнить оставшееся пространство (поскольку мы установили flex-grow: 1 ). Та же логика применима и ко второму пункту.
Мы можем использовать эту технику, чтобы составить макет в верхней части поста, разбивая его до и после каждого четвертого элемента:
Это создаст макет в верхней части сообщения в блоге. По сути, элемент не перенесется на новую строку, пока мы не вставим разрывающий строку элемент:
Опять же, нам не нужно было указывать ширину ни для одного из этих элементов. Тот же метод будет работать для столбцов, если у нас есть гибкий контейнер с flex-direction: column и установите ширину (вместо height ) на 0 для нашего разрывающего элемента:
/* Используйте свернутый столбец, чтобы разбить на новый столбец */
. break-столбец {
flex-основа: 100%;
ширина: 0;
}
Этот подход с использованием элементов разрыва строки для определения макета определенно добавляет немного раздувания и шума в наш HTML, но он может быть мощным инструментом при правильном использовании. Мы можем, например, использовать его для создания макета каменной кладки только с помощью CSS и динамически позиционировать разрывы с помощью свойства порядка . Мы также можем перейти к новой строке, не изменяя ширину какого-либо элемента содержимого, и мы можем полагаться исключительно на flex-grow для распределения пространства в макете сетки.
Предположим, что мы хотим создать этот макет:
И предположим, что мы хотим сделать это, установив различные значения flex-grow для распределения пространства (вместо использования flex-basis или ширины , которые вам придется пересчитывать, как только вы добавите или удаленные элементы):
Если мы затем хотим добавить еще одну строку элементов ниже этой строки:
Мы не смогли бы сделать это, не прибегая к установке flex-basis или width по крайней мере для некоторых элементов (или созданию вложенного макета flexbox с одним элементом flex для каждой строки). Если бы все элементы просто имели разные значения flex-grow , ничто не заставило бы их перейти на новую строку, они бы все вместе втиснулись в одну строку:
Уютно, но не то, что нам нужно. Однако, если мы вставим прерывающий элемент, мы можем построить этот макет, распределив все пространство с помощью flex-grow :
Получение желаемого макета со всеми размерами, определенными пропорционально через flex-grow :
И если есть сценарий, когда нам нужно пять элементов в первой строке, нам не нужно менять какой-либо CSS, чтобы это работало, мы можем просто добавить эти элементы перед разрывом строки:
Все, что вам нужно добавить в свой CSS, чтобы использовать элементы разрыва строки, это эти два класса (единственное различие между двумя классами заключается в том, что ширина (а не высота ) должны быть установлены на 0 , чтобы элемент сворачивался при использовании в макете столбца):
/* Вставка свернутой строки между двумя гибкими элементами сделает
* гибкий элемент, который появляется после того, как он разбивается на новую строку */
. перерыв {
flex-основа: 100%;
высота: 0;
}
/* Используйте свернутый столбец для перехода к новому столбцу */
.break-столбец {
flex-основа: 100%;
ширина: 0;
}
Вы, безусловно, можете добиться того же эффекта или подобных эффектов, вложив flexbox’ы и имея один flex-элемент для каждой строки, а во многих случаях просто используя flex-basis , width или содержимое внутри flex-элементов, вероятно, предпочтительный способ управления потоком элементов в макете flexbox. Но вставка гибких элементов, разбивающих строки, доступна и проста в использовании, она работает, и эта техника обладает некоторыми уникальными характеристиками, которые могут пригодиться.
html — разрыв строки в flex
Задавать вопрос
спросил
Изменено
2 года, 10 месяцев назад
Просмотрено
7к раз
Я рассмотрел ответы на вопрос о вставке разрывов строк при использовании flex. Однако у меня немного другая ситуация.
У меня есть левый столбец и правый столбец. Левая колонка всегда должна быть 200 пикселей, несмотря ни на что. Правый столбец должен содержать три столбца, а затем разрыв строки до следующих трех столбцов.
Как я уже указал flex-wrap: nowrap; это имеет тенденцию усложнять дело.
Есть идеи, возможно ли это? Я уверен, что это должно быть, но я стучал против этого без решения.
Вам нужно установить . line-break высота до 1px , а также, когда вы выбираете элементы div из .rightcol , не выбирайте .line-break , а только элементы div, содержащие числа, например: