Frontend/CSS

flexbox

olli2 2021. 12. 6. 22:20

flexbox

  • 가변적인 박스를 간단하게 만드는 기술
  • 웹사이트 구조 설계를 위한 기술
  • 박스 쉽게 배치할 수 있다는 장점
  • 플렉서블 박스의 특정 속성값을 설정하여 여러 박스의 높이/길이/위치 등이 유연하게 작동하는 박스를 간단히 만들 수 있음
  • 요소의 배치를 1차원적으로 효과적으로 할 수 있게 도와주는 css의 기능

flexbox 구성요소

flex container = 부모 박스

  • 가변적인 박스로 작동하기 위한 기본 개념
  • flexbox를 사용하기 위한 필수 개념
  • wrap처럼 모든 flex item을 감싸고 있는 존재
  • 특정 속성값을 적용하여 가변적인 박스로 작동하게 함
  • 여러 속성을 통해 내부 아이템의 정렬 및 속성 부여 가능
  • 반드시 display 속성에 flex 또는 inline-flex 키워드를 주어야 flexbox로 사용 가능

flex item = 자식 박스

  • flexbox의 내부를 구성하는 자식 요소들
  • 정렬 대상
  • 다양한 속성값에 의해 배치 순서, 내부 내용 정렬 가능

주축과 교차축

주축

  • flexbox 내부의 item을 쌓아 갈 방향
  • flex item 배치의 중심이 되는 축
  • flex-direction 에 의해 정의됨
    • row (default)
    • row-reverse
    • column
    • column-reverse
      • row 또는 row-reverse -> 주축은 인라인 방향으로 행을 따름 (페이지 좌측 -> 우측 또는 우측 -> 좌측)
      • column또는 column-reverse -> 주축은 블록 방향으로 행을 따름 (페이지 상단 -> 하단 또는 하단 -> 상단)
      • flex-direction: column -> 행의 끝까지 영역을 차지
      • flex-direction: row -> 내부 컨텐츠만큼의 영역만 차지

교차축

  • 주축의 반대방향 (주축에 수직함)
    • 주축 = row(가로) -> 교차축 = column(세로)
    • 주축 = column(세로) -> 주축 = row(가로)
  • flexbox에서는 기본적으로 교차축 방향의 가장 큰 엘리먼트에 크기를 맞추도록 되어 있음

flexbox 적용 속성

flex container (부모 박스)에 설정하는 속성

  • display : 부모 박스 배치 형태
    • flex : 수직 정렬 (block 형태)
    • inline-flex : 수평 정렬 (inline-block)
  • flex-direction : item 배치 형태
    • row : 왼쪽 -> 오른쪽
    • row-reverse : 오른쪽 -> 왼쪽
    • column : 위 -> 아래
    • column-reverse : 아래 -> 위
  • flex-wrap
    • wrap : 여러 줄
    • nowrap : 1줄
    • wrap-reverse. 여러 줄. 아래 -> 위
  • flex-flow
    • flex-direction과 flex-wrap을 한 번에 선언 가능
    • ex) flex-flow : column no wrap;
  • justify-content (주축을 따라 flex item 정렬)
    • flex-start: flexbox의 시작점 기준으로 item 정렬 (default)
    • flex-end: flexbox의 끝점 기준으로 item 정렬
    • space-between : item들 사이에 균일한 간격의 빈 공간을 위치 시킴
    • space-around: item들 사이에 균일한 간격의 빈 공간을 위치 시킴 + 양 옆에도 약간의 빈 공간 존재
    • space-evenly : item들 사이 뿐만 아니라 양 옆에도 균일한 간격의 빈 공간을 위치 시킴
justify-content: flex-start;
justify-content: flex-end;
justify-content: space-between;
justify-content: space-around;
justify-content: space-evenly ;
  • align-items (교차축을 따라 flex item 정렬. 컨테이너 안에서 item들이 어떻게 정렬하는지를 지정)
    • center : (교차축=y축일 때 item들 수직 중앙 정렬, x축일 때 수평 중앙 정렬)
    • flex-start : (교차축=y축일 때 item들을 교차축 y의 시작점 기준으로 정렬)
    • flex-end : (교차축=y축일 때 item들을 교차축 y의 끝점 기준으로 정렬)
    • stretch : (교차축 기준 내부 item들 중 가장 높이가 큰 item 기준으로 높이 설정)
align-items: center; 
align-items: flex-start;
align-items: flex-end; 
align-items: stretch;
  • align-content (여러 줄 들 사이의 간격 지정)
    • flex-start : 여러 줄들을 컨테이너의 꼭대기에 정렬
    • flex-end : 여러 줄들을 컨테이너의 바닥에 정렬
    • center : 여러 줄들을 세로선 상의 가운데에 정렬
    • space-between : 여러 줄들 사이에 동일한 간격
    • space-around : 여러 줄들 주위에 동일한 간격
    • stretch : 여러 줄들을 컨테이너에 맞도록 늘림

flex item (자식 박스)에 설정하는 속성

  • order
    • 내부 items들 정렬 순서 지정
    • 기본 값 (현재 자신 위치 값) = 0
    • 양수 음수 모두 가능
  • flex-grow
    • 컨테이너의 크기가 커질 경우, item 자신의 고유한 사이즈를 어떻게 변경할 지 지정
    • default = 0, 변경하지 않음
    • 첫 번째 요소의 flex-grow 값을 2로, 나머지 요소의 flex-grow 값을 1로 설정하면 첫 번째 요소가 나머지 요소들의 크기보다 2배 커짐
  • flex-shrink
    • 컨테이너의 크기가 커질 경우, item 자신의 고유한 사이즈를 어떻게 변경할 지 지정
    • flex-grow의 반대 개념
  • flex-basis
    • item들이 공간을 얼마나 차지해야 하는지 세부적으로 명시
    • 컨테이너의 width에 따라서 각 item들이 몇 % 비율의 크기를 가질 지를 지정 (flex-grow + flex-shrink)
  • align-self
    • 컨테이너에 지정된 배치 속성들로부터 벗어나서 아이템 각각 하나하나에 배치 속성 부여 가능