CSS auto column-count при фиксированной максимальной высоте
Я хочу достичь макета, где элемент (в моем случае a <ul>
) расширяется до 2 (или более) столбцов, когда высота достигает определенного предела.
так, например, если высота достаточна только для 3 элементов, и у меня есть 5, 4-й и 5-й элемент идут во второй столбец, который создается только при необходимости.
Я попытался сделать это, установив 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 не работает если вы не установили его.
если я правильно понял, вам нужно использовать собственность. К сожалению, только 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>
Я думаю, вы могли бы использовать гибкий график работы в вашем случае. См.пример:
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>