不是完美的,但這裏是我的解決方案:
這是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很好地COLAPSE ,我需要在它們之間沒有空格。
而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時,這種方法存在問題;爲了避免它,我們將visible元素的margin-right設置爲一個負值,以便它能很好地適應容器。
我在最後的狀態有問題,行之間有一個空格(並且元素沒有到達最上面的位置)。當我在小提琴外面有相同的代碼時,這個問題不顯示;我不知道是什麼原因造成的。
哦,我看到你在這裏做什麼,基本上你收縮容器以及避免從包裝上面因爲有對包裝沒有空間行的div ......嗯,如果可能的話我想以避免不必要的包裝將標記保持爲語義儘可能,但我會檢查我的結構,看看這樣的事情是否可能。非常明確的方法壽,謝謝! –
我也喜歡將語言標記爲語義上的,並且我已經想了很多更好的答案,但是您的問題特別難:-) – vals