본문 바로가기

컴퓨터/CSS

CSS flexbox

  CSS flexbox를 이용하면 웹페이지를 이쁘게 꾸밀 수 있다. HTML의 <table> 태그와 비슷한 듯 하지만 다르다. flexbox는 결과물은 이쁜데 그 과정이 제대로 알고 보면 쉽지만 제대로 모르고 보면 복잡하고 헷갈린다. 그러니 아래의 내용을 대충 읽지 말고 차근차근 정독하자. 다시 말하지만 쓱 속독해서는 오히려 헷갈릴 것이다.

  flexbox는 부모 요소인 [flex container]와 다수의 자식 요소인 [flex items]로 구성된다.

<div id="container">
  <div class="items">자식요소1</div>
  <div class="items">자식요소2</div>
  <div class="items">자식요소3</div>
</div>

  결국 [flex container]와 [flex items]에 각각 합당한 속성을 부여해 이쁜 결과를 만드는 것이 flexbox를 활용하는 방법이다.

속성
container display, flex-flow(flex-direction, flex-wrap), justify-content, align-content, align-items
items order, flex(flex-grow, flex-shrink, flex-basis), align-self

flex container> display

  어떤 개체를 [flex container]로 사용하기 위해선 먼저 아래와 같이 정의를 해주어야 한다.

#container {
  display: flex;
}

flex container> flex-flow> flex-direction

  flex-flow보다 그 하위 개념인 flex-direction을 먼저 알아야 된다는 사실에 의아해하지 말고 읽어라. 다 이유가 있다. 

  flex-direction은 items의 주 축(main-axis)을 설정한다. 그에 따라 교차 축(cross-axis)도 자동으로 결정된다. 그에 따라 시작점(flex-start)과 끝점(flex-end)도 자동으로 결정된다.

#container {
  flex-direction: row;
}
의미 주축 교차축 시작점 끝점 기본값
row items를 왼쪽에서 오른쪽으로 표시한다. 수평 수직 왼쪽 오른쪽
row-reverse items를 오른쪽에서 왼쪽으로 표시한다. 수평 수직 오른쪽 왼쪽  
column items를 위에서 아래로 표시한다. 수직 수평 아래  
column-reverse items를 아래에서 위로 표시한다. 수직 수평 아래  

flex container> flex-flow> flex-wrap

  flex-wrap은 items의 줄 바꿈을 설정한다.

#container {
  flex-wrap: nowrap;
}
의미 기본값
nowrap items를 줄 바꿈 하지 않음
wrap items를 flex-direction 방향으로 줄 바꿈 함   
wrap-reverse items를 flex-direction의 역방향으로 줄 바꿈 함  

flex container> flex-flow

  flex-flow는 flex-direction과 flex-wrap을 한 번에 표시할 수 있게 해 준다.

#container {
  flex-flow: row nowrap;
}

flex container> justify-content

  justify-content는 주축의 정렬 방법(align)을 설정한다.

의미 기본값
flex-start items를 시작점에 붙인다.
flex-end items를 끝점에 붙인다.  
center items를 가운데에 붙인다.  
space-between 시작 item을 시작점에 붙이고 끝 item을 끝점에 붙인 후 나머지를 고르게 정렬한다.  
space-around items를 양 끝의 균등한 여백을 포함하여 정렬한다.  
#container {
  justify-content: center;
}

flex container> align-content

  align-content는 교차축 자체의 정렬 방법(align)을 설정한다. 단, flex-wrap 속성을 통해 items가 2줄 이상이고 여백이 있을 경우만 사용할 수 있다.

의미 기본값
stretch Items를 늘려 교차축을 꽉 채운다.
flex-start items를 시작점에 붙인다.  
flex-end items를 끝점에 붙인다.  
center items를 가운데에 붙인다.  
space-between 시작 item을 시작점에 붙이고 끝 item을 끝점에 붙인 후 나머지를 고르게 정렬한다.  
sapce-around items를 양 끝의 균등한 여백을 포함하여 정렬한다.  

flex container> align-items

  align-items는 교차축 안에서 items 정렬 방법(align)을 설정한다. 단, flex-wrap 속성을 통해 items가 2줄 이상이면 align-content 속성이 우선된다. 따라서 align-items를 사용하려면 align-content 속성을 기본값(stretch)으로 설정해야 한다.

.items {
  align-items: stretch;
}
의미 기본값
stretch Items를 늘려 교차축을 꽉 채운다.
flex-start items를 시작점에 붙인다.  
flex-end items를 끝점에 붙인다.  
center items를 가운데에 붙인다.  
space-between 시작 item을 시작점에 붙이고 끝 item을 끝점에 붙인 후 나머지를 고르게 정렬한다.  
sapce-around items를 양 끝의 균등한 여백을 포함하여 정렬한다.  

flex items> order

  item의 순서를 설정한다. 숫자가 작을수록 앞쪽에 숫자가 클수록 뒤쪽에 배치되고 음수도 허용된다. 기본값은 0.

.items:nth-child(1) {
  order: 1;
}

flex items> flex-basis

  item의 (공간 배분 전) 기본 너비를 설정한다. 값이 auto 일 경우 내용물의 width 값이 기본 너비가 된다. 값을 단위와 함께 설정해주면 내용물의 width 값에 설정한 값이 더해져서 기본 너비가 설정된다. 값이 0일 경우에는 내용물과 상관없이 기본 너비가 없다. 기본값은 auto.

.items:nth-child(1) {
  flex-basis: 0;
}

flex items> flex-grow

  item의 증가 너비 비율을 설정한다. 숫자가 클수록 더 많은 너비가 증가한다. Item이 가변 너비가 아니거나, 값이 0일 경우 효과가 없다. 기본값은 0. 1해야 늘어난다.

.items:nth-child(1) {
  flex-grow: 1;
}

flex items> flex-shrink

  item의 감소 너비 비율을 설정한다. 숫자가 클수록 더 많은 너비가 감소한다. Item이 가변 너비가 아니거나, 값이 0일 경우 효과가 없다. 기본값은 1.

.items:nth-child(1) {
  flex-shrink: 1;
}

flex items> flex

  flex-grow, flex-shirink, flex-basis 순서로 한 번에 설정할 수 있다.

.items:nth-child(1) {
  flex: 0 1 auto;
}

flex items> align-self

  교차축 안에서 개별 Item의 정렬 방법을 설정한다. align-items는 container 내 모든 Items의 정렬 방법을 설정한다. 필요에 의해 일부 Item만 정렬 방법을 변경하려고 할 경우에 align-self를 사용한다. align-items보다 align-self가 우선이다.

의미 기본값
auto container의 align-items 속성을 상속받는다.
stretch Item을 늘려 교차축을 꽉 채운다.  
flex-start item을 시작점에 붙인다.  
flex-end item을 끝점에 붙인다.  
center item을 가운데에 붙인다.  
baseline item을 문자 기준선에 정렬한다.  

 

'컴퓨터 > CSS' 카테고리의 다른 글

CSS transition  (0) 2022.04.29
CSS transform  (0) 2022.04.29
CSS position  (0) 2022.04.29
CSS  (0) 2021.11.22
CSS 토글  (0) 2021.02.12