【发布时间】:2018-03-24 17:54:15
【问题描述】:
似乎有很多关于同一问题的问题,但似乎无法找到满意的答案......我有:
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 的所有宽度/高度之后应用的。我个人认为这种行为违背了任何人的预期,但也许非常了解规格的人可以解释为什么会这样?但最后,我更想知道是否有解决我试图实现的目标(谢谢)。
编辑
Rotate elements in CSS that affect their parents... 正在询问有关旋转的问题,但解释并不令人满意,并且问题略有不同,因为它只是确保旋转孩子的 div 考虑到旋转孩子的高度。这篇文章中提出的问题有 3 个限制:
- 您有 2 个连续旋转 90 度(或超过 2 个)的 div
- 包装容器需要承担:
- 宽度
- 和子旋转元素的高度
上述问题只问高度,并没有解决宽度问题。此外,jsfiddle 也不起作用。
关于这个其他问题的唯一好处是writing-mode 的 cmets 中提到的,但我也没有设法使它与这个问题一起工作。我试过这个选项,虽然我可以解决高度问题,但我无法解决宽度问题......
<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/Browsers 不支持开箱即用。我通过编写一个小的 JS 函数解决了这个问题,该函数为我提供了水平时 div 的确切宽度和高度,并使用这些值来设置 div 旋转 90 度后的宽度(使用writing-mode: vertical-rl)。
【问题讨论】:
-
@Ncardeli:不是,请参阅我上面的编辑。如果旧问题有一个可行的解决方案(这不是黑客),那么一个问题只能被认为是重复的,而您指出的问题不是这种情况(我之前看过)。谢谢
-
hacky $('parent').height($('selector').width()+border)
-
谢谢乔希。是的,这是一个 hack,并且使用 jquery ......但是确实使用 JS 可以做到这一点,但这绝对是一个 hack。
-
你能添加一张你想要实现的布局的图片吗!
标签: html css flexbox css-transitions