2017-01-19 11 views
0

css列を使用して項目のリストを3列に配置したいと考えています。特定のアイテムをクリックするとJSを使用して展開しますが、そのときはレイアウトを調整して補正する必要はありません。これは可能ですか?要素が展開されたCSS列

$('.clickme').click(function(){ 
 
    $(this).toggleClass('big'); 
 
});
/* relevant CSS */ 
 
ul{ 
 
    display:block; 
 
    max-width:640px; 
 
    list-style:none; 
 
    margin:0; 
 
    padding:0; 
 
} 
 
.box1 ul{ 
 
    columns: 200px 3; 
 
} 
 
.box1 li{ 
 
    break-inside: avoid; 
 
} 
 
.box2 ul{ 
 
    width: 200px; 
 
    float: left; 
 
} 
 
li{ 
 
    display:block; 
 
    background-color:#555; 
 
    color:white; 
 
    border: 1px solid white; 
 
    padding: 4px; 
 
    min-height:1px; 
 
} 
 

 

 
/* less relevant CSS */ 
 
body{font-family: sans-serif;} 
 
.clickme{ 
 
    transition: min-height .5s; 
 
} 
 
.clickme:hover{ 
 
    background-color:#999; 
 
    cursor: pointer; 
 
} 
 
.clickme.big{ 
 
    min-height:100px; 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> 
 
<div class="box1"> 
 
<h3>I don't want this - when an element expands the other elements rearrange themselves.</h3> 
 
<ul> 
 
\t <li>item</li> 
 
\t <li>item</li> 
 
\t <li>some of these items are longer than others</li> 
 
\t <li>item</li> 
 
\t <li>some of these items are longer than others</li> 
 
\t <li>item</li> 
 
\t <li class="clickme">click me</li> 
 
\t <li>item</li> 
 
\t <li>item</li> 
 
\t <li>some of these items are longer than others</li> 
 
\t <li>item</li> 
 
\t <li>item</li> 
 
</ul> 
 
</div> 
 

 
<div class="box2"> 
 
<h3>This is what I want - when an element expands the other elements stay put. I'm using multiple lists for this though, and I'd like to use just one list if possible.</h3> 
 
<ul> 
 
\t <li>item</li> 
 
\t <li>item</li> 
 
\t <li>some of these items are longer than others</li> 
 
\t <li>item</li> 
 
</ul> 
 
<ul> 
 
\t <li>some of these items are longer than others</li> 
 
\t <li>item</li> 
 
\t <li class="clickme">click me</li> 
 
\t <li>item</li> 
 
</ul> 
 
<ul> 
 
\t <li>item</li> 
 
\t <li>some of these items are longer than others</li> 
 
\t <li>item</li> 
 
\t <li>item</li> 
 
</ul> 
 
</div>

ここで私は列のために使用していCSSです:

.box1 ul{ 
    columns: 200px 3; 
} 

は、ここで説明するcodepenだ - http://codepen.io/anon/pen/YNpJYG

注:これは明らかに少ない理想的ですが、 CSSの列に要素の数に基づいて列を作成することは可能ですサイズ、それは私のために働くことができます。

+0

あなたが提供した例で持っているとして残念ながら、あなたがやりたいための唯一の方法は、複数のリストです。各列に一定数の要素を設定する方法はありません。 – Callum

答えて

2

残念ながら、CSS3の複数列レイアウトではそれぞれの列を編集することができず、高さを手動で編集する方法はありません。

しかし、他のリスト要素を混乱させることなく 'clickme'のコンテンツを表示するために使用できるいくつかのプロパティがあります。列間のスペースを削除するには、 'column-span'を使用して要素をすべての列にまたがるようにし、 'column-gap'を使用します。

$('.clickme').click(function(){ 
 
    $(this).toggleClass('big'); 
 
});
/* relevant CSS */ 
 
ul{ 
 
    display:block; 
 
    max-width:600px; 
 
    list-style:none; 
 
    margin:0; 
 
    padding:0; 
 
} 
 
.box1 ul{ 
 
    -webkit-column-count: 3; 
 
    -moz-column-count: 3; 
 
    column-count: 3; 
 
    -webkit-column-gap: 0px; 
 
    -moz-column-gap: 0px; 
 
    column-gap: 0px; 
 
    -webkit-column-width: 100px; /* Chrome, Safari, Opera */ 
 
    -moz-column-width: 100px; /* Firefox */ 
 
    column-width: 100px; 
 
} 
 
.box1 li{ 
 
    break-inside: avoid; 
 
} 
 

 
li{ 
 
    display:block; 
 
    background-color:#555; 
 
    color:white; 
 
    border: 1px solid white; 
 
    padding: 4px; 
 
    height: 18px; 
 
} 
 

 

 
/* less relevant CSS */ 
 
body{font-family: sans-serif;} 
 
.clickme{ 
 
    transition: height .5s; 
 
    text-align: center; 
 
    -webkit-column-span: all; 
 
    column-span: all; 
 
} 
 
.clickme:hover{ 
 
    background-color:#999; 
 
    cursor: pointer; 
 
} 
 
.clickme.big{ 
 
    height:100px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="box1"> 
 
<ul> 
 
\t <li>wut</li> 
 
\t <li>wut</li> 
 
\t <li>wut</li> 
 
\t <li>wut</li> 
 
\t <li>wut</li> 
 
\t <li>wut</li> 
 
\t <li class="clickme">click me</li> 
 
\t <li>wut</li> 
 
\t <li>wut</li> 
 
\t <li>wut</li> 
 
    <li>wut</li> 
 
\t <li>wut</li> 
 
\t <li>wut</li> 
 
</ul> 
 
</div>

+0

残念ながら、提案してくれてありがとうございます。私はすべての項目がすべての行にまたがる列でなくてはならないので、これは私にとってはうまくいくとは思わないのです。前にこれを指定しないことにも謝罪しますが、いくつかの項目は他の項目よりも長くなる可能性があります。私はこれを説明するためにcodepenを更新しました。 – launchoverit

+0

CSS3のマルチカラムレイアウトは、すべてのカラムに同じ高さが与えられるように要素を自動的に再配置するものです。 残念ながら、私が述べたように、列の高さを編集するプロパティはありません。 あなたが提供した2番目のソリューションは妥当と思われます。なぜそれはあなたに合っていないのですか? –

+0

主にナビゲーションメニューなので、アクセシビリティが複数のリストに分割されていると悪いです。また、このような基本的なレイアウトにはJSを使用しない方がよいでしょう。 – launchoverit

関連する問題