[CSS] Flex Sizing (flex 크기 변경)

2023. 7. 13. 13:11기술 창고/CSS

728x90
SMALL

이번에는 flex 컨테이너 내의 아이템들의 사이즈를 반응형으로 변경하는 일부 CSS 속성들에 대해 정리하겠습니다.

 

 

기본 Flex 컨테이너 생성

Flex Container

<div class="container">
    <div>
        Home
    </div>
    <div>
        About
    </div>
    <div>
        Contact Us
    </div>
    <div>
        The Best Programmer In The World
    </div>
</div>

 

 

style.css

.container{
    display: flex;
    gap: 10px;
}

.container > *{
    border: 5px solid black;
}

 

우선 테스트해볼 flex 적용 컨테이너를 만들어주었습니다.

해당 컨테이너에는 4개의 각각 다른 내용들이 들어있는 아이템들이 있습니다.

gap 10px을 넣어 사이의 간격을 넣어주었고, border 속성을 통해 외각선을 넣어주었습니다.

flex로 컨테이너를 설정해주었기 때문에 이 상태에서 창을 줄이면 반응형으로 크기가 자동으로 줄어들게됩니다.
또한, 기본적으로 flex 를 설정하게 되면 아이템의 내용에 따라 크기가 자동적으로 가변적이게 적용됩니다.

 

 

 

width 속성

.container > *{
    width: 100px;
    border: 5px solid black;
}

width 속성을 사용하여 이렇게 수동으로 컨테이너 안의 아이템들의 너비를 100px 로 지정해줄 수 있습니다.

 

 

 

flex-basis 속성

.container > *{
    width: 100px;
    flex-basis: 200px;
    border: 5px solid black;
}

width 속성과 마찬가지로 flex-basis 속성을 사용하면 컨테이너 안의 아이템들의 너비를 지정해줄 수 있습니다.
동작 자체는 width와 별반 차이는 없으며, 중요한 것은 width 속성보다 우선순위가 높아 같이 적용하게 되면 width 속성은 무시되고 flex-basis 속성이 적용됩니다.

 

 

max-width 속성

.container > *{
    flex-basis: 200px;
    max-width: 100px;
    border: 5px solid black;
}

max-width를 적용하면 최대의 너비를 지정해줄 수 있습니다.
위의 예시 코드를 보게되면 flex-basis 속성을 적용하여 아이템들의 너비를 200px로 만들어주었는데 max-width를 100px로 지정하였습니다.
이는 최대 너비가 현재 기본으로 설정된 너비보다 작다는 의미인데 이렇게 되면 우선 순위가 max-width가 flex-basis 보다 높기 때문에 아이템들의 너비가 max-width의 100px로 지정되게 됩니다.

그렇다면 flex-basis를 50px로 주게 된다면 어떻게 될까요?

 

.container > *{
    flex-basis: 50px;
    max-width: 100px;
    border: 5px solid black;
}

이 경우 max-width가 100px이고 우선 순위가 높다고는 하지만 기본적인 특성상 최대의 크기를 지정해주는 것이기 때문에 기본적인 처음 크기는 flex-basis의 50px를 따라가게 됩니다.

 

 

 

min-width 속성

min-width의 경우에도 max-width와 동일합니다.
단지 반대의 케이스라고 보면 됩니다.

.container > *{
    flex-basis: 200px;
    min-width: 300px;
    border: 5px solid black;
}

 

flex-basis에 200px을 지정하고 min-width 최소 너비를 300px 로 지정했다면, 최소 너비인 300px을 따라가게 됩니다.

 

 

.container > *{
    flex-basis: 200px;
    min-width: 100px;
    border: 5px solid black;
}

min-width 최소 너비를 100px로 지정했으면, 우선 순위가 높다고 하더라도 최소로 줄일 수 있는 너비를 예약해 놓는 것일 뿐이지 현재 적용될 너비는 flex-basis를 따라가서 200px 의 너비를 부여받게 됩니다.

 

 

flex-grow / flex-shrink 속성

.container > *{
    flex-basis: 200px;
    flex-grow: 0;
    flex-shrink: 0;
    border: 5px solid black;
}

flex-grow와 flex-shrink는 아이템들이 창을 줄였을 때 어떻게 반응될 것인지 좀 더 자세하게 반응할 수 있게끔 해주는 속성입니다.
위와 같이 0으로 지정해주었다면 창을 아무리 줄여도 아이템들의 크기가 줄어들지도 않고 반응하지도 않은 채 창 밖으로 그대로 넘어가게 됩니다.

 

 

.container > *{
    flex-basis: 100px;
    flex-grow: 1;
    flex-shrink: 0;
    border: 5px solid black;
}

flex-grow를 1로 지정했으면 100px로 지정된 아이템들이 공통적으로 동일한 크기로 넓어지면서 창의 왼쪽 끝부터 오른쪽 끝까지 동일한 크기로 채워지게 됩니다.
이 상태에서 창을 줄이면 최대 각 아이템들의 기본 너비인 100px 까지 줄어들면서 그 이상으로 창이 줄어들어질 경우 창을 벗어나게 됩니다.

 

.container > *{
    flex-basis: 100px;
    flex-grow: 0;
    flex-shrink: 1;
    border: 5px solid black;
}

flex-shrink를 1로 지정했으면 아이템들은 100px의 너비를 가진 상태에서 창을 줄이게 될 때, 지정한 최소 너비까지 줄어들게 되고 그 이상으로 줄이게 되면 창을 벗어나게 됩니다.
지금 위의 코드에는 최소 너비를 지정해주지 않았기 때문에 각 아이템들의 내용들의 최소 너비만큼 줄어들고 그 이상 창을 줄이면 벗어나게 됩니다.

 

 

 

.container > *{
    flex-basis: 100px;
    flex-grow: 1;
    flex-shrink: 1;
    border: 5px solid black;
}

만약 두 개 모두 1로 지정하면, 두 개의 특성을 모두 가지게 됩니다.
flex-grow가 1이므로 각 아이템들은 공통적으로 동일하게 창의 최대 너비를 채우게 됩니다.
flex-shrink가 1이므로 각 아이템들의 창을 줄일 때 각 아이템들의 최소 너비까지 줄어들게 되고 그 이상 줄어들면 창을 벗어나게 되는 것입니다.

 

 

.container > *{
    flex: 1 1 100px;
    border: 5px solid black;
}

위에서 일일히 적었던 flex-grow, flex-shrink, flex-basis 를 flex 속성 하나만으로 적용할 수 있습니다.
왼쪽부터 grow, shrink, basis 를 뜻합니다.

 

 

+ flex 크기 변경 속성에 대한 우선 순위

content width (내용의 고유 너비) < width (너비 속성) < flex-basis (flex basis 속성) < min-width/max-width (최소 너비 / 최대 너비)

728x90
반응형
LIST

'기술 창고 > CSS' 카테고리의 다른 글

[CSS] Grid Sizing (레이아웃 크기 변경)  (0) 2023.07.15
[CSS] Grid (레이아웃)  (0) 2023.07.15
[CSS] Flex Layout - 방향 설정  (0) 2023.07.12
[CSS] Flex direction / Flex basis  (0) 2023.06.28
[CSS] Flexbox  (0) 2023.06.27