複数列形式でユーザーに表示されるメニュー システムを構築しています。CSS3のcolumn-countプロパティを使用すると、90% の精度が得られますが、Chrome での配置に問題があります。
メニューは比較的シンプルです。
- column-count プロパティによって複数の列に分割された順序付けられていないリスト
- 列は順番に入力する必要があるため、column-fill: auto
- メニュー項目はリスト項目として表されます
- 各リスト項目にはクリック可能なアンカー タグがあり、display: ブロックを介して完全に拡張されます
私が抱えている配置の問題は、各リスト項目の上枠と背景色で最も顕著です。Firefox では、リスト項目は常に各列にきれいに配置され、前/次の列ににじみ出すことはありません。Chrome では、整列はクラップシュートであり、存在するリスト項目の数とパディング/マージンのプロパティによって異なります。
簡単なテスト ケースのコードをここに投稿しました: http://pastebin.com/Ede3JwdG
問題はすぐに明らかになるはずです。Chrome では、2 番目の列の最初のリスト項目が最初の列に戻ってしまいます。リスト項目を削除 (クリック) すると、配置がさらに崩れることがわかります。
リスト項目のパディング/マージンを微調整しようとしましたが、うまくいきませんでした: Chrome には、複数列のレイアウトでコンテンツをフローする方法に欠陥のあるアルゴリズムがあるようです。
列数を完全に捨てなかった主な理由 (手動生成/Columnizer などを支持して) は、メニュー システムにも複数のサブメニューにわたるドラッグ アンド ドロップ機能が含まれており、メニュー データが配置されているためです。まとまりのあるリストベースの階層により、クリーンなコードが作成されます。
Chrome で配置の問題を修正する方法はありますか、それとも今のところ列数をあきらめるべきですか?
追加した:
- jsFiddle プロトタイプ: http://jsfiddle.net/VXsAU/
- JS Bin プロトタイプ: http://jsbin.com/ebode5/