1.  플렉스 박스 레이아웃 flex box lay-out 에서 사용하는 용어

📌  플렉스 박스 레이아웃은 그리드 레이아웃을 기본으로 하고 각 박스를 원하는 위치에 따라 배치
📌  여유 공간이 생길 경우 너비나 높이를 적절하게 늘이거나 줄일 수 있다

 

 

출처: https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/Flexbox

 

 

플렉스 컨테이너 (부모 박스) : 플렉스 박스 레이아웃을 적용할 대상을 묶는 요소

플렉스 항목 (자식 박스) : 플렉스 박스 레이아웃을 적용할 대상으로 위 이미지의 'flex item' 모두 해당

주축(main axis) : 플렉스 컨테이너 안에서 플렉스 항목을 배치하는 기본 방향 (왼쪽 ➡️ 오른쪽)

                                 플렉스 항목의 배치가 시작되는 위치를 '주축 시작점', 끝나는 위치를 '주축 끝점'

교차축(cross axis) : 주축과 교차하는 방향 (위 ➡️ 아래)

                                      플렉스 항목의 배치가 시작되는 위치를 '교차축 시작점', 끝나는 위치를 '교차축 끝점'

 


 

2.  플렉스 박스 항목을 배치하는 속성

 

종류 설명
justify-content 주축 방향의 정렬 방법
align-self 교차축에 있는 개별 항목의 정렬 방법
align-content 교차축에서 여러 줄로 표시된 항목의 정렬 방법
align-items 자식 요소가 1개이거나 줄 바꿈이 필요없을 때

 

1) display 속성

 

flex : 부모요소는 블록 속성을 유지하면서 자식 요소에  flex 환경설정.
inline-flex : 부모요소는 인라인 속성으로 변경하면서 자식 요소에 flex 환경설정.
                          ▶️ 플렉스 박스를 인라인 레벨 요소로 정의.

💡 배치할 요소에 속성을 지정하는 것이 아닌 부모 요소에 속성을 지정
💡 inline 요소도 flex 적용 하면 너비와 높이를 가짐

 

<head>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        main {
            width: 100%;
            height: 100vh; /* vh : Vertical Height. 화면 기준 높이 */
            background: #eaeaea;
        }

        section {
            border: 10px solid pink;
        }

        section article {
            width: 100px;
            height: 100px;
            background: #b6b2b2;
            border: 1px solid #b6b2b2;
        }

        section article {
            /* float: left; */
        }

        section article {
            /* display: inline-block */
        }
        section {
            /* display: flex; */
            display: inline-flex; /* 부모 요소인 section을 인라인 속성으로 바꾸기 */
        }

    </style>
</head>
<body>
    <main>
        <section>
            <article></article>
            <article></article>
            <article></article>
            <article></article>
            <article></article>
        </section>
    </main>
</body>

float: left 적용시


display: inline-block 적용 시 ( 글자 사이 간격 때문에 빈틈이 생김 )


display: flex 적용 시


display: inline-flex 적용 시

 


 

2) flex-direction 속성

 

🥑  플렉스 항목을 배치하는 주축과 방향을 지정하는 속성

 

 flex-direction : row - flex의 기본축을 가로로 지정
                                ▶️ 주축을 가로로, 교차축을 세로로 지정  <기본값> / 왼쪽에서 오른쪽

 flex-direction : column - flex의 기본축을 세로로 지정
                                ▶️ 주축을 세로로 교차축을 가로로 지정 / 위에서 아래로

 flex-direction : row-reverse - 주축을 가로로 지정하고 자식 요소 콘텐츠를 가로 역순으로 정렬. 
                              ▶️ 오른쪽에서 왼쪽으로 
 flex-direction : column-reverse - 주축을 세로로 지정하고 자식 요소 콘텐츠를 세로 역순으로 정렬.

                                  ▶️ 아래에서 위

<head>
<!-- 위 코드와 스타일 똑같이 적용 후 지정 -->
    <style>
        section { /* flex-direction 적용 */
            display: flex;
            flex-direction: row | column | row-reverse | column-reverse;
        }
    </style>
</head>
<body>
    <main>
        <section>
            <article>1</article>
            <article>2</article>
            <article>3</article>
            <article>4</article>
            <article>5</article>
        </section>
    </main>
</body>

flex-direction: row 지정


flex-direction: row-reverse 지정


flex-direction: column 적용 시


flex-direction: column-reverse 적용 시

 


 

3) flex-wrap 속성

 

🥑  플렉스 컨테이너 너비보다 많은 플렉스 항목이 있을 경우 줄을 바꿀지 여부를 지정

🥑  float 속성을 사용하여 레이아웃을 만들 때 모든 자식 요소의 총 너비 값이 부모 요소의 너비 값보다 크면 자동으로 줄 바꿈이 되지만
       flex 속성에서는 flex-wrap을 설정해야 줄 바꿈을 할 수 있음

🥑  속성 지정 후 웹 브라우저 화면의 너비를 늘리거나 줄여 보면 플렉스 컨테이너의 너비에 따라 여러줄로 표시

