Почему не работает display flex
Перейти к содержимому

Почему не работает display flex

  • автор:

Почему не работает display: flex; flex-direction: row;?

Работает. По умолчанию justify-content равен flex-start, вот элемент hi__body и находится с левого края. Для того чтобы действие «flex-direction: row» было заметней, нужно задать другое значение для justify-content (center например) или добавить еще один элемент (или несколько) по соседству с hi__body. Прошу прощения если неправильно понял проблему.

Ответ написан более года назад

Комментировать

Нравится Комментировать

Ответы на вопрос 0

Ваш ответ на вопрос

Войдите, чтобы написать ответ

javascript

  • JavaScript
  • +2 ещё

Как реализовать код, чтобы при нажатии на кнопку два блока менялись друг с другом местами, то есть изменять их order?

  • 1 подписчик
  • 5 минут назад
  • 2 просмотра

Как поместить scroll -контейнер во flexbox и не облажаться.

Столкнулись с проблемой: блок со скролом распепячивает flex. Давайте разбираться.

4 месяца назад показалось, что хак найден, о чём мы поспешили рассказать в твиттере, но потом стало ясно что таки поспешили.

Помотрели в спеку и mdn, но ключей к решению не нашли.

MDN: In order for overflow to have an effect, the block-level container must have either a set height (height or max-height) or white-space set to nowrap.

После экспериментов (демки ниже) стало понятно что приводит к растяжению ширины scroll -контейнера: родительские flex-контейнеры без заданной через width ширины, см. сниппет 1.4. Ширина-то необходима как следует из статьи с MDN.

Но очевидно, задание width элементу flex-контейнера ломает flex-поведение, см. сниппеты 1.6. и 2.2.

А коли во flex мы не имеем права задавать width , то и scroll справедливо не работает.

Слава Гридам, был найден ХАК: Если обернуть scroll в грид из одного элемента, то задавать ширину или white-space , как указано в документации не трубуется, см. сниппет 0.0.

Демки в порядке дебага

0. Хак

1. Попытка сломать простой работающий скрол внутри ширины в %

  1. ❎ Just overflow
  2. ❎ Just overflow in flex wrap
  3. ❎ Just overflow with single scrollable
  4. ссылка сломалась �� Minimal reproducing: after extra flex added!
  5. ссылка сломалась Fixed: .flex-wrap.inner
  6. ссылка сломалась But it’s broken at all

2. Попытка починить сломанное решение из проекта

  1. ссылка сломалась �� Reproducing (copied from project)
  2. ссылка сломалась ✴️ Removing div.scroll-wrap fixes it! But width still overflows
  3. �� With Grid hack

Ответы на вопросы

Почему просто не заворачивать всё в гриды

В динамических SPA компонентах содержимое может произвольным образом меняться, часто нельзя задавать в css жёсткую структуры. Хотя гриды и обладают гибкостью к содержимому контейнера (например, можно описать колонки для произвольного количества «строк»), часто это или излишне или всё же недостаточно гибко и требует дублировать знание о структуре динамического контента в css.

Где это нужно

Мы эту проблему решили для скролящихся вкладок внутри 2-х вложенных flex-контейнеров составной шапки. Эта шапка состоит из родительского React-компонента, описывающего компоновку (layout) и встроенного фрагмента, специфичного для этого типа страниц.

Зачем в демках два вложенных флекса

Например .scroll-wrap-2 это прекрасный пример хака «scrollbar-hider»: прячущего скролбар внизу для любой платформы. В других демках вложенные флексы демонструруют реальную структуры вёрстки боевого проекта состоящего из встроенных из вне компонент.

Продолжение

В следующей статье расскажем про хак с display: grid и position: sticky в главных ролях.

Благодарности ��

Эти результаты не стали бы реальностью без классных ребят из моей команды:

СSS не работает display: flex

Но этот CSS не применяется к этому блоку, при чем если указать margn-left: 300px; — то это значение применяется.

Нужно просто центрировать этот блок, margn-left применить можно, но получится не адаптивный элемент…

Stich

Stich
  • Испытатели
  • Сообщений: 252

#2 11 апреля 2019 в 15:52
А что у вас items? Строки в блоке?

Lora

Lora
  • Псков
  • Испытатели
  • На орбите
  • Сообщений: 2807

#3 11 апреля 2019 в 15:54

А что у вас items? Строки в блоке?

Lora

Не совсем понял вопрос))))
Можно раскрыть немного?

Stich

Stich
  • Испытатели
  • Сообщений: 252

Сегодня в 13:46

