고래씌

[CSS] 4-2. FlexBox ② (flex-container 전용 속성) 본문

Front-End/CSS

[CSS] 4-2. FlexBox ② (flex-container 전용 속성)

고래씌 2023. 11. 3. 16:46

1. flex-container 전용 속성

1) flex-direction : maxi axis(중심축) 방향, 시작 / 끝 지정

    - row(기본값)
    - row-reverse
    - colum
    - colum-reverse


2) flex-wrap : item이 한줄/여러 줄로 배치되게 지정

    - nowrap(기본값) : 한줄로 배치, item의 크기가 변경 및 훼손될 수 있음
    - wrap : 여러줄로 배치
    - wrap-reverse : 여러줄로 배치(cross axis 방향 반대)

 


3) flex-flow : flex-direction + flex-wrap;

4) justify-content : main axis(중심축)을 기준으로 item 정렬

 


5) align-content : cross axis(교차축)을 기준으로 포장된 item들을 정렬
                            -> 조건 : flex-wrap이 wrap 또는 wrap-reverse이어야 함


   - flex-start : 축 시작 지점 기준으로 정렬
   - flex-end : 축 끝 지점 기준으로 정렬
   - center : 축 가운데 정렬


   - space-around : item에 축 방향 양쪽으로 일정 크기 공간을 배치
   - space-evenly : item에 축 방향 양쪽으로 모두 동일한 크기의 공간을 배치
   - space-between : space-evenly에서 시작과 끝부분은 flex-container에 붙여서 배치

6) align-items : 교차축을 기준으로 item을 배치

   - stretch(기본값) : item을 교차축 방향으로 flex-container만큼 늘림. 단, item에 크기속성이 없어야한다.
   - flex-start : 교차축 시작 지점에 배치
   - flex-end : 교차축 끝 지점에 배치
   - center : 가운데 지점에 배치
   - baseline : item에 작성된 내용이 한 직선에 배치될 수 있도록 item을 교차축 방향으로 알맞게 배치한다.

 


2. flex-wrap: wrap | wrap-reverse; 배치 방법

 

■ HTML

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>FlexBox2</title>
    <link href="../css/flex-style2.css" rel="stylesheet">
    <link href="../css/style.css" rel="stylesheet">
</head>
<body>

    <h1>flex-wrap : wrap | wrap-reverse; 배치 방법</h1>

    <div class="flex-container">
        
        <!-- (.item.item${item$}*9)*2 -->
        <div class="item item1">item1</div>
        <div class="item item2">item2</div>
        <div class="item item3">item3</div>
        <div class="item item4">item4</div>
        <div class="item item5">item5</div>
        <div class="item item6">item6</div>
        <div class="item item7">item7</div>
        <div class="item item8">item8</div>
        <div class="item item9">item9</div>

        <div class="item item1">item1</div>
        <div class="item item2">item2</div>
        <div class="item item3">item3</div>
        <div class="item item4">item4</div>
        <div class="item item5">item5</div>
        <div class="item item6">item6</div>
        <div class="item item7">item7</div>
        <div class="item item8">item8</div>
        <div class="item item9">item9</div>
    </div>

</body>
</html>

 

 

■ style.css

div{
    border: 1px solid black;
    box-sizing: border-box;
}

.item{
    width: 75px;
    height: 75px;
}

.item1{background-color: red;}
.item2{background-color: orangered;}
.item3{background-color: orange;}
.item4{background-color: yellow;}
.item5{background-color: yellowgreen;}
.item6{background-color: green;}
.item7{background-color: lightblue;}
.item8{background-color: blue;}
.item9{background-color: violet;}

 

 

■ ① flex-style2.css 파일

.flex-container{
    height: 75vh; /* 현재 화면의 75%만큼의 비율 */

    /* 
        vh : viewport height(현재 화면 높이)
        viewprot : 브라우저 또는 기기 화면
    */

    display: flex;
}

 

☞ height: 75vh

=> 현재 화면에 75%만큼의 비율을 보여주겠다는 의미. 화면을 축소하던 확대하던 그 비율만큼 자동으로 변형되어 보여줌

 

☞ display : flex; 

=> item 박스들을 상단에 고정시킴

 

 

 

■ ② flex-style2.css 파일(flex-wrap: wrap; 추가)

.flex-container{
    height: 75vh; /* 현재 화면의 75%만큼의 비율 */

    /* 
        vh : viewport height(현재 화면 높이)
        viewprot : 브라우저 또는 기기 화면
    */

    display: flex;

    flex-wrap: wrap;
}

 

flex-wrap : wrap;   추가한 결과, 화면 비율에 맞게 여러줄로 배치가 된 것을 볼 수 있음

 

=> 이것을 일렬로 정렬을 해주도록 하겠다. 

=> align-content : cross axis 방향으로 item이 포장된 라인으로 정렬하는 방법을 사용하면 된다!

(조건 : flex-wrap 속성이 wrap 또는 wrap-reverse일 때만 사용 가능. 속성값은 just-content의 속성 값을 전부 사용할 수 있다.

 

 

 

■ ③ flex-style2.css 파일(align-content: flex-start; 추가)

.flex-container{
    height: 75vh; /* 현재 화면의 75%만큼의 비율 */

    /* 
        vh : viewport height(현재 화면 높이)
        viewprot : 브라우저 또는 기기 화면
    */

    display: flex;

    flex-wrap: wrap;

    /* cross axis 방향 시작 지점으로 포장된 item들을 정렬 */
    align-content: flex-start;

}

 

=> 일렬로 정렬 된 것을 볼 수 있다.

=> 여기서 교차축 방향으로 포장된 아이템들을 양쪽으로 일정한 공간을 나눠주어 정렬을 하고 싶다면, 

"align-content: space-arund;" 및  "align-content: space-evenly;" 추가하면 된다.

 

 

 

align-content: space-around;   추가 하였을 때