最終更新
これは、 JSを使用して、残りの位置(単純な計算)とCSS遷移を設定するための完全に機能するソリューション(私の意見では非常に簡単です)です。
http://jsfiddle.net/gaby/pYdKB/3/でのデモ
流動性を維持し、float:left
任意の数の要素で機能します。また:nth-child
、スタイリングを維持できます。また、複数の要素を表示したままにする場合にも機能します。
javascript
var wrapper = $('.wrapper'),
boxes = wrapper.children(),
boxWidth = boxes.first().outerWidth(true),
boxHeight = boxes.first().outerHeight(true);
function rePosition(){
var w = wrapper.width(),
breakat = Math.floor( w / boxWidth ); // calculate fluid layout, just like float:left
boxes
.filter(':not(.go)')
.each(function(i){
var matrixX = ((i)%breakat)+1,
matrixY = Math.ceil((i+1)/breakat);
$(this).css({
left:(matrixX-1) * boxWidth ,
top: (matrixY-1) * boxHeight
});
});
}
$('.box').click(function(){
$(this)
.siblings()
.toggleClass('go');// just add the go class, and let CSS handle the rest
rePosition(); // recalculate final positions and let CSS animate the boxes
});
$(window).resize(rePosition);
$(window).trigger('resize');
CSS
.wrapper{
position:relative;
}
.box{
width:200px;
height:100px;
position:absolute;
margin:5px;
cursor:pointer;
overflow:hidden;
text-align: center;
line-height: 100px;
-moz-transition-property: top,left,width,height;
-webkit-transition-property: top,left,width,height;
-ms-transition-property: top,left,width,height;
-o-transition-property: top,left,width,height;
transition-property: top,left,width,height;
-moz-transition-duration: 1s;
-webkit-transition-duration: 1s;
-ms-transition-duration: 1s;
-o-transition-duration: 1s;
transition-duration: 1s;
}
.go{
height:0;
width:0;
}
注:@Athariがコメントで正しく言及されているように、最も幅広いサポートのためにすべてのブラウザープレフィックスを含める必要があります。(私の最初の答えには、moz / webkitと標準のみが含まれていました)
元の回答
現在のHTML構造で直接行うことはできません。フロートコンセプトはそれをサポートしていません。
しかし、追加のラッパーを購入できるのであれば、問題はありません。
追加のラッパー要素の内容をスライドするだけです。
float
ラッパー要素にコードを配置し、
$(document).ready(function() {
$(".block-wrapper").click(function() {
$(this).siblings().find('.block').slideToggle("slow");
});
});
http://jsfiddle.net/gaby/t8GNP/でのデモ
アップデート#1
クリックした要素を左上と後ろに移動する必要がある場合、CSSでは実際には移動できません。
それらを手動で(JSを介して)配置し、CSSトランジション(またはjquery)を設定し、クリックしたら新しい位置を適用する必要があります。
後で、複数を表示したままにして、位置を変更したい場合があります。
したがって、これと、より多くの状況/レイアウトを処理できる優れたIsotopeプラグインを確認することをお勧めします。