중첩 된 flexbox 레이아웃을 작업 중이며 다음과 같이 작동합니다.
가장 바깥 쪽 레벨 ( 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... */
}
내 문제는 창의 높이가 너무 작아지면 내부 목록이 줄 바꿈되지 않는다는 것입니다. CSS-Tricks 의 지침을 꼼꼼하게 따르려고 노력하면서 모든 플렉스 속성을 많이 변경하려고 시도 했지만 운이 없습니다.
이 JSFiddle 은 지금까지 내가 가지고있는 것을 보여줍니다.
예상 결과 (내가 원하는 것) :
실제 결과 (내가 얻은 것) :
이전 결과 (2015 년에 얻은 것) :
최신 정보
약간의 조사가 끝나면 더 큰 문제처럼 보이기 시작합니다. 모든 주요 브라우저는 동일한 방식으로 작동하며 내 flexbox 디자인과 중첩되지 않습니다. 더 간단한 flexbox 열 레이아웃조차도 항목을 줄 바꿈 할 때 목록의 너비를 늘리지 않습니다.
이 다른 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/issues/detail?id=247963 을 참조하십시오.