CSS 중 가장 애정하고 애용하는 Flex를 가장 첫 주제로 가져왔다.
레이아웃을 담당하는 Float, Flex, Grid 중 Flex를 가장 좋아하는 이유는 무엇보다 편하고 직관적이다.
["Can I use?" 검색 결과]
레이아웃을 담당하는 만큼 주로 div
처럼 안에 엘리먼트를 여러개 가지고 있는 부모 엘리먼트에 지정하는 경우가 많다.
<html>
<body>
<div class="box-container">
<div class="item" style="background-color: lightblue;">A<br>A</div>
<div class="item" style="background-color: lightcoral;">BBBB</div>
<div class="item" style="background-color: lightgreen;">CCCCCCCCC</div>
</div>
</body>
</html>
div의 display 기본 값은 block이므로 기본적으로 가로 영역을 다 채우고 다음 요소는 다음 줄에 배치된 것으로 보인다.
.box-container {
display: flex;
}
flex를 적용시키면 width와 height가 다음과 같이 자동으로 지정된다.
주축이 행(가로)일 경우 - 기본
이는 주축이 행(가로)일 때의 경우이며, 주축이 열(세로)일 경우에는 반대로된다.
주축이 열(세로) 경우
다음은 display:flex;
를 지정했을 경우 flex와 관련된 다른 속성들의 기본값이다.
하나씩 천천히 살펴보자!
.box-container {
display: flex;
flex-direction: row;
justify-content: flex-start;
align-items: strech;
flex-wrap: nowrap;
flex-flow: row nowrap;
}
flex-direction
flex-direction
은 주축을 정하는 역할을 한다.
속성 값 명에서 추측할 수 있듯
배치하는 것을 의미한다.
flex-wrap
부모 엘리먼트 크기보다 자식 아이템들이 차지하는 영역이 클 때 줄바꿈을 할지 말지 결정한다.
flex-flow
flex-direction
속성과 flex-wrap
속성을 flex-flow
라는 축약 속성으로 합칠 수 있다.
.box-container {
display: flex;
flex-flow: row nowrap;
}
justify-content
flex-direction
에서 주축을 결정하면 justify-content
는 주축의 방향 정렬을 결정한다.
align-items
flex-direction
에서 주축을 결정하면 align-items
는 주축의 교차축의 방향 정렬을 결정한다.
align-content
flex-wrap
이 wrap
상태에서 교차축의 방향 정렬을 결정한다.
flex-basis
아이템의 기본 크기를 결정한다.
주축이 행(가로)일 때 width, 주축이 열(세로)일 때 height
* flex-grow 속성의 값이 0인 경우에만 flex-basis 속성의 값이 유지
* width와 flex-basis를 동시에 적용하는 경우, flex-basis가 우선
* flex item이 많을 경우 width가 정확한 크기를 보장하지 않습니다.
* flex-basis 사용하지 않을 경우 width 대신 min-width 또는 max-width를 쓸 수 있습니다.
flex-grow
아이템이 flex-basis의 값보다 커질 수 있는지를 결정
flex-grow
값이 양수일 경우 flexbox 안 아이템이 일정 비율로 채우도록 늘어나도록 하는 속성 (기본값 0)
flex-grow
이 0 또는 1일 경우
flex-grow
이 다양한 양수 값일 경우
출처: 이번에야말로 CSS Flex를 익혀보자
flex-shrink
아이템이 flex-basis의 값보다 작아질 수 있는지를 결정
flex
flex-grow
, flex-shrink
속성과 flex-basis
속성을 flex
라는 축약 속성으로 합칠 수 있다.
.item {
flow: 1 1 auto;
/* 기본값 flex: 0 1 auto; */
}
align-self
아이템의 교차축 방향 정렬을 결정하며, 속성값은 align-items
와 동일하며, align-items
설정을 상속받는다. 마찬가지로 기본값은 auto이다.
order
순서를 바꿀 수 있는 속성
.item1 {
order: 2;
}
.item2 {
order: 1;
}