2013-05-23 5 views
11

のdiv にはstackoverflow-tagsのような「タグ」が含まれています。今固定幅のdivでの並べ替えと配置

Tag Container - unwanted

、私を乱す何、Halloタグが最後の行にあることですが、それは最初の行に収まるでしょう。このように:

Tag Container - wanted

要素の順序は無関係です。したがって、並べ替えがオプションになります。

質問:これをどのように達成できますか?私は現在<ul><li></li></ul>構成を使用しています。

CSSウェイが最適な方法ですが、この問題を解決するにはJSまでと思っています。 任意のアイデアをいただければ幸いです:)

UPDATE JSFiddle:彼らはそれらの幅を継承:http://jsfiddle.net/CLj2q/

+0

です。それ以外の場合、データはどこから来ますか? –

+2

コードのフィドルを提供できますか? – Nitesh

+0

となります。こんにちは – Stefan

答えて

5

はそれを手に入れた:jsFiddleは、HTMLは、サーバー側に作成された場合、それはあまりにもあなたのタグのサーバー側を注文する、おそらく最善ですhere

$(function() { 
    $('.as-close').click(function(e) { $(this).parent().remove(); }); 
    DoTagSort(); 
}); 

function DoTagSort() { 

    var TheItems = [], TheHTML = ''; 
    var TheLinks = $('.as-selections').find('li').each(function() { 
     TheItems.push($(this).text().slice(1));   
    }); 

    TheItems.sort(function(a, b) { return b.length - a.length; }); 

    var TheTag = '<li class="as-selection-item"><a class="as-close">×</a>'; 

    while(TheItems.length > 1) { 

     TheHTML = TheHTML + TheTag + TheItems[0] + '</li>'; 
     TheHTML = TheHTML + TheTag + TheItems[TheItems.length - 1] + '</li>'; 

     TheItems.splice(0, 1); 
     TheItems.splice(TheItems.length - 1, 1); 
    } 

    if (TheItems.length) { 
     TheHTML = TheHTML + TheTag + TheItems[0] + '</li>'; 
    } 

    $('.as-selections').html(TheHTML); 
} 

enter image description here

+0

私はあまりにも答えがあるのでこれを言っているだけではありませんが、これは一つのクレイジーな解決策です!問題は、実際には必要がなくても項目を並べ替えることで、2列のリストにしか作用しないということです。 – Bizniztime

+0

@Bizniztime:OPが求めているのは正確です:固定幅で、彼は順序を変えても構いません。タグの幅が1〜2文字であれば、それは奇妙に見えますが、これはタグが通常ついているものではありません。 – frenchie

+0

@frencieはい固定幅です。しかし、幅は何ですか? 1行に最大2つのリスト要素のみが常に収まるのでしょうか? – Bizniztime

1

のタグのコンテナがセット幅、タグ自体はすなわち(ではないと仮定すると、それらのコンテンツから、あなたにそれらを与えることができるのではなく)、CSSの観点から、マークアップの流れを断ち切ったり、並べ替えたりせずに行うことができる膨大な量はありません。

マークアップがサーバー側で生成されている場合は、マークアップをビューにプッシュする前に幅と順序を計算できると確信しています。もしそうでなければ、あなたはJavaScriptを使わずにちょっと立ち往生しています。

注文要件が純粋に外観に基づいている(つまり、機能していない)場合、JavaScriptを使用したスクリーンショットに表示されている標準の浮動小数点表示を向上させる上で害はありません。つまり、JS対応の訪問者は、要素がきちんと整理された状態で「強化された」ビューを取得しますが、JS以外のユーザーは、やや組織的ではないにもかかわらず、完全に機能するタグクラウドを持つことになります。

jQuery MasonryまたはIsotopeは、必要とするものとまったく同じです。

+0

私は、Masonryが問題を解決するかどうかはわかりません。格子状のレイアウトでしか動作しないと思います。 OPが望んでいるのは、すべてのライン上のスペアスペースを決定し、フィッティングエレメントを他の場所から挿入するフィラーアルゴリズムです。 –

+0

私はNielsに同意するのかどうかはわかりませんが、代わりに私の答えに同位体を追加しました。石積みとアイソトープはどちらも、あなたが描いている正確な方法で動作します:正しい幅の要素をつかみ、親の空のスペースに置くアルゴリズム。グリッドレイアウトにはMasonryとIsotopeの両方が最も一般的に使用されています(この例では必要ない高さと幅の計算が含まれています)。しかし、その動作はこのインスタンスで求められるものです。 – johnkavanagh

+0

私はちょうど "私はリンクされたページのスキャンに基づいて"私はよく分からないと言っていた:)それはおそらく大砲でラバーボートを撮影するようですが、フローベースの再転換のために、私はそれらを知らない)、または実装することは非常に複雑ではない。 –

1

これはシェルフソリューションから外れています。そして、Masonryのちょっとしたチート(columnWidth:1に気づく)。

$('.as-selections').masonry({ 
     itemSelector: '.as-selection-item' 
     , columnWidth: 1 }); 

http://jsfiddle.net/D5ud7/1/

私はあなたがこのまたはクランチへの石工のためのより良いHTMLフォームのためのより適切なライブラリを見つけることができると思います。

関連する問題