文字数が違ったり、写真の大きさが違った場合でも、横のコンテンツの高さをそろえたい。
様々なプラグインがあるが、jQueryのバージョンを変えたりした際に、合わなくなってしまったりしてしまうので、js/jQueryだけでかけないかと考えてみた。
以外と短い行数で書けるものを見つけた!
<ul class="items">
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
</ul>
<style>
.item{
float: left;
width: 300px;
}
<style>
様々なプラグインがあるが、jQueryのバージョンを変えたりした際に、合わなくなってしまったりしてしまうので、js/jQueryだけでかけないかと考えてみた。
以外と短い行数で書けるものを見つけた!
<ul class="items">
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
</ul>
<style>
.item{
float: left;
width: 300px;
}
<style>
<script>
$(function(){
var item = $('.item');
var item = $('.item');
function setHeight(n){
var itemL = item.length;
item.height('auto');
for(var i = 0; i < Math.ceil(itemL / n); i++){
var maxHeight = 0;
for(var j = 0; j < n; j++){
var itemHeight = item.eq(i * n + j).height();
var itemHeight = item.eq(i * n + j).height();
if(itemHeight > maxHeight) {
maxHeight = itemHeight;
}
}
for(var k = 0; k < n; k++){
item.eq(i * n + k).height(maxHeight);
}
}
}
setHeight(3);
});
</script>
例えばこんな感じ。
setHeightという関数は、"nの数字が横に並ぶ数"という条件で動く。
例えば"3"なら、横に3つずつ、4つめが下に折り返し、4列めは10つめのブロックのみの状態。
簡単に解説。
itemというclassを持っている数を数える。
itemの数をnの数で割って、繰り上げした数ループする。(縦に並ぶ列の数。ここでは4)
maxHeightの高さを0に設定する。
その中で、n回ループする。(4列の中の1列で、左からn個)
その中で、もし、maxHeightがそのitemの高さより小さかったら、上書きする。
これをn回繰り返したら、この列のheightにmaxHeightを設置する。
これを列(ここでは4)の回数繰り返す。
レスポンシブなど、可変に対応させる場合。
setHeightの関数を分岐する。
if(winWidth > 1000){
setHeight(3);
}else if(winWidth <= 1000 && winWidth > 768){
setHeight(2);
}else if(winWidth <= 768 ){
item.height('auto');
}
一番狭いとき(横には1つしか並ばず、全て下に並ぶ場合)は、この関数を使う必要がないので、heightはautoに設定する。
関数の最初に"tem.height('auto');"と書いたのは、可変をしたり、クリックした後などに関数を使う場合、設置されたheightではなく、元々のheightを取得するため。
例えばこんな感じ。
setHeightという関数は、"nの数字が横に並ぶ数"という条件で動く。
例えば"3"なら、横に3つずつ、4つめが下に折り返し、4列めは10つめのブロックのみの状態。
簡単に解説。
itemというclassを持っている数を数える。
itemの数をnの数で割って、繰り上げした数ループする。(縦に並ぶ列の数。ここでは4)
maxHeightの高さを0に設定する。
その中で、n回ループする。(4列の中の1列で、左からn個)
その中で、もし、maxHeightがそのitemの高さより小さかったら、上書きする。
これをn回繰り返したら、この列のheightにmaxHeightを設置する。
これを列(ここでは4)の回数繰り返す。
レスポンシブなど、可変に対応させる場合。
setHeightの関数を分岐する。
<script>
$(window).on("load resize",(function(){
var item = $('.item');
var item = $('.item');
function setHeight(n){
・・・
}
var winWidth = $(window).width();・・・
}
if(winWidth > 1000){
setHeight(3);
}else if(winWidth <= 1000 && winWidth > 768){
setHeight(2);
}else if(winWidth <= 768 ){
item.height('auto');
}
});
</script>
このような感じ。一番狭いとき(横には1つしか並ばず、全て下に並ぶ場合)は、この関数を使う必要がないので、heightはautoに設定する。
関数の最初に"tem.height('auto');"と書いたのは、可変をしたり、クリックした後などに関数を使う場合、設置されたheightではなく、元々のheightを取得するため。