不完美,但这是我的解决方案:
这是html:
<div class="base">
<div class="container"><div class="child"></div><div class="child"></div><div class="child"></div><div class="child"></div><div class="child"></div><div class="child"></div><div class="child"></div><div class="child"></div><div class="child2"></div><div class="child"></div>
由于您使用的是内联块,并且我希望您的 div 能够很好地折叠,因此我需要在它们之间没有空格。
CSS是:
.container, .base {
width: 500px;
height: 400px;
}
.base {
border: solid 1px black;
}
.container {
-webkit-transition: 1s all linear;
}
.child, .child2 {
width: 120px;
height: 80px;
display: inline-block;
margin: 10px;
}
.child {
-webkit-transition-duration: 1s;
-webkit-transition-property: height, width, margin;
-webkit-transition-timing-function: linear;
background-color: lightblue;
}
.child2 {
-webkit-transition: 1s all linear;
background-color: lightgreen;
}
.base:hover .container {
width: 20px;
}
.base:hover .child {
width: 5px;
height: 0px;
margin: 0px;
background-color: silver;
}
.base:hover .child2 {
margin-right: -120px;
}
这个想法是在你的容器和孩子之间有一个额外的 div,它的大小与孩子的调整速度大致相同。这样,我们为所有过渡保持相同的布局,在这种情况下,每行 3 个 div,并且我们避免所有元素进入同一行并折叠可见 div 的顶部。
当容器小于不收缩的 div 时,这种方法存在问题;为避免这种情况,我们将可见元素的 margin-right 设置为负值,以使其能够很好地适应容器。
我在最终状态中有一个问题,行之间有一个空格(并且元素没有到达最高位置)。当我在小提琴之外有相同的代码时,这个问题不会出现;我不知道是什么原因造成的。