Flexbox 당면 과제 및 한계
문제는 플렉스 아이템 그룹을 중앙에 놓고 랩에 왼쪽 정렬하는 것입니다. 그러나 행당 고정 된 수의 상자가 있고 각 상자가 고정 너비 인 경우를 제외하고는 현재 flexbox에서는 불가능합니다.
질문에 게시 코드를 사용하여, 우리는 현재 플렉스 용기 (랩하는 새로운 플렉스 컨테이너 만들 수 있습니다 ul
우리가 중심을 허용 것) ul
과를 justify-content: center
.
그런 다음 플렉스 항목 ul
왼쪽 정렬 할 수 있습니다 justify-content: flex-start
.
#container {
display: flex;
justify-content: center;
}
ul {
display: flex;
justify-content: flex-start;
}
이렇게하면 왼쪽으로 정렬 된 플렉스 항목의 중앙 그룹이 생성됩니다.
이 방법의 문제점은 특정 화면 크기에서의 오른쪽에 간격이 생겨 ul
더 이상 중앙에 나타나지 않는다는 것입니다.
이것은 플렉스 레이아웃 (실제로는 일반적으로 CSS)에서 컨테이너가 다음과 같기 때문에 발생합니다.
- 요소가 언제 래핑되는지 알지 못합니다.
- 이전에 점유 한 공간이 현재 비어 있다는 것을 알지 못합니다.
- 더 좁은 레이아웃을 축소하기 위해 너비를 다시 계산하지 않습니다.
오른쪽에있는 공백의 최대 길이는 컨테이너가있을 것으로 예상했던 플렉스 항목의 길이입니다.
다음 데모에서 창 크기를 가로로 조정하면 공백이왔다 갔다하는 것을 볼 수 있습니다.
데모
보다 실용적인 접근
Flexbox inline-block
및 미디어 쿼리를 사용하지 않고도 원하는 레이아웃을 얻을 수 있습니다. .
HTML
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
</ul>
CSS
ul {
margin: 0 auto;
width: 1200px;
padding-left: 0;
font-size: 0;
}
li {
display: inline-block;
font-size: 18px;
list-style-type: none;
width: 150px;
height: 50px;
line-height: 50px;
margin: 15px 25px;
box-sizing: border-box;
text-align: center;
}
@media screen and (max-width: 430px) { ul { width: 200px; } }
@media screen and (min-width: 431px) and (max-width: 630px) { ul { width: 400px; } }
@media screen and (min-width: 631px) and (max-width: 830px) { ul { width:600px; } }
@media screen and (min-width: 831px) and (max-width: 1030px) { ul { width: 800px; } }
@media screen and (min-width: 1031px) and (max-width: 1230px) { ul { width: 1000px; } }
위의 코드는 다음과 같이 왼쪽 정렬 된 자식 요소가있는 수평 중앙 컨테이너를 렌더링합니다.
데모
다른 옵션