Правильный способ сделать это с помощью свойства break-inside CSS :
.x li {
break-inside: avoid-column;
}
К сожалению, ни один браузер в настоящее время не поддерживает это.С Chrome я мог использовать следующее, но я не мог заставить что-либо работать для Firefox ( См. Ошибку 549114 ):
.x li {
-webkit-column-break-inside: avoid;
}
Обходной путь, который вы можете сделать для Firefox, еслинеобходимо обернуть ваш неразрывный контент в таблицу, но это действительно, действительно ужасное решение, если вы можете избежать этого.
ОБНОВЛЕНИЕ
В зависимости от ошибкиВ упомянутом выше отчете Firefox 20+ поддерживает page-break-inside: avoid
как механизм, позволяющий избежать разрывов столбцов внутри элемента, но приведенный ниже фрагмент кода демонстрирует, что он по-прежнему не работает со списками:
.x {
-moz-column-count: 3;
-webkit-column-count: 3;
column-count: 3;
width: 30em;
}
.x ul {
margin: 0;
}
.x li {
-webkit-column-break-inside: avoid;
-moz-column-break-inside:avoid;
-moz-page-break-inside:avoid;
page-break-inside: avoid;
break-inside: avoid-column;
}
<div class='x'>
<ul>
<li>Number one, one, one, one, one</li>
<li>Number two, two, two, two, two, two, two, two, two, two, two, two</li>
<li>Number three</li>
</ul>
</div>
Как уже упоминалось, вы можете сделать overflow: hidden
или display: inline-block
, но это удалит маркеры, показанные в исходном вопросе.Ваше решение будет зависеть от ваших целей.
ОБНОВЛЕНИЕ 2 Поскольку Firefox предотвращает взлом на display:table
и display:inline-block
, надежное, но несемантическое решение будет заключаться в переносе каждого из них.Перечислите элемент в свой список и примените там правило стиля:
.x {
-moz-column-count: 3;
-webkit-column-count: 3;
column-count: 3;
width: 30em;
}
.x ul {
margin: 0;
-webkit-column-break-inside: avoid; /* Chrome, Safari */
page-break-inside: avoid; /* Theoretically FF 20+ */
break-inside: avoid-column; /* IE 11 */
display:table; /* Actually FF 20+ */
}
<div class='x'>
<ul>
<li>Number one, one, one, one, one</li>
</ul>
<ul>
<li>Number two, two, two, two, two, two, two, two, two, two, two, two</li>
</ul>
<ul>
<li>Number three</li>
</ul>
</div>