Aşağıdaki gibi çalışması gereken bir iç içe flexbox düzeni üzerinde çalışıyorum:
En dıştaki seviye ( ul#main
), daha fazla öğe eklendiğinde sağa doğru genişlemesi gereken yatay bir listedir. Çok büyürse, yatay bir kaydırma çubuğu olmalıdır.
#main {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
overflow-x: auto;
/* ...and more... */
}
Bu listenin ( ul#main > li
) her öğesinin bir başlığı ( ul#main > li > h2
) ve bir iç listesi ( ul#main > li > ul.tasks
) vardır. Bu iç liste dikeydir ve gerektiğinde sütunlara sarılmalıdır. Daha fazla sütuna sarılırken, daha fazla öğeye yer açmak için genişliği artmalıdır. Bu genişlik artışı, dış listenin içerdiği öğeye de uygulanmalıdır.
.tasks {
flex-direction: column;
flex-wrap: wrap;
/* ...and more... */
}
Benim sorunum, pencerenin yüksekliği çok küçük olduğunda iç listelerin kaymaması. CSS-Tricks'teki yönergeleri titizlikle takip etmeye çalışırken, tüm esnek özelliklerle çok fazla uğraşmayı denedim , ama şans yok.
Bu JSFiddle şimdiye kadar sahip olduğum şeyi gösteriyor.
Beklenen sonuç (istediğim) :
Gerçek sonuç (ne elde ederim) :
Eski sonuç (2015'te ne aldım) :
GÜNCELLEME
Biraz araştırmadan sonra, bu daha büyük bir konu gibi görünmeye başlıyor. Tüm büyük tarayıcılar aynı şekilde davranır ve flexbox tasarımımın iç içe yerleştirilmesiyle hiçbir ilgisi yoktur. Daha basit flexbox sütun düzenleri bile, öğeler sarıldığında listenin genişliğini artırmayı reddeder.
Bu diğer JSFiddle sorunu açıkça göstermektedir. Chrome, Firefox ve IE11'in mevcut sürümlerinde, tüm öğeler doğru bir şekilde sarılır; listenin yüksekliği row
modda artar , ancak genişliği column
modda artmaz . Ayrıca, bir column
modun yüksekliğini değiştirirken hiçbir elemanın anında yeniden akışı yoktur , ancak row
modda vardır.
Bununla birlikte, resmi özellikler (özellikle örnek 5'e bakın) yapmak istediğim şeyin mümkün olması gerektiğini gösteriyor.
Birisi bu soruna geçici bir çözüm bulabilir mi?
GÜNCELLEME 2
Yeniden boyutlandırma etkinlikleri sırasında çeşitli öğelerin yüksekliğini ve genişliğini güncellemek için JavaScript'i kullanarak çok sayıda denemeden sonra, bu şekilde çözmeye çalışmanın çok karmaşık ve çok fazla sorun olduğu sonucuna vardım. Ayrıca, JavaScript eklemek kesinlikle mümkün olduğunca temiz tutulması gereken flexbox modelini kırıyor.
Şimdilik, overflow-y: auto
yerine geri düşüyorum , flex-wrap: wrap
böylece iç kap gerektiğinde dikey olarak kayıyor. Güzel değil, ancak en azından kullanılabilirliği çok fazla kırmaması bir yol.
column wrap
sarma sırasında genişliğini genişletmemesine neden olan bir hata var. Daha fazla bilgi için code.google.com/p/chromium/issues/detail?id=247963 adresine bakın .