✨ 1분코딩 사이트를 보고 정리한 글입니다.
<div class="container">
<div class="item">helloflex</div>
<div class="item">abc</div>
<div class="item">helloflex</div>
</div>
부모 요소인 div.container를 플렉스 컨테이너라고 부르고,
자식 요소인 div.item을 플렉스 아이템이라고 부른다.
👉🏻 컨테이너는 Flex의 영향을 받는 전체 공간이고, 각각의 아이템이 특정 형태로 배치된다.
컨테이너에 flex를 적용하는 것이 시작이다.
display를 flex로 하게되면 플렉스 아이템들은 가로 방향으로 배치되고, 자신의 width만큼만 공간을 차지하게 된다.
플렉스 아이템의 height는 컨테이너의 height만큼 늘어난다. ( 요런 컬럼 레이아웃 만들 때 유용 )
inline-flex?
inline-block과 동일하게 동작한다고 생각하면 된다.
아이템들이 배치된 방향의 축을 메인축(오뎅꼬치), 메인축과 수직인 축을 수직축이라고 한다.
.container {
flex-direction: row; -가로
/* flex-direction: column; */ -세로
/* flex-direction: row-reverse; */ -역순 가로
/* flex-direction: column-reverse; */ -역순 세로
}
컨테이너가 아이템을 더 담을 공간이 없을 때, 줄바꿈을 어떻게 할지 결정해주는 속성이다.
.container {
flex-wrap: nowrap; -삐져나감
/* flex-wrap: wrap; */ - 아랫줄로 넘김
/* flex-wrap: wrap-reverse; */ - 윗줄로 넘김
}
.container {
flex-flow: row wrap;
/* 아래의 두 줄을 줄여 쓴 것 */
/* flex-direction: row; */
/* flex-wrap: wrap; */
}
정렬
“justify”는 메인축(오뎅꼬치) 방향으로 정렬
“align”은 수직축(오뎅을 뜯어내는) 방향으로 정렬
.container {
justify-content: flex-start; -아이템을 시작점으로 정렬
/* justify-content: flex-end; */ -아이템을 끝점으로 정렬
/* justify-content: center; */ -아이템을 가운데로 정렬
/* justify-content: space-between; */ -아이템 사이에 균일한 간격
/* justify-content: space-around; */ -아이템 둘레에 균일한 간격
/* justify-content: space-evenly; */ -아이템 사이와 양끝에 균일한 간격
}
.container {
align-items: stretch;
-아이템이 수직축 방향으로 끝까지 쭉 늘어남
/* align-items: flex-start; */
-아이템이 시작점에 맞춰 본인 높이에 맞도록 정렬
-천장에 붙어있는 모습
/* align-items: flex-end; */
-아이템이 끝점에 맞춰 본인 높이에 맞도록 정렬
-바닥에 떨어진 모습
/* align-items: center; */
-아이템이 중앙에 맞춰 본인 높이에 맞도록 정렬
/* align-items: baseline; */
- 텍스트 베이스라인 기준으로 정렬
- ex) 3o.AB@! : 각자 높이가 다르지만 베이스라인에 맞게 정렬
}
flex-wrap: wrap;
일때 아이템 행이 2줄 이상일때 수직축 방향 정렬을 결정하는 속성.container {
flex-wrap: wrap;
align-content: stretch;
/* align-content: flex-start; */
/* align-content: flex-end; */
/* align-content: center; */
/* align-content: space-between; */
/* align-content: space-around; */
/* align-content: space-evenly; */
}
.item {
flex-basis: auto; /* 기본값 */
/* flex-basis: 0; */
/* flex-basis: 50%; */
/* flex-basis: 300px; */
/* flex-basis: 10rem; */
/* flex-basis: content; */
}
flex-basis: 100px
로 설정 시 100px을 넘는 요소는 그대로 유지됨width: 100px
로 설정 시 100px를 넘는 요소도 100px로 맞춰짐.item {
flex-grow: 1; - 늘어나서 빈 공간 채움
/* flex-grow: 0; */ /* 기본값 */
}
/* 1:2:1의 비율로 세팅할 경우 */
.item:nth-child(1) { flex-grow: 1; }
.item:nth-child(2) { flex-grow: 2; }
.item:nth-child(3) { flex-grow: 1; }
.container {
display: flex;
}
.item:nth-child(1) {
flex-shrink: 0;
width: 100px;
}
.item:nth-child(2) {
flex-grow: 1;
}
.item {
flex: 1;
/* flex-grow: 1; flex-shrink: 1; flex-basis: 0%; */
- 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; */
}
.item:nth-child(1) { order: 3; } /* A */
.item:nth-child(2) { order: 1; } /* B */
.item:nth-child(3) { order: 2; } /* C */
- B C A 순서대로 배치된다.
.item:nth-child(2) {
z-index: 1;
transform: scale(2);
}