화면 크기에 따라 레이아웃의 배치나 크기를 조절해야 할 때 편리하게 배치할 수 있도록 하는 속성이다.
flex 레이아웃을 만들기 위한 기본적인 HTML 구조
<div class="container">
<div class="item">hello</div>
<div class="item">nihao</div>
<div class="item">bonjour</div>
</div>
부모 요소인 div.container
를 Flex Container
자식 요소인 div.item
을 Flex Items
display: flex;
: 블록 특성의 flex container를 정의. 블록 요소 같이 수직 쌓임 성향을 가진다. (수직 쌓임은 items가 아닌 container임, 내부 items에는 영향을 주지 않음)
display: inline-flex;
: 인라인 특성의 flex container를 정의. 인라인 요소 같이 수평 쌓임 성향을 가진다. (수평 쌓임은 items가 아닌 container임, 내부 items에는 영향을 주지 않음)
flex-direction과 flex-wrap을 한꺼번에 지정할 수 있는 단축속성이다. flex items의 주 축(main-axis)을 설정하고, items의 여러 줄 묶음(줄 바꿈)도 설정한다.
.container {
flex-flow: column-reverse wrap;
/* flex-direction flex-wrap */
}
flex-direction
: items의 주 축(main-axis)를 설정
row
: 기본값. items를 수평축(좌→우)으로 표시row-reverse
: row의 반대축으로 표시(우→좌)column
: items를 수직축(위→아래)으로 표시column-reverse
: column의 반대축으로 표시(아래→위)flex-wrap
: items의 여러 줄 묶음(줄 바꿈) 여부 (컨테이너가 아이템을 한 줄에 담을 여유 공간이 없을 때 아이템 줄 바꿈 여부)
nowrap
: 기본값. 여러 줄로 묶지 않음(한 줄 표시)wrap
: 여러 줄로 묶음wrap-reverse
: 역 방향으로 여러 줄 묶음 주 축(main-axis)의 정렬 방법
flex-start
: 기본값. items를 시작점(flex-start)으로 정렬.
flex-direction이 row(좌→우)일 때는 왼쪽, column(위→아래)일 때는 위.
flex-end
: items를 끝점(flex-end)으로 정렬
center
: items를 가운데 정렬
space-between
: 시작 item은 시작점에 마지막 item은 끝점에 정렬되고, 나머지는 사이에 균일한 간격으로 고르게 정렬된다.
space-around
: items를 균등한 여백을 포함하여 정렬한다.
교차 축(cross-axis)의 여러 줄 정렬 방법.
flex-wrap
속성을 통해서 item가 여러 줄이고 여백이 있을 경우에만 사용 가능함. 한 줄인 경우에는 작동
stretch
: 기본값. container의 교차 축을 채우기 위해 items를 늘린다.flex-start
: items 시작점으로 정렬flex-end
: items 끝점으로 정렬center
: items 가운데 정렬space-between
: 시작 item은 시작점에 마지막 item은 끝점에 정렬되고, 나머지는 사이에 균일한 간격으로 고르게 정렬된다.space-around
: items를 균등한 여백을 포함하여 정렬한다.교차 축(cross-axis)의 한 줄 정렬 방법
align-items를 사용하려면 align-content 속성을 기본값(stretch)으로 설정해야 된다.
stretch
: 기본값. Container의 교차 축을 채우기 위해 items를 늘린다.flex-start
: items를 각 줄의 시작점으로 정렬flex-end
: items를 각 줄의 끝점으로 정렬center
: items를 가운데 정렬baseline
: items를 문자 기준선에 정렬flex item의 순서
item의 증가 너비 비율
item의 감소 너비 비율
item의 공간 배분 전 기본 너비
flex-grow, flex-shrink, flex-basis를 한 번에 쓸 수 있는 단축 속성.
.item {
flex: 1;
/* flex-grow: 1; flex-shrink: 1; flex-basis: 0%; */
flex: 1 1 auto;
/* flex-grow: 1; flex-shrink: 1; flex-basis: auto; */
flex: 1 500px;
/* flex-grow: 1; flex-shrink: 1; flex-basis: 500px;*/
}
align- items의 item 버전으로, align-items가 전체 아이템의 수직 축 방향 정렬이라면, align-self는 해당 아이템의 수직 축 방향 정렬.
일부 item만 정렬 방법 변경시 align-self 사용
align-items 속성보다 우선한다.
auto
: 기본값. container의 align-items 상속stretch
: 기본값. Container의 교차 축을 채우기 위해 items를 늘린다.flex-start
: items를 각 줄의 시작점으로 정렬flex-end
: items를 각 줄의 끝점으로 정렬center
: items를 가운데 정렬baseline
: items를 문자 기준선에 정렬https://heropy.blog/2018/11/24/css-flexible-box/
https://studiomeal.com/archives/197
heropy님 블로그랑, 1분 코딩 블로그에 flex에 대해서 정리가 잘 되어 있어서 보면서 공부하기 딱 좋았다.
1분 코딩 블로그에서 주 축(main-axis)를 오뎅꼬치라고 생각하면 더 이해가 쉬울 거라고 했는데, 정말 오뎅꼬치라고 생각하니까 이해하는데 도움이 된다.
justify는 주 축(오뎅꼬치) 방향으로 정렬
align은 수직 축(오뎅을 뜯어내는) 방향으로 정렬