코딩 공부/CSS

레이아웃 flex 유형 방법을 알아보자!

천서리 2023. 3. 1. 04:25
QUOTE THE DAY

“ 당신이 6개월 이상 한 번도 보지 않은 코드는 다른 사람이 다시 만드는 게 훨씬 더 나을 수 있다. ”

- 이글슨 (Eagleson)
반응형

flex

  • flex는 flexble의 준말로 유동적인 레이아웃을 손쉽게 만들 수 있다는 의미를 가진다.
  • 기존의 웹페이지를 만들 때 사용하던 올드한 레이아웃 제작방법을 개선하고자 flexbox가 생겨났다.
  • flex layout은 요소들이 포함된 큰 박스에 flex를 선언하고, 안에 있는 요소들에게는 유연하게 배치하는 속성들을 부여하여 레이아웃을 잡는 것입니다.
display: flex;
display: -webkit-flex;
display: -ms-flexbox;

위 구문은 해당 요소에 flex로 레이아웃을 설계한다고 선언한다는 뜻입니다.

 


필수 지정 속성

1. display : flex;

2. flex-direction : 방향;

flex를 활용하기 위해서는 부모에 필수적으로 달아줘야하는 css 속성이 있습니다,

아래 속성들은 부모 엘리먼트에 적용해야합니다.

  • display : flex;

    - flex 레이아웃을 적용한다.

  • flex-direction : row; (row || column || row-reverse || column-reverse)

    - 내부 요소들의 정렬 방향

    - row는 가로방향 정렬

    - column은 세로방향 정렬

    - reverse는 각 방향의 반대에서부터 정렬

 


flex 속성 - 부모 요소

1. flex - wrap : 줄바꿈 설정하기

자식 요소들의 수가 많아져서 개수가 꽉찼을 때

부모요소에 flex-wrap : wrap을 적용하면 자동 줄바꿈을 해줍니다.

  • flex-wrap: wrap
속성 값 속성 설명
wrap 자식 요소들이 많으면 다음 줄로 넘침
nowrap 자식 요소들이 많아도 한줄 안에 배치됨
wrap-reverse 자식 요소들이 많으면 다음 위 줄로 넘침

 

 

2. justify-content : 축 수평방향 정렬

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

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

 

3. align-items : 축 수직 방향 정렬

자식 요소들을 세로 정렬하는 속성입니다.

속성 값 속성 설명
flex-start 시작쪽으로 정렬 (보통 위쪽, flex-direction: column-reverse일 때는 아래쪽)
flex-end 끝쪽으로 정렬 (보통 아래쪽, flex-direction: column=reverse일 때는 위쪽)
center 세로 중앙 정렬
baseline 글자의 baseline 기준으로 정렬
stretch(기본 값) 부모 요소의 세로 크기를 따라 확장됨

 

4. align-content

align-items가 자식 요소 각각의 세로정렬을 정의했다면

align-contents는 flex된 요소들이 여러줄일 경우 행간의 여백을 정의하는 속성이다.

속성 값 속성 설명
flex-start 부모 요소의 시작점에 맞춰 정렬
flex-end 부모 요소의 끝점에 맞춰 정렬
center 부모 요소의 중앙에 맞춰 정렬
space-between  첫째 줄은 최상단, 마지막 줄은 최하단에 배치되고 남은 여백을 균등하게 분배
space-around 모든 줄의 상하 여백을 균등하게 분배
stretch (default)  부모 요소의 높이에 맞춰 늘어남 (단, 자식 요소의 높이값이 지정되지 않은 경우)

 


flex 속성 - 자식 요소

1. older

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

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

 

2. align-self

자식 요소 중 선택된 항목에 대해서만 세로로 다시 정렬하는 속성입니다.

속성들은 align-items의 속성들과 같습니다.

 

 

3. flex-grow

  • 자식요소의 너비증가비율을 나타냅니다.
  • 픽셀단위가 아닌 비율단위로 너비를 변경해줍니다.
  • 기본값은 0이고, 속성은 50%이렇게가 아닌 1,2,3 이런 숫자로 나타냅니다.
  • 자식요소들의 flex-grow의 수치를 다 더해서 전체 너비비율의 총합을 알아내고
    각 자식요소의 비율 / 너비비율 총합으로 계산해서 너비비율을 정합니다.

레이아웃 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>레이아웃 - flex 유형</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        body {
            background-color: #E8F5E9;
        }
        #wrap {
            width: 1200px;
            margin: 0 auto;
        }
        #header {
            width: 1200px;
            height: 100px;
            background-color: #C8E6C9;
        }
        #nav {
            width: 1200px;
            height: 100px;
            background-color: #A5D6A7;
        }
        #main {
            width: 1200px;
            height: 780px;
            display: flex;
        }
        #aside {
            width: 300px;
            height: 780px;
            background-color: #81C784;
        }
        #section {
            width: 600px;
            height: 780px;
            background-color: #66BB6A;
        }
        #article {
            width: 300px;
            height: 780px;
            background-color: #4CAF50;
        }
        #footer {
            width: 1200px;
            height: 100px;
            background-color: #43A047;
        }
    </style>
</head>
<body>
    <div id="wrap">
        <header id="header"></header>
        <nav id="nav"></nav>
        <main id="main">
            <aside id="aside"></aside>
            <section id="section"></section>
            <article id="article"></article>
        </main>
        <footer id="footer"></footer>
    </div>
</body>
</html>

 

결과

반응형
Adventure Time - BMO