FLEX 레이아웃 익히기

  1. 기존에 DIV 요소는 줄바꿈이 되어 수직으로 배치가 되는데, 수평적으로 배치한다.
  2. 자식을 부모 기준 가운데 정렬을 한다 

위 예시와 같이 요소들을 마음대로 배치하기 위해서 옛날에는 float  display 속성(table, inline-block) 등을 사용했습니다.

그러나 요새는 레이아웃을 쉽게 배치할 수 있는 Flex 라는 친구가 대세가 되었습니다. 

우리가 앞으로 배울 웹, 앱에서는 대부분의 요소를 Flex로 배치할 것이므로 정말 중요할 것이다.

만약 비주얼스튜디오가 잘 작동하지 않는다면

 

JS Bin

Sample of the bin:

jsbin.com

이곳에 들어가면 프로그램 없이 학습할 수 있습니다.

 

 

1. Flex 기본

Flex의 핵심은 Container와 Item입니다. Container(부모)의 첫째 자식이 되는 Item들을 Flex를 통해서 쉽게 정렬할 수 있습니다.

(설명 잘 해주는 링크 : https://heropy.blog/2018/11/24/css-flexible-box/)

기본 코드

<html>
    <head>
        <style>
            .parent {
                background-color: aqua;
            }

            .child {
                width: 100px;
                height: 100px;
                background-color: blue;
								margin-right: 8px;
            }
        </style>
    </head>

    <body>
        <div class="parent">
            <div class="child">
                자식
            </div>
            <div class="child">
                자식
            </div>
            <div class="child">
                자식
            </div>
				</div>
    </body>

</html>

2. 컨테이너(부모) 속성

flex-direction을 통해 기준선을 설정합니다. row는 수평으로, column은 수직으로 정렬합니다.

.parent {
	display: flex;
	**flex-direciton: column;** 
}

justify-content

아이템 정렬 방향(by flex-direction)과 같은 방향으로 아이템의 여백을 관리할 때 설정합니다.

flex-direciton이 row이면 수평으로, flex-direction이 column이면 수직으로 배치됩니다.

기본 값은 flex-start 입니다.

.parent {
	display: flex;
	**justify-content: center;**
}

align-items(수직 방향으로 관리)

아이템 정렬 방향(by flex-direction)과 수직 방향으로 아이템의 여백을 관리할 때 설정합니다.

flex-direciton이 row이면 수직으로, flex-direction이 column이면 수평으로 배치됩니다.

기본 값은 stretch 입니다.

.parent {
	display: flex;
	**align-items: flex-start;** 
}

flex-wrap

아이템이 컨테이너를 넘어섰을 때 어떻게 처리할 것인지 설정합니다. 기본 값은 nowrap 으로 부모의 크기(너비 or 높이)를 기준으로 자식들이 알아서 공간을 나눠서 나열됩니다. 즉 줄바꿈이 일어나지 않는 거죠.

많은 상품 아이템들을 보여줘야 할 때 flex-wrap에 wrap을 설정하면 알아서 줄바꿈이 됩니다.

.parent {
	display: flex;
	**flex-wrap: wrap; /*nowrap(기본), wrap ... */**
}

3. 아이템(자식) 속성

flex-basis

자식의 최소 너비를 설정할 때 사용합니다(수직정렬일 때는 높이가 되겠죠?)

기본 값은 auto입니다.

f

lex-grow

Container에 여백이 생겼을 때 아이템이 어떻게 영역을 차지할지 설정합니다. 다른 아이템들과 비교해서 해당 비율로 여백을 가져갑니다.

기본 값은 0입니다.

flex-shrink

Container가 자식들이 차지하는 공간보다 줄어들었을 때 너비를 어떤 비율로 줄일지 정합니다. 다른 아이템들과 비교해서 해당 비율로 줄어들게 됩니다.

 

기본 값은 1입니다

(실제로 flex-shrink는 계산이 복잡해서 많이 사용하지는 않습니다)

위 세가지 요소를 flex 라는 하나의 속성으로 요약해서 표현하곤 합니다.

flex: 증가너비 감소너비 기본너비; 
/*만약 해당 값들이 생략되면 기본 값이 적용됨*/
.child {
	flex: 1 1 20px /*증가너비 감소너비 기본너비*/
	flex: 1; /*증가너비만 적용되고 감소너비(1), 기본너비(auto)는 기본값으로 적용됨 */
	flex: 1 1; /*증가너비, 감소너비가 적용됨*/
	flex: 1 30px; /*증가너비, 기본너비가 적용됨*/
}
.child {
	flex: 1 1 20px /*증가너비 감소너비 기본너비*/
	flex: 1; /*증가너비만 적용되고 감소너비(1), 기본너비(auto)는 기본값으로 적용됨 */
	flex: 1 1; /*증가너비, 감소너비가 적용됨*/
	flex: 1 30px; /*증가너비, 기본너비가 적용됨*/
}

+ Recent posts