Мне не хватает советов, касающихся следующей проблемы.
Я хочу расположить несколько элементов внутри flexbox, поскольку функция должна адаптироваться к ее окружению. Ниже одного из этих элементов я хочу расположить вычисляемый элемент, который будет использовать размер элемента над ним. По сути, он имеет фиксированный (но рассчитанный) размер.
Я попытался решить проблему, поместив вычисляемый элемент во flexbox, но это разрушает общее поведение.
Предполагается, что выглядит примерно так:
<Label w/o shrink> <input element, can grow> <Label w/o shrink>
<some rectangle, calculated size>
желаемый макет - ссылка, так как мне не разрешено публиковать изображения
В прикрепленном примере jsfiddle пример задача Я использую элемент ввода в сочетании с двумя метками и вычисленным прямоугольником для описания поведения. Думайте о прямоугольнике как о типичном c примере проблемы.
Изменение размера окна с точки зрения увеличения окна работает как шарм. Проблемы возникают при уменьшении размера.
Flex может только уменьшить размер элементов с нефиксированным размером, таких как элемент ввода. Мой вычисленный прямоугольник имеет фиксированный размер. Таким образом, этот размер предотвращает любое сжатие контейнера ввода + прямоугольника.
Идея 1 : сделать вычисляемый элемент немного меньшим, чем соответствующий ввод, чтобы сам контейнер мог сжиматься, так как есть место. Ввод будет уменьшаться, и, следовательно, рассчитанный прямоугольник также будет уменьшаться. См. jsfiddle с меньшим прямоугольником
Это работает в некоторой степени. Если при изменении размера окна мышь движется достаточно медленно / изменения размера происходят медленно, все в порядке. Как только усадка происходит слишком быстро, чтобы рендеринг продолжался, проблема, как описано выше, возникает снова.
Идея 2: Игнорируйте вычисленный элемент, позиционируя его абсолютно. Смотрите здесь: jsfiddle с относительным и абсолютным позиционированием
Я определил, что внешний элемент должен быть позиционирован относительно, а внутренний (вычисленный элемент с / "постоянной" шириной) должен быть позиционирован абсолютно. При этом элемент будет взят из потока, и все работает нормально. Почти . Поскольку теперь прямоугольник игнорируется, оставшийся макет также нарушается. Это неприемлемо из-за использования этой функции в качестве компонента в более широком контексте. В этом примере последний ярлык расположен слишком высоко, так как div не будет учитывать прямоугольник.
Теперь у меня вопрос, есть ли у вас дополнительные советы. Если это вообще возможно, я хочу избежать каких-либо вычислений в javascript и решить проблему, используя css связанные параметры. (В противном случае использование дополнительной информации getBoundingClientRect()
- такой как позиция x - могло бы быть в некотором роде опцией (?) -> таким образом, я мог бы полностью удалить прямоугольник из flexbox и просто расположить его «вручную» в желаемая должность).
Я рад любым дальнейшим идеям.