Я працюю над вкладеним макетом флексокса, який повинен працювати наступним чином:
Зовнішній рівень ( ul#main
) - це горизонтальний список, який повинен розширюватися праворуч, коли до нього додається більше елементів. Якщо вона зростає занадто великою, має бути горизонтальна смуга прокрутки.
#main {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
overflow-x: auto;
/* ...and more... */
}
Кожен елемент цього списку ( ul#main > li
) має заголовок ( ul#main > li > h2
) та внутрішній список ( ul#main > li > ul.tasks
). Цей внутрішній список є вертикальним і повинен загорнутись у стовпці за потреби. При загортанні в більше стовпців його ширина повинна збільшуватися, щоб звільнити більше предметів. Це збільшення ширини має застосовуватися також до елемента, що містить зовнішній список.
.tasks {
flex-direction: column;
flex-wrap: wrap;
/* ...and more... */
}
Моя проблема полягає в тому, що внутрішні списки не згортаються, коли висота вікна стає занадто маленькою. Я намагався багато підробляти всі властивості flex, намагаючись ретельно дотримуватися вказівок CSS-Tricks , але не пощастило.
Цей JSFiddle показує, що я маю досі.
Очікуваний результат (що я хочу) :
Фактичний результат (що я отримую) :
Старіший результат (що я отримав у 2015 році) :
ОНОВЛЕННЯ
Після деякого розслідування це починає виглядати як більша проблема. Усі основні браузери поводяться однаково , і це не має нічого спільного з тим, щоб мій гніздовий дизайн вкладений. Навіть простіші розкладки стовпців у флексі відмовляються збільшувати ширину списку при загортанні елементів.
Цей інший JSFiddle наочно демонструє проблему. У поточних версіях Chrome, Firefox та IE11 всі елементи завершуються правильно; висота списку збільшується в row
режимі, але його ширина в column
режимі не збільшується . Крім того, немає жодного негайного перезарядження елементів при зміні висоти column
режиму, але він є в row
режимі.
Однак офіційні характеристики (дивіться конкретно на прикладі 5), схоже, вказують на те, що я хочу зробити.
Чи може хтось вирішити цю проблему?
ОНОВЛЕННЯ 2
Після багатьох експериментів з використанням JavaScript для оновлення висоти та ширини різних елементів під час подій зміни розміру я прийшов до висновку, що це занадто складно і занадто багато проблем, щоб спробувати вирішити його таким чином. Крім того, додавання JavaScript безумовно порушує модель flexbox, яку слід підтримувати максимально чисто.
Поки що я повертаюсь назад overflow-y: auto
замість того, flex-wrap: wrap
щоб внутрішній контейнер прокручувався вертикально при необхідності. Це не дуже, але це один шлях вперед, що принаймні не надто порушує корисність.
column wrap
не розширює його ширину при обгортанні. Для отримання додаткової інформації див. Code.google.com/p/chromium/isissue/detail?id=247963