在我的代码中,两个内联flex div彼此相邻。
在第一个内联flex div中,flex项目设置为Private Sub ListView1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim clickedItem As MSComctlLib.ListItem
Set clickedItem = ListView1.HitTest(x, y)
If Not clickedItem Is Nothing Then ListView1.Visible = False
End Sub
。但是,这会影响其兄弟内联flex div的水平位置。我的意思是,当flex设置为flex-direction:column-reverse
时,兄弟flex的位置不同。我不明白为什么会这样。
我的理解是flex-direction: column
仅控制其子项的位置,即弹性项,并且它对其兄弟的flex div没有影响。但显然这似乎是错误的。谁能解释为什么?谢谢!
flex-direction
.flex {
display: inline-flex;
border: solid;
margin: 10px;
}
.box {
background: papayaWhip;
width: 100px;
height: 100px;
margin: 10px;
padding: 10px;
}
.column-reverse {
flex-direction: column-reverse;
}
.column {
flex-direction: column;
}
答案 0 :(得分:2)
预计column-reverse
容器中inline-flex
中的弹性项只会反转,而不会影响线上其他元素的水平对齐,这听起来是合理的。< / p>
然而,实际情况并非如此。
在inline-flex
容器中,column-reverse
切换弹性项目的方向(如预期的那样),,但也会反转容器的流量(向上)。
从您的代码(三个内联 - 柔性容器,在父级周围添加红色边框):
这似乎不是一个错误。行为是相同的跨浏览器(在Chrome,FF,IE11中测试)。
问题可能是两个因素的结果:
vertical-align
属性column-reverse
规则规则vertical-align
强> 适用于内联级元素的vertical-align
属性的初始值为baseline
。
无论容器是column
还是column-reverse
,这都是应用的值。
灵活项目#1的对齐可能不会因为(来自规范)而改变:
5.1. Flex Flow Direction: the
flex-direction
property<强>
column-reverse
强>与
column
相同,但主开始和主要方向除外 交换。注意:反向值不反转框顺序:喜欢 写作模式和方向,他们只改变流动的方向。 绘画顺序,语音顺序和顺序导航顺序不是 影响。
如果我正确读取此内容,column-reverse
实际上并未更改弹性项目的顺序。它可以逆转容器的流动。这可以解释第一个容器的向上扩展。
如@NenadVracar's answer所述,解决问题的一种方法是调整vertical-align
的值。从默认baseline
值切换到top
可以解决问题。
.flex {
display: inline-flex;
border: solid;
margin: 10px;
vertical-align: top; /* NEW */
}
.box {
background: papayaWhip;
width: 100px;
height: 100px;
margin: 10px;
padding: 10px;
}
.column-reverse {
flex-direction: column-reverse;
}
.column {
flex-direction: column;
}
&#13;
<div class="flex column-reverse">
<div class="box">item1</div>
<div class="box">item2</div>
</div>
<div class='flex'>
<div class="box">item1</div>
<div class="box">item2</div>
</div>
<div class="flex column">
<div class="box">item1</div>
<div class="box">item2</div>
</div>
&#13;
使inline-flex
div的父级成为Flex容器也可以解决问题:
body {
display: flex; /* NEW */
align-items: flex-start; /* NEW; optional; to disable equal height columns */
}
.flex {
display: inline-flex;
border: solid;
margin: 10px;
}
.box {
background: papayaWhip;
width: 100px;
height: 100px;
margin: 10px;
padding: 10px;
}
.column-reverse {
flex-direction: column-reverse;
}
.column {
flex-direction: column;
}
&#13;
<div class="flex column-reverse">
<div class="box">item1</div>
<div class="box">item2</div>
</div>
<div class='flex'>
<div class="box">item1</div>
<div class="box">item2</div>
</div>
<div class="flex column">
<div class="box">item1</div>
<div class="box">item2</div>
</div>
&#13;
答案 1 :(得分:1)
由于默认vertical-align
为基线,在您更改Flex项目的顺序或column-reverse
时,它们似乎仍与item1
对齐如果您将vertical-align
更改为顶部,则它们会与最高位置对齐,vertical-align: middle
也会在此处Fiddle
.flex {
display: inline-flex;
vertical-align: top;
border: solid;
margin: 10px;
}
.box {
background: papayaWhip;
width: 100px;
height: 100px;
margin: 10px;
padding: 10px;
}
.column-reverse {
flex-direction: column-reverse;
}
.column {
flex-direction: column;
}
<div class="flex column-reverse">
<div class="box">item1</div>
<div class="box">item2</div>
</div>
<div class='flex'>
<div class="box">item1</div>
<div class="box">item2</div>
</div>
<div class="flex column">
<div class="box">item1</div>
<div class="box">item2</div>
</div>