🥑  flex-direction: column 일 경우에는 적용이 안됨

 

flex-wrap: nowrap - <기본값>. 자식요소의 줄 바꿈을 하지 않음
flex-wrap: wrap - 자식요소의 줄바꿈 o 
flex-wrap: wrap-reverse - 자식요소 줄바꿈 o, 아래에서 위로 배치

 

    <style>
        section {
            display: flex;
            flex-wrap: nowrap | wrap | wrap-reverse;
        }
     
    </style>
</head>
<body>
<main>
    <section>
        <article>1</article>
        <article>2</article>
        <article>3</article>
        <article>4</article>
        <article>5</article>
        <article>6</article>
        <article>7</article>
    </section>
</main>

nowrap인 경우


wrap인 경우


wrap-reverse인 경우


 

4) flex-flow 속성

 

🥑  flex-direction  속성과 flex-wrap 속성을 한꺼번에 지정하여 플렉스 항목의 배치방향을 결정하거나 줄을 바꾼다

🥑  기본값은 flex-flow: row nowrap

 


 

5) justify-content 속성

 

🥑  주축에서 플렉스 항목 간의 정렬 방법을 지정

 

justify-content: flex-start              - 자식 요소를 시작쪽부터 정렬
justify-content: flex-end                - 자식 요소를 끝쪽부터 정렬
justify-content: center                    - 자식 요소를 가운데로 정렬
justify-content: space-between  - 자식 요소를 양끝부터 나눠서 정렬
justify-content: space-around     - 자식 요소의 여백을 균일하게 배분해서 정렬
justify-content: space-evenly      - 자식 요소의 여백을 양끝까지 균일하게 배분해서 정렬

 

<head>
    <style>
        section {
            height: 100%;
            box-sizing: border-box;
            display: flex;
            flex-flow: row wrap; /* row 기준으로 적용 */

            justify-content: flex-start | flex-end | center | 
                             space-between | space-around | space-evenly;
        }

    </style>
</head>
<body>
<main>
    <section>
        <article>1</article>
        <article>2</article>
        <article>3</article>
        <article>4</article>
        <article>5</article>
    </section>
</main>
</body>

 

start와 end 적용 결과
center와 space-between 적용 결과
space-around와 space-evenly

 

 


 

6) align-content 

 

🥑  align-content, align-items : 반대 축 정렬

🥑  주축에서 줄 바꿈이 생겨 ( 브라우저 크기 줄이는 등 ) 자식 요소를 여러 줄로 표시할 때 사용

🥑  교차축 기준 플렉스 항목 간의 간격을 지정할 수 있다

 

align-content: flex-start                - 자식 요소를 시작 방향으로 정렬
align-content: flex-end                  - 자식 요소를 종료 방향으로 정렬
align-content: center                      - 자식 요소를 가운데로 정렬
align-content: space-between    -  첫 번째 항목과 끝 항목을 교차축의 시작점과 끝점에 맞추고
                                                                      나머지 항목은 그 사이에 같은 간격으로 배치 

align-content: space-around       - 자식 요소들의 여백을 균일하게 배분해서 정렬
align-content: space-evenly        - 자식 요소들의 여백을 양끝까지 균일하게 배분해서 정렬

 

    <style>  
        section {
            height: 100%;
            box-sizing: border-box;

            display: flex;
            flex-flow: row wrap;

            align-content: flex-start | flex-end | center | 
                           space-between | space-around | space-evenly;
        }
    </style>
</head>
<body>
<main>
    <section>
        <article>1</article>
        <article>2</article>
        <article>3</article>
        <article>4</article>
        <article>5</article>
        <article>1</article>
        <article>2</article>
        <article>3</article>
        <article>4</article>
        <article>5</article>
    </section>
</main>

</body>

flex-start와 flex-end

 

center 와 space-between

 

space-around와 space-evenly

 


 

7) align-items 속성

 

🥑  align-items : 자식 요소가 1개 이거나 줄 바꿈이 필요없을 때

 

align-items: flex-start     - 교차축 시작점에 맞춰 배치
align-items: flex-end       - 교차축 끝점에 맞춰 배치
align-items: center           -  교차축 중앙에 배치
align-items: stretch          -  <기본값> 플렉스 항목을 확장해 교차축을 꽉 채움
align-items: baseline        -  교차축의 문자 기준선에 맞춰 배치

💡 stretch와 baseline은 크기 지정을 하지 않았을 때 적용 됨!

 

<head>    
    <style>
        section {
            height: 100%;
            box-sizing: border-box;

            display: flex;
            flex-flow: row nowrap;

            align-items: stretch;
        }
    </style>
</head>
<body>
<main>
    <section>
        <article>1</article>
        <article>2</article>
        <article>3</article>
        <article>4</article>
        <article>5</article>
    </section>
</main>
</body>

 

flex-start와 flex-end
center

 

baseline과 stretch

 

 

 

 

 

[ 내용 참고 : IT 학원 강의 및 책 'Do it HTML+CSS+자바스크립트 웹 표준의 정석' ]

+ Recent posts