[TIL 6][CSS] Flex - Flex Container
0. 개요
CSS에 flex
가 탄생하기전에는 요소를 정렬할 때 margin
을 사용해서 정렬을 하곤했다. 하지만 margin
을 이용해서 하나하나 정렬을 하려면 뭔가 변경된 사항이 생길때마다 해당 요소에 대한 margin
을 하나하나 바꾼다는것은 여간 귀찮은일이 아닐수 없다.
그러한 귀찮은 작업을 간편하게 해주는것이 flex
이다.
<div class="father">
<div class="box">1</div>
<div class="box">2</div>
<div class="box">3</div>
</div>
기존엔 박스 하나 하나에 비율(%)을 정해줘서 정렬을 하곤 했는데, 만약에 상자가 하나 더 추가되거나 제거되면 비율을 또 다시 맞춰야하는 번거로움이 생긴다. 하지만 flex
를 사용하면 그러한 번거로움을 해소할 수 있다.
1. flex 사용
flex
를 사용하기 위해서는 정렬될 대상에게 flex
속성을 주는것이 아닌 대상의 부모 요소에게 display:flex
속성을 주어야한다.
속성을 주어주면 자식들은 flex-item
이 되고 부모와 함께 flex-container
를 형성한다.
위의 그림 같은 경우는 아래와 같이 .father
에게 flex
속성을 주고 수평 정렬을 설정하는(flex-direction이 row일 경우) justify-content
속성에게 space-between
을 주어주면 위 처럼 정렬이 된다.
<div class="father">
<div class="box">1</div>
<div class="box">2</div>
<div class="box">3</div>
</div>
.father{
display: flex;
justify-content: space-between;
}
.box {
width: 300px;
height: 300px;
background-color: blue;
}
2. Axis
flex
는 Axis
즉, 축에 따라 정렬하는 방법이 결정된다.
뒤에서 후술할 flex-direction
에 따라 축이 변하는데, 기본값으로 flex-direction
은 row
즉 수평으로 설정되어 있다. 수평일 때 수평 정렬을 담당하는 설정값으로 justify-content
가 있고, 수직을 담당하는 align-items
가 있다.
그런데 flex-direction
을 column
즉 수직으로 변경한다면, Main-Axis 축의 변경으로 인하여justify-content
는 수직 정렬, align-items
는 수평 정렬을 담당하게 된다.
flex-direction | justify-content | align-items |
---|---|---|
row | 수평 | 수직 |
column | 수직 | 수평 |
3. flex-direction
위에서 언급한것처럼 flex-direction
이라는 속성이 있다.
row
row
는 좌에서 우로 수평 배치되고, flex-direction
의 기본값이다.
row-reverse
row-reverse
는 row
와 반대로 우에서 좌로 수평 배치된다.
column
column
은 위에서 아래로 수직 배치된다.
column-reverse
column-reverse
는 아래에서 위로 수직 배치된다.
4. flex-wrap
flex-wrap
은 flex-container
의 width보다 flex item
들의 width의 합계가 더 큰 경우 그것을 한줄로 나타낼것인지 혹은 여러줄로 나타낼것인지 지정하는 속성이다.
flex-wrap
의 기본값은 nowrap
인데, 이것을 한 행에 flex item
들을 배치하는 속성이다.
이 때, flex item
들은 flex container
에 들어갈 수 있는 크기로 축소된다.
<div class="father">
<div class="box">1</div>
<div class="box">2</div>
<div class="box">3</div>
<div class="box">4</div>
<div class="box">5</div>
</div>
.father {
display: flex;
width: 500px;
flex-direction: row;
flex-wrap: nowrap;
background-color: red;
}
.box {
width: 100px;
height: 50px;
background-color: rgba(0, 0, 255, 0.3);
text-align: center;
font-size: 30px;
}
위처럼 flex container의 폭이 500px이고 flex item
각각의 폭이 100px인 경우에 하나의 flex item을 추가하면 어떻게 될까?
nowrap
nowrap
의 경우엔 하나의 행을 추가하지 않고 flex container
내에서 해결하기 위해 flex item
의 폭을 100px에서 83.33px로 크기로 줄이고 행의 숫자를 유지한다.
wrap
wrap
은 width의 합계가 flex container
의 width보다 큰 경우, 행을 하나 추가하여 그곳에 flex item
을 배치한다.
5. justify-content
justify-content
는 main-axis를 기준으로 flex item
을 수평 정렬한다.
flex-start
flex container
의 좌측을 기준으로 정렬하고, justify-content
의 기본값이다.
flex-end
flex container
의 우측을 기준으로 정렬한다.
center
flex container
의 중앙에 정렬한다.
space-between
첫번째와 마지막 flex item
은 좌우 끝에 정렬되고 나머지와 균등한 간격으로 정렬된다.
space-around
모든 flex item
이 동일한 규격으로 정렬된다
6.align-items
flex item
을 flex container
의 수직 방향으로 정렬한다
stretch
align-items
의 기본값이며 cross start에서 end까지 꽉찬 높이를 갖는다
flex-start
cross start의 기준으로 정렬된다
flex-end
cross end의 기준으로 정렬된다
center
flex container
의 cross axis의 중앙에 정렬된다
baseline
flex container
의 baseline을 기준으로 정렬된다
Author And Source
이 문제에 관하여([TIL 6][CSS] Flex - Flex Container), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@devpark_0x1c/TIL-6CSS-Flexbox저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)