Столбец-счетчик УСБ автоматически, когда Макс-высота фиксируется
Я хочу добиться компоновки, в которой элемент (в моем случае a <ul>
) расширяется до 2 (или более) столбцов, когда высота достигает определенного предела.
Я попытался сделать это, установив max-height
, как было предложено здесь С column-count
и column-width
, установленными в auto
через columns
(я попытался установить их отдельно тоже, то же самое поведение).
column-count
на фиксированное целое число, это работает и балансирует элементы, но это не динамично, как мне нужно. (Если у меня есть только 2 элемента, я не хочу создавать для них 2 столбца).
Есть ли способ зафиксировать высоту, и столбцы автоматически добавляются, когда высота не достаточна для размещения всех элементов?
ul#list {
font-family: sans-serif;
list-style: none;
background: #dddddd;
max-height: 200px;
columns: auto auto;
-webkit-columns: auto auto;
-moz-columns: auto auto;
/** This works, but fixes the columns to 2, which is not what I want.
columns: 2 auto;
-webkit-columns: 2 auto;
-moz-columns: 2 auto;
*/
column-gap: 10px;
-webkit-column-gap: 10px;
-moz-column-gap: 10px;
column-rule: 1px solid black;
-webkit-column-rule: 1px solid rgba(100, 30, 30, 0.4);
-moz-column-rule: 1px solid rgba(100, 30, 30, 0.4);
}
li {
height: 20px;
padding: 2px;
}
<div id="outer">
<ul id="list">
<li>Item #1</li>
<li>Item #2</li>
<li>Item #3</li>
<li>Item #4</li>
<li>Item #5</li>
<li>Item #6</li>
<li>Item #7</li>
<li>Item #8</li>
<li>Item #9</li>
<li>Item #10</li>
<li>Item #11</li>
<li>Item #12</li>
</ul>
</div>
1 ответ:
Прежде всего, чтобы заставить работать столбцы CSS , необходимо задать
column-width
илиcolumn-count
. Столбцы CSS не будут работать, если вы не установите ни один из них.Если я правильно понимаю, вам нужно использовать свойство column-fill. К сожалению, сейчас его поддерживает только Firefox. Проверьте этот фрагмент кода (только Firefox ).
ul#list { font-family: sans-serif; list-style: none; background: #dddddd; max-height: 200px; /* Works only in Firefox! */ -moz-columns: 100px auto; -moz-column-gap: 10px; -moz-column-rule: 1px solid rgba(100, 30, 30, 0.4); -moz-column-fill: auto; } li { height: 20px; padding: 2px; }
<div id="outer"> <ul id="list"> <li>Item #1</li> <li>Item #2</li> <li>Item #3</li> <li>Item #4</li> <li>Item #5</li> <li>Item #6</li> <li>Item #7</li> <li>Item #8</li> <li>Item #9</li> <li>Item #10</li> <li>Item #11</li> <li>Item #12</li> </ul> </div>
Я думаю, вы могли бы использовать flex в вашем случае. Видеть пример :
ul#list { font-family: sans-serif; list-style: none; background: #dddddd; height: 200px; display: -webkit-flex; display: flex; -webkit-flex-flow: column wrap; flex-flow: column wrap; } li { height: 20px; padding: 2px; }
<div id="outer"> <ul id="list"> <li>Item #1</li> <li>Item #2</li> <li>Item #3</li> <li>Item #4</li> <li>Item #5</li> <li>Item #6</li> <li>Item #7</li> <li>Item #8</li> <li>Item #9</li> <li>Item #10</li> <li>Item #11</li> <li>Item #12</li> </ul> </div>