現在、1〜4列(画面サイズによって異なります)のレスポンシブグリッドレイアウトを作成しようとしています。これらの要素の一部は他の要素よりも高いため、フローティングではなく絶対配置を使用しています。これは pinterest に少し似ていると言えると思いますが、列の幅は固定されておらず、各ボックスの比率は 3.5:2 または 3.5:4 です。つまり、各ボックスの高さが異なる場合があります。
列をレイアウトし、ボックスのサイズが正しく機能するようになりました。次の問題は、各ボックスを最後のボックスの下に配置できることです。
各ループがいくつかありますが、ここで作業を行う必要があります。
for(i=0; i<= col; i++){
$('.card:nth-child(' + col + 'n+' + i + ')').each(function(col){
$(this).css({left: (cardW + cardM)*(i-1) + "px"}).html(i);
});
}
したがって、これが行うことは、列の数に応じて、すべてを見つけてnth-child
で水平に配置することleft
です。
これは完全に正常に機能しています。問題は、すべての要素 ( であるposition:absolute;
) が画面の上部に固定されていることです。
ここで、これらの特定の要素をそれぞれ繰り返し処理し、その前に要素の高さを追加する必要があります。
各要素にインデックスを付けようとしましたが、クラスを何にも追加したくありません。ここで例を見ることができますが、現在何も機能していません。
これをコードに追加しました:
var index = $(this).length;
console.log(index);
そして、私1
は次のようなものではなく、毎回取得します5
その各ループ内のすべての要素にインデックスを付ける1
と、インデックス番号としてのみ取得され、最後の要素の高さを見つける方法がわかりません。
これが意味をなさない場合はコメントしてください。
アップデート
私はそれを理解し、数学を働かせました。以下の回答からインデックス番号の使用方法を学習したおかげで、コードに追加されました。
for(i=0; i<= col; i++){
var nthCard = $('.card:nth-child(' + col + 'n+' + i + ')')
nthCard.each(function(idx){
nthCard.css({left: (cardW + cardM)*(i-1) + "px"});
if(idx > 0){
var prevC = nthCard.eq(idx-1);
var prevT = parseInt(prevC.css("top").replace("px", ""));
var prevH = parseInt(prevC.css("height").replace("px", ""));
var prevM = parseInt(prevC.css("margin-top").replace("px", ""));
console.log(prevT + " " + prevH + " " + prevM + " = " + (prevT + prevH + prevM));
nthCard.eq(idx).css({top: (prevT + prevH + prevM) + "px"});
}
});
}