LINUX.ORG.RU

Как вообще пользоваться Flexbox-ами?

 


0

2

Вот требования к коду:

  1. Форма должна иметь ширину, достаточную для размещения всех ее элементов без переноса строк.
  2. Внутри формы должно быть одно поле ввода и две кнопки.
  3. Элементы формы (поле ввода и кнопки) должны быть расположены в две строки.
  4. Поле ввода должно занимать всю ширину формы.
  5. Две кнопки должны быть одинакового размера, независимо от длины их содержимого.
  6. «white-space: nowrap;» надо оставить, чтобы тексты кнопок не разрывались на несколько строк
  7. Не должно быть лишних стилей или элементов, которые не требуются для достижения этих целей.

Вот код:

<form style="display: flex; flex-direction: column; flex-grow: 1; flex-basis: auto; width: max-content;">
  <input type="text" placeholder="Текст" style="width: 100%;">
  <div id="buttons" style="display: flex; flex-basis: auto; width: calc (2 * max-content);">
    <button type="submit" style="white-space: nowrap; width: 50%;">Кнопка 1</button>
    <button type="submit" style="white-space: nowrap; width: 50%;">Длинная Кнопка</button>
  </div>
</form>

Что не так с этим кодом?
Почему элемент input не равен по ширине элементу с id=«buttons»?
как добиться одновременно ограниченного размером контента размера формы и кнопок одинаковой ширины?

★★★★

Что не так с этим кодом?

Правила по которым он как бы пишется придуманы сборищем конченных идиотов и подонков из w3c, а потом интерпретированы такими же мерзкими сборищами браузерописателей.

Скорее всего в buttons надо тупо какое-нибудь width:100% указать или магическое transform:здесь невменяемый набор выражений и какие-нибудь flex-заклинания в контейнере ещё добавить. Выясняется только методом тыка.

Вообще смешно, конечно, вроде такая штука популярная этот html а в нём до сих пор нет банальщины типа vfill hfill как в TeX и прочих.

Растянуть div на высоту окна в котором показывается html - до сих пор квест с совершенно неочевидными решениями, а то и вовсе с JS.

Сделать все div одинаковой высоты вне зависимости от того, на сколько рядов wrap’ится последовательность - тоже квест ещё тот.

Указание высоты/ширины/позиции в пикселях или JS до сих пор иногда единственный способ разместить элементы так как нужно.

И т.п. и т.д.

Stanson ★★★★★
()
Последнее исправление: Stanson (всего исправлений: 1)

Есть готовые визуальные генераторы Flex, начни с них.

IIIypuk ★★★★
()

На какой-нибудь jsfiddle бы выложил, никто не будет твою форму в уме рендерить, чтобы посмотреть, что с ней не так.

А вообще двачую господина с box-sizing: border-box; и я бы ещё input обернул в какой-нибудь нормальный блочный элемент типа div.

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 2)
Ответ на: комментарий от Nervous

и я бы ещё input обернул в какой-нибудь нормальный блочный элемент типа div

А что не так с input?

annulen ★★★★★
()

Что не так с этим кодом?

flexbox работает только сверху вниз по иерархии. Из-за этого дочерние элементы нормально не могут влиять на размеры контейнеров, иначе это приведёт к циклическому пересчёту размеров всех элементов.

static_lab ★★★★★
()
Ответ на: комментарий от static_lab

С гридом да, получается. Но я-то про flexbox спрашивал

Shushundr ★★★★
() автор топика
Ответ на: комментарий от static_lab

это приведёт к циклическому пересчёту размеров всех элементов

Экселю это почему-то не мешает

Shushundr ★★★★
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.