안녕하세요 ~~ 오늘도 어김없이 돌아온 코딩 공부 시간 ㅎㅎ

오늘은 레이아웃을 짤 때 중요한 flex 유형을 공부해볼겁니다.

저번엔 float유형을 살펴봤는데 flex유형도 중요하니 차근차근 알아봅시당.

 

flex

flex는 css에 display 속성 중 하나로써 요소들이 포함된 큰 박스에 flex를 선언하고, 안에 있는 요소들에게는 유연하게 배치하는 속성들을 부여하여 레이아웃을 잡는 것입니다. 박스 레이아웃을 작성할 때 사용되는 아주 유용한 방법입니다.

 

flex를 쓸 때에는 필수 지정 요소들이 있는데, 어떤 건지 살펴볼게요!

 

display: flex;

 

속성 구분

flexbox는 부모요소인 flex container와 자식 요소인 flex item에 정의하는 속성이 다릅니다.

전체적인 정렬에 관련된 속성은 부모 요소에 정의하고, 크기나 순서는 자식 요소에 정의합니다.

 

flex container (👪부모 요소)

  • align-content
  • align-items
  • display
  • flex-direction
  • flex-flow
  • flex-wrap
  • justify-content

flex item(👶자식 요소)

  • align-self
  • flex
  • flex-basis
  • flex-grow
  • flex-shrink
  • order

👪flex - direction

자식 요소를 나열하는 방향을 지정하는 속성입니다. 

속성값 속성 설명
column 위에서 아래로 나열
column-reverse 아래에서 위로 나열
row(기본값) 좌측에서 우측으로 나열
row-reverse 우측에서 좌측으로 나열

👪justify-content

공간이 남을 때, 즉 flex-grow: 0;일 때 자식 요소들을 가로 정렬하는 속성입니다.

속성 값 속성 설명
flex-start (기본 값) 시작쪽으로 정렬 (보통 왼쪽, flex-direction: row-reverse일 때는 오른쪽)
flex-end 끝쪽으로 정렬 (보통 오른쪽, flex-direction: row=reverse일 때는 왼쪽)
center 중앙으로 정렬
space-between 양쪽 정렬
space-around 요소 좌우 동일 간격

👪flex - wrap

flex 자식 요소들의 줄바꿈 방식을 지정하는 속성입니다.

속성 값 속성 설명
wrap 부모 요소의 크기에 벗어나지 않게 줄바꿈합니다. (정방향)
nowrap (기본) 한줄로 배치하므로 부모 요소를 넘길 수 있습니다.
wrap - reverse 부모 요소 크기에 벗어나지 않게 줄바꿈합니다. (역방향)

👪align - items

여러 줄의 항목에서 자식 요소들을 세로 정렬하는 속성입니다. 이 속성은 항목이 한줄일 때는 효과가 없습니다. 

속성 값 속성 설명
flex-start 시작쪽으로 정렬(컨테이너 상단에 배치)
flex-end 끝쪽으로 정렬(컨테이너 바닥에 배치)
center 세로 중앙 정렬(컨테이너 중앙)
baseline 글자의 baseline 기준으로 정렬
strech(기본값) 부모 요소의 세로 크기를 따라 확장됨.

 

이미지 참고

이미지 출처

👶order

자식 요소들의 순서를 바꿔주는 속성입니다. 몇 번째에 배치할지 순서를 지정합니다.

  • 0 (기본값) : 순서를 바꾸지 않음
  • 양수 : 원하는 순서를 지정
  • 음수 : 좌측으로 자리를 바꾸는 횟

👶align-self

자식 요소 중 선택된 항목에 대해서만 세로로 다시 정렬하는 속성입니다. 속성들은 align-items의 속성들과 같습니다.

 

 

그럼 수업시간에 배운 간단한 예제로 살펴보겠습니다~!

 

레이아웃 flex 유형 코드_(flex 적용하기 전)

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>레이아웃18 - flex 반응형</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        body {
            background-color: #E1F5FE;
        }
        #wrap {
            width: 1200px;
            margin: 0 auto;
        }
        #header {
            width: 100%;
            height: 100px;
            background-color: #B3E5FC;
        }
        #nav {
            width: 100%;
            height: 100px;
            background-color: #81D4FA;
        }
        #main {
            width: 100%;
            height: 780px;
            display: flex;
            flex-direction: column;
            flex-wrap: wrap;
        }
        .aside {
            width: 30%;
            height: 780px;
            background-color: #4FC3F7;
        }
        .section {
            width: 70%;
        }
        .article1 {
            width: 100%;
            height: 260px;
            background-color: #29B6F6;
        }
        .article2 {
            width: 100%;
            height: 260px;
            background-color: #03A9F4;
        }
        .article3 {
            width: 100%;
            height: 260px;
            background-color: #039BE5;
        }
        #footer {
            width: 100%;
            height: 100px;
            background-color: #0288D1;
        }
    </style>
</head>
<body>
    <div id="wrap">
        <header id="header"></header>
        <nav id="nav"></nav>
        <main id="main">
            <aside class="aside"></aside>
            <section class="section">
                <div class="article1"></div>
                <div class="article2"></div>
                <div class="article3"></div>
            </section>
        </main>
        <footer id="footer"></footer>
    </div>
</body>
</html>

이렇게 레이아웃을 짰을 때, 출력되는 화면입니다.

 

블록 요소기 때문에 세로로 정렬이 되는데, 이런 현상을

display: flex, flex-wrap: wrap, flex-direction: column을 이용해 재배치 해보겠습니다.

 

레이아웃 flex 유형 코드_(flex 적용한 후)

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>레이아웃18 - flex 반응형</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        body {
            background-color: #E1F5FE;
        }
        #wrap {
            width: 1200px;
            margin: 0 auto;
            display: flex;
            flex-wrap: wrap;
        }
        #header {
            width: 100%;
            height: 100px;
            background-color: #B3E5FC;
        }
        #nav {
            width: 100%;
            height: 100px;
            background-color: #81D4FA;
        }
        #main {
            width: 100%;
            height: 780px;
            display: flex;
            flex-direction: column;
            flex-wrap: wrap;
        }
        .aside {
            width: 30%;
            height: 780px;
            background-color: #4FC3F7;
        }
        .section {
            width: 70%;
        }
        .article1 {
            width: 100%;
            height: 260px;
            background-color: #29B6F6;
        }
        .article2 {
            width: 100%;
            height: 260px;
            background-color: #03A9F4;
        }
        .article3 {
            width: 100%;
            height: 260px;
            background-color: #039BE5;
        }
        #footer {
            width: 100%;
            height: 100px;
            background-color: #0288D1;
        }
    </style>
</head>
<body>
    <div id="wrap">
        <header id="header"></header>
        <nav id="nav"></nav>
        <main id="main">
            <aside class="aside"></aside>
            <section class="section">
                <div class="article1"></div>
                <div class="article2"></div>
                <div class="article3"></div>
            </section>
        </main>
        <footer id="footer"></footer>
    </div>
</body>
</html>

이렇게 flex를 사용하면

예쁘게 자리 잡은 걸 확인할 수 있습니다 ㅎㅎ

float유형보다 훨씬 간단한 거 같아요!

 

오늘은 이렇게 css 속성 중 flex에 대해 알아보았는데요,

도움이 되셨다면 공감과 댓글 부탁드릴게요 >"<

728x90
반응형
다쭐◠‿◠