Реклама

#4 11 апреля 2019 в 15:56
А если margin:0 auto;
t.me/googleindexingapi

&$!#%

  • Хьюстон
  • Испытатели
  • На орбите
  • Сообщений: 2477

#5 11 апреля 2019 в 15:56

Почитайте документацию flex контейнеров, для начала). И возможно найдёте ошибку), Просто долго писать.

Lora

Lora
  • Псков
  • Испытатели
  • На орбите
  • Сообщений: 2807

#6 11 апреля 2019 в 15:57

А если margin:0 auto;

чебурек дохлэй мыш

пробовал, не работает((

Stich

Stich
  • Испытатели
  • Сообщений: 252

#7 11 апреля 2019 в 15:59

Почитайте документацию flex контейнеров, для начала). И возможно найдёте ошибку), Просто долго писать.

Lora

Через поиск не нашел по запросу «flex» «flex контейнер» ни чего нет, ни на форуме ни в документации…
Ткните носом, пожалуйста)

Stich

Stich
  • Испытатели
  • Сообщений: 252

#8 11 апреля 2019 в 15:59

margin-left:50%;
transform:translate(-50%, 0);

Способов центировать дофига, наугад сложнее.

t.me/googleindexingapi

&$!#%

  • Хьюстон
  • Испытатели
  • На орбите
  • Сообщений: 2477

#9 11 апреля 2019 в 16:02

Способов центировать дофига, наугад сложнее.

чебурек дохлэй мыш

Я это понимаю, гуглом пользоваться умею слава богу, но ни чего не работает, кроме margin-left, margin-right, margin-top, margin-bottom)))))

Stich

Stich
  • Испытатели
  • Сообщений: 252

#10 11 апреля 2019 в 16:03

Ширина блока известна?
Если да, то

Ну а то, что ничего не работает, похоже на проделки электрического шайтана.

t.me/googleindexingapi

&$!#%

  • Хьюстон
  • Испытатели
  • На орбите
  • Сообщений: 2477

#11 11 апреля 2019 в 16:06

Ширина блока известна?

чебурек дохлэй мыш

Нет, ни где width не прописан.

Stich

Stich
  • Испытатели
  • Сообщений: 252

#12 11 апреля 2019 в 16:11
HTML хоть бы показали.

SpideR

SpideR
  • Испытатели
  • Сообщений: 918

#13 11 апреля 2019 в 18:33

но ни чего не работает, кроме margin-left, margin-right, margin-top, margin-bottom)))))

@stich

9 из 10, что вы назначаете стили родителю, а хотите чтобы они применялись к потомкам.
Потому оно правильно «не работает»))

Украинский для инстант

Олег Васильевич я
  • Черновцы
  • Разработчики
  • Сообщений: 3803

#14 11 апреля 2019 в 19:08

но ни чего не работает, кроме margin-left, margin-right, margin-top, margin-bottom)))))

@stich

9 из 10, что вы назначаете стили родителю, а хотите чтобы они применялись к потомкам.
Потому оно правильно «не работает»))

Олег Васильевич я
Вы правы… Теперь все работает.
Опыт бесценен!))

Флексы для начинающих

Flexbox — инструмент построения крупных сеток и микросеток.

Чтобы превратить блок во флекс-контейнер, ему задают свойство display: flex . Непосредственные потомки такого контейнера — флекс-элементы — становятся гибкими. Они легко сжимаются или растягиваются, меняют порядок, поддаются выравниванию по главной и поперечной осям.

Сайт HTML Academy сделан на флексах

Благодаря таким свойствам мы можем создавать на флексах меню сайта, раздел с карточками товаров, пагинацию или любые другие блоки, в которых нужно предусмотреть переполнение контентом. При правильном использовании Flexbox вы получите отзывчивый сайт, который легко адаптируется к различным размерам экрана и устройствам.

Главная и поперечная оси

Элементы флекс-контейнера выравниваются вдоль двух осей: главной и поперечной.

Главная ось указывает направление потока флекс-элементов. По умолчанию он течёт по горизонтали слева направо, от начала к концу оси:

Направлением главной оси можно управлять, меняя значения свойства flex-direction :

  • flex-direction: row — ось направлена слева направо, элементы располагаются в ряд. Это значение по умолчанию.
  • flex-direction: row-reverse — элементы идут в обратном направлении — справа налево.
  • flex-direction: column — элементы располагаются в столбец сверху вниз.
  • flex-direction: column-reverse — элементы идут снизу вверх.

