フレックスボックスを使用してリストアイテムを列に表示しています。アイテムは、特定の高さの後に列を追加し、列を水平に中央に配置し、各列のリストアイテムを左揃えにする必要があります。私はmax-height
を使用してリストの高さを制限し、flex-flow: column wrap
はラッピングカラムを作成し、align-content: center
はカラムを中央に配置します。フレックスカラムは、ラップされたときにのみ中心になります。
私はmulti-columnソリューションがより明白かもしれないことを認識していますが、column-width
またはcolumn-count
を定義したくないので、私はflexboxソリューションを選択しました。アイテムが複数の列に折り返す場合
通報
列は水平方向にのみ集中しています。列が1つだけの場合、列は中央に配置されません。 Windows 10 HomeとMacOS Sierraの両方でChrome 63でこの動作が確認されています。 Firefoxでは、それは私が意図した方法(以下のスクリーンショット)に見えます。
何か不足していますか?
どのようにして列を常にブラウザの横方向に中央に配置することができますか?
.filter_drop {
display: flex;
flex-flow: column wrap;
align-content: center;
list-style: none;
margin: 0;
padding: 0;
max-height: 7em;
border-bottom: 1px solid black;
}
.filter_drop li {
margin: 0 1em 0 0;
line-height: 1.2;
}
<ul class="filter_drop">
<li>One</li>
<li>Two </li>
<li>Three</li>
<li>Four</li>
<li>Five</li>
<li>Six</li>
<li>Seven</li>
<li>Eight </li>
<li>Nine</li>
<li>Ten</li>
<li>Eleven</li>
<li>Twelve</li>
</ul>
<ul class="filter_drop">
<li>One</li>
<li>Two</li>
<li>Three</li>
<li>Four</li>
<li>Five</li>
<li>Six</li>
<li>Seven</li>
</ul>
<ul class="filter_drop">
<li>One</li>
<li>Two</li>
<li>Three</li>
<li>Four</li>
</ul>
<ul class="filter_drop">
<li>One</li>
<li>Two</li>
<li>Three</li>
</ul>
興味のある方/ Oの固定幅を割り当てるwは、_left align_の修正があります:https://jsfiddle.net/gznyyegn/ ...あなたが好きなら、これを回答として投稿することができます。 'translate'はさらに別のFlexboxのバグを克服するために必要です:https://stackoverflow.com/questions/33891709/when-flexbox-items-wrap-in-column-mode-container-does-not-grow-its-width – LGSon
ありがとう@LGSon。興味深いアイデアだが、私は仕事に集中することができなかった(https://jsfiddle.net/gznyyegn/3/)。たぶんあなたはリンクしている問題のために? – showdev
はい、そういうわけではありませんが、要素のうちの1つで幅の広いテキストをチェックしていませんが、完全に動的に動作しないことがわかります。それは、バグを修正したエッジ(バージョン16、フォールスクリエイターアップデート)の監督で働いています:) – LGSon