Кажется, что есть много вопросов по одной и той же проблеме, но не может найти удовлетворительного ответа... У меня есть:
1 container (flex) (green)
2 columns (block) -> left: red, right: orange
in the left column, I have two divs (green) who follow each other 'menu1''menu2'
Эти два меню сами обернуты в div (черный), так что, когда я поворачиваю его, два меню являются вертикальными, а не горизонтальными (вращение на 90 градусов)
Цель состоит в том, чтобы верхняя оболочка/контейнер (зеленая) занимала высоту вертикальной черной обертки, а оболочка левого столбца была не больше ширины развернутой черной обертки.
То, что я получаю, проиллюстрировано в следующем примере:
https://jsfiddle.net/pg373473/
<div id='container' style='display: flex; border: 3px solid green; flex-direction=row'>
<div id='leftbox' style='position: relative; display: block; border: 3px solid red'>
<div id='textwrapper' style='transform-origin: bottom left; transform: translateY(-100%) rotate(90deg); border: 2px solid black;'>
<div style='border: 3px solid green; display: inline-block'>menu 1</div>
<div style='border: 3px solid green; display: inline-block'>menu 2</div>
</div>
</div>
<div id='rightbox' style='position: relative; display: flex; flex: 1 1 auto; border: 3px solid orange';>
xx
</div>
</div>
Возможно ли это вообще?
По умолчанию, кажется, что поворот будет применен после, будет рассчитана вся ширина/высота для всех div. Я лично считаю, что это поведение противоречит ожиданиям любого, но может быть, кто-то, кто хорошо знает спецификации, может объяснить, почему это так? Но, в конце концов, мне больше интересно узнать, есть ли решение того, что я пытаюсь достичь (спасибо).
ИЗМЕНИТЬ
Поворот элементов в CSS, которые влияют на их родителей... спрашивает что-то о поворотах, но объяснение не является удовлетворительным, и проблема немного отличается, поскольку она касается только того, чтобы быть уверенным что div от повернутого ребенка учитывает высоту повернутого ребенка. Вопросы, заданные в этом сообщении, имеют 3 ограничения:
- у вас есть 2 divs в строке, которые повернуты на 90 градусов (или более 2)
- контейнер-упаковщик должен принимать:
- ширина
- и высота вращающихся элементов детей.
Вышеупомянутый вопрос задает только высоту и не решает проблему ширины. Кроме того, jsfiddle также не работает.
Единственная хорошая часть этого вопроса - упомянутая в комментариях writing-mode
, но мне также не удалось заставить ее работать с этим. Я пробовал эту опцию, и, хотя я могу исправить проблему с высотой, я не могу заставить ее работать, чтобы исправить проблему с шириной...
<div id='container' style='display: flex; border: 3px solid green; flex-direction: row'>
<div style='display: flex; flex-direction: column; border: 3px solid red; flex: 1 1 auto;'>
<div style='flex: 0 0 auto; display: inline-block; flex-direction: row; writing-mode: vertical-rl; border: 3px solid black;'>
<div style='flex: 0 0 auto; border: 1px solid green; display: inline-block'>menu 1</div>
<div style='flex: 0 0 auto; border: 1px solid green; display: inline-block'>menu 2</div>
</div>
</div>
<div id='rightbox' style='display: flex; flex: 1 1 auto; border: 3px solid orange';>
Right Box
</div>
</div>
https://jsfiddle.net/dyae4xru/
Для ясности вот что я хочу:
ОТВЕТ/РЕДАКТИРОВАТЬ 2
На данный момент решения этой проблемы нет. CSS/HTML/Браузеры не поддерживают это из коробки. Я исправил проблему, написав небольшую JS-функцию, которая дает мне точную ширину и высоту div при горизонтальной настройке и использует значения для установки ширины div, повернутого на 90 градусов (используя writing-mode: vertical-rl
).