Чаще всего используется значение по умолчанию — row , чуть реже — column . x-reverse применяют редко.

Поперечная ось всегда находится под углом 90 градусов к главной. Если главная ось горизонтальна, поперечная идёт сверху вниз, а если главная вертикальна, то поперечная направлена слева направо.

justify-content

Флекс-элементами можно управлять, меняя их положение относительно каждой оси. CSS-свойство justify-content распределяет элементы по главной оси. Оно принимает следующие значения:

  • flex-start — элементы стоят в начале оси.
  • flex-end — элементы стоят в конце оси.
  • center — элементы по центру оси.
  • space-between — элементы равномерно распределены вдоль главной оси, при этом первый элемент располагается в начале, а последний — в конце. Между крайними элементами и флекс-контейнером отступа нет.
  • space-around — элементы равномерно распределены вдоль оси. Расстояние между крайними элементами и флекс-контейнером равно половине отступа между соседними флекс-элементами.
  • space-evenly — элементы равномерно размещены вдоль оси. Отступы между соседними элементами и краями флекс-контейнера равны.

align-items

За выравнивание элементов по поперечной оси отвечает свойство align-items . По умолчанию у него значение stretch , то есть элементы растягиваются вдоль всей оси.

  • flex-start — элементы идут в начале оси;
  • flex-end — элементы идут в конце оси;
  • center — элементы в центре оси;
  • baseline — элементы размещены по базовой линии.

Базовая линия — невидимая линия, которая проходит по нижней части букв.

Порой в макете отдельные элементы располагаются выше или ниже, правее или левее. На такие случаи во флексах есть свойство align-self . Оно выравнивает отдельный элемент по поперечной оси.

Значения align-self такие же, как у align-items.

align-content

Вдоль поперечной оси можно выравнивать не только элементы, но и ряды флекс-элементов — это делается с помощью свойства align-content .

align-content немного похож на свойства justify-content и align-items . От первого он взял значения:

  • flex-start
  • flex-end
  • center
  • space-between
  • space-around
  • space-evenly

От align-items достались свойства: stretch и baseline .

С align-content мы можем расположить ряды элементов более гибко — например, задав одинаковые расстояния между ними или растянув на всю возможную высоту.

Отличие align-content от align-items

align-items выравнивает элементы внутри флекс-контейнера, а align-content — ряды.

По умолчанию у align-content значение stretch — то есть ряды флекс-элементов растягиваются, и свободное пространство делится между ними пополам. В таких случаях отображение зависит от значения align-items . Если это тоже stretch , то элементы в строке растянутся на всю высоту. Если нет — элементы сожмутся до размеров содержимого и выровняются согласно значению align-items .

Когда align-content задано другое значение (не stretch ), оно перекрывает значения align-items и align-self . Например, здесь ряды элементов окажутся в конце поперечной оси:

flex-wrap

В коде выше есть свойство flex-wrap — оно отвечает за перенос строк во флекс-контейнере. По умолчанию у свойства стоит значение no-wrap , то есть перенос запрещён. При добавлении новых элементов все элементы станут сжиматься до минимально возможной ширины — даже если явно указано значение width . Когда элементы перестанут помещаться в контейнере, то выйдут за его пределы.

Чтобы элементы при заполнении ряда переносились на новый, нужно указать flex-wrap: wrap . Наглядный пример — гифка в начале статьи.

Ещё без переноса рядов не работает свойство align-content . Например, в таком случае элементы выровняются по началу поперечной оси.

Игры и курсы для практики

Флексы — очень гибкий инструмент, с его помощью можно создавать сложные микросетки и даже менять элементы местами. Основу теории вы теперь знаете — дальше дело за закреплением материала и углублением знаний.

Где практиковаться и что изучить:

  • Flexbox froggy — игра на русском языке, где вы с помощью флексов размещаете лягушат на кувшинках.
  • Flexbox Defense — англоязычная игра в стиле Tower Defense. Вы на флексах располагаете башни, чтобы защититься от врагов.
  • Навык «Построение сеток на флексах по макету». Изучаете 50 страниц углублённой теории о flexbox и выполняете задания — строите сетки для сайта. В навыке 10 кейсов разной сложности с макетом в формате Figma и готовым решением.
  • Курс «HTML и CSS. Профессиональная вёрстка сайтов». Научитесь верстать сайты и писать для них стили. Изучите не только флексы, но и гриды — ещё один современный механизм построения сеток.

Материалы по теме

  • Примеры использования флексов
  • Когда использовать флексы, а когда гриды
  • Как сверстать макет

